[516500] Cache preference value whether to process proxies
2% of the overall time to do a compare-with-head on a large logical
model is spent looking up the resolution scope in the preferences in
LocalMonitoredProxyCreationListener and
RemoteMonitoredProxyCreationListener.
We should determine and cache this value once.
Bug: 516500
Change-Id: Iaf2032627456236c8330b2261c608848d85f7a12
Signed-off-by: Philip Langer <planger@eclipsesource.com>
diff --git a/plugins/org.eclipse.emf.compare.ide.ui.tests/src/org/eclipse/emf/compare/ide/ui/tests/logical/resolver/AbstractMonitoredProxyCreationListenerTest.java b/plugins/org.eclipse.emf.compare.ide.ui.tests/src/org/eclipse/emf/compare/ide/ui/tests/logical/resolver/AbstractMonitoredProxyCreationListenerTest.java
index ed50d2a..6e444c3 100644
--- a/plugins/org.eclipse.emf.compare.ide.ui.tests/src/org/eclipse/emf/compare/ide/ui/tests/logical/resolver/AbstractMonitoredProxyCreationListenerTest.java
+++ b/plugins/org.eclipse.emf.compare.ide.ui.tests/src/org/eclipse/emf/compare/ide/ui/tests/logical/resolver/AbstractMonitoredProxyCreationListenerTest.java
@@ -28,6 +28,7 @@
import org.eclipse.emf.ecore.EStructuralFeature;
import org.eclipse.emf.ecore.InternalEObject;
import org.eclipse.emf.ecore.resource.Resource;
+import org.junit.Before;
@SuppressWarnings({"restriction", "nls" })
public class AbstractMonitoredProxyCreationListenerTest {
@@ -54,7 +55,8 @@
InternalEObject proxy;
- public void preSetUp() {
+ @Before
+ public void setUp() {
monitor = mock(ThreadSafeProgressMonitor.class);
eventBus = mock(EventBus.class);
localResolver = mock(IResourceDependencyLocalResolver.class);
diff --git a/plugins/org.eclipse.emf.compare.ide.ui.tests/src/org/eclipse/emf/compare/ide/ui/tests/logical/resolver/LocalMonitoredProxyCreationListenerTest.java b/plugins/org.eclipse.emf.compare.ide.ui.tests/src/org/eclipse/emf/compare/ide/ui/tests/logical/resolver/LocalMonitoredProxyCreationListenerTest.java
index e5c0695..1487e4e 100644
--- a/plugins/org.eclipse.emf.compare.ide.ui.tests/src/org/eclipse/emf/compare/ide/ui/tests/logical/resolver/LocalMonitoredProxyCreationListenerTest.java
+++ b/plugins/org.eclipse.emf.compare.ide.ui.tests/src/org/eclipse/emf/compare/ide/ui/tests/logical/resolver/LocalMonitoredProxyCreationListenerTest.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2015 EclipseSource Muenchen GmbH.
+ * Copyright (c) 2015, 2017 EclipseSource Muenchen GmbH and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
@@ -7,6 +7,7 @@
*
* Contributors:
* Michael Borkowski - initial test implementation
+ * Philip Langer - bug 516500
*******************************************************************************/
package org.eclipse.emf.compare.ide.ui.tests.logical.resolver;
@@ -16,7 +17,6 @@
import org.eclipse.emf.compare.ide.ui.internal.logical.resolver.CrossReferenceResolutionScope;
import org.eclipse.emf.compare.ide.ui.internal.logical.resolver.LocalMonitoredProxyCreationListener;
import org.eclipse.emf.compare.ide.ui.internal.logical.resolver.ResourceDependencyFoundEvent;
-import org.junit.Before;
import org.junit.Test;
@SuppressWarnings("nls")
@@ -24,15 +24,10 @@
LocalMonitoredProxyCreationListener sut;
- @Before
- public void setUp() {
- preSetUp();
- sut = new LocalMonitoredProxyCreationListener(monitor, eventBus, localResolver, diagnostic);
- }
-
@Test
public void testCorrectProxy() {
prepareTest("platform:/resource/to", CrossReferenceResolutionScope.WORKSPACE);
+ sut = new LocalMonitoredProxyCreationListener(monitor, eventBus, localResolver, diagnostic);
sut.proxyCreated(source, eObject, feature, proxy, 3);
verify(eventBus).post(new ResourceDependencyFoundEvent(from, to, eObject, feature));
@@ -42,6 +37,7 @@
@Test
public void testNonPlatformResource() {
prepareTest("nonplatform:/resource/to", CrossReferenceResolutionScope.WORKSPACE);
+ sut = new LocalMonitoredProxyCreationListener(monitor, eventBus, localResolver, diagnostic);
sut.proxyCreated(source, eObject, feature, proxy, 3);
verifyZeroInteractions(eventBus, localResolver);
@@ -50,6 +46,7 @@
@Test
public void testNonAbsolutePlatformResource() {
prepareTest("platform:relative/file", CrossReferenceResolutionScope.WORKSPACE);
+ sut = new LocalMonitoredProxyCreationListener(monitor, eventBus, localResolver, diagnostic);
sut.proxyCreated(source, eObject, feature, proxy, 3);
verifyZeroInteractions(eventBus, localResolver);
@@ -58,6 +55,7 @@
@Test
public void testWrongResolutionScope() {
prepareTest("platform:/resource/to", CrossReferenceResolutionScope.SELF);
+ sut = new LocalMonitoredProxyCreationListener(monitor, eventBus, localResolver, diagnostic);
sut.proxyCreated(source, eObject, feature, proxy, 3);
verifyZeroInteractions(eventBus, localResolver);
diff --git a/plugins/org.eclipse.emf.compare.ide.ui.tests/src/org/eclipse/emf/compare/ide/ui/tests/logical/resolver/RemoteMonitoredProxyCreationListenerTest.java b/plugins/org.eclipse.emf.compare.ide.ui.tests/src/org/eclipse/emf/compare/ide/ui/tests/logical/resolver/RemoteMonitoredProxyCreationListenerTest.java
index 95e3a15..12baf56 100644
--- a/plugins/org.eclipse.emf.compare.ide.ui.tests/src/org/eclipse/emf/compare/ide/ui/tests/logical/resolver/RemoteMonitoredProxyCreationListenerTest.java
+++ b/plugins/org.eclipse.emf.compare.ide.ui.tests/src/org/eclipse/emf/compare/ide/ui/tests/logical/resolver/RemoteMonitoredProxyCreationListenerTest.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2015 EclipseSource Muenchen GmbH.
+ * Copyright (c) 2015, 2017 EclipseSource Muenchen GmbH and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
@@ -7,6 +7,7 @@
*
* Contributors:
* Michael Borkowski - initial test implementation
+ * Philip Langer - bug 516500
*******************************************************************************/
package org.eclipse.emf.compare.ide.ui.tests.logical.resolver;
@@ -15,7 +16,6 @@
import org.eclipse.emf.compare.ide.ui.internal.logical.resolver.CrossReferenceResolutionScope;
import org.eclipse.emf.compare.ide.ui.internal.logical.resolver.RemoteMonitoredProxyCreationListener;
-import org.junit.Before;
import org.junit.Test;
@SuppressWarnings("nls")
@@ -23,15 +23,10 @@
RemoteMonitoredProxyCreationListener sut;
- @Before
- public void setUp() {
- preSetUp();
- sut = new RemoteMonitoredProxyCreationListener(monitor, remoteResolver, diagnostic);
- }
-
@Test
public void testCorrectProxy() {
prepareTest("platform:/resource/to", CrossReferenceResolutionScope.WORKSPACE);
+ sut = new RemoteMonitoredProxyCreationListener(monitor, remoteResolver, diagnostic);
sut.proxyCreated(source, eObject, feature, proxy, 3);
verify(remoteResolver).demandRemoteResolve(synchronizedResourceSet, to, diagnostic, monitor);
@@ -40,6 +35,7 @@
@Test
public void testNonPlatformResource() {
prepareTest("nonplatform:/resource/to", CrossReferenceResolutionScope.WORKSPACE);
+ sut = new RemoteMonitoredProxyCreationListener(monitor, remoteResolver, diagnostic);
sut.proxyCreated(source, eObject, feature, proxy, 3);
verifyZeroInteractions(localResolver);
@@ -48,6 +44,7 @@
@Test
public void testNonAbsolutePlatformResource() {
prepareTest("platform:relative/file", CrossReferenceResolutionScope.WORKSPACE);
+ sut = new RemoteMonitoredProxyCreationListener(monitor, remoteResolver, diagnostic);
sut.proxyCreated(source, eObject, feature, proxy, 3);
verifyZeroInteractions(localResolver);
@@ -56,6 +53,7 @@
@Test
public void testWrongResolutionScope() {
prepareTest("platform:/resource/to", CrossReferenceResolutionScope.SELF);
+ sut = new RemoteMonitoredProxyCreationListener(monitor, remoteResolver, diagnostic);
sut.proxyCreated(source, eObject, feature, proxy, 3);
verifyZeroInteractions(localResolver);
diff --git a/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/logical/resolver/LocalMonitoredProxyCreationListener.java b/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/logical/resolver/LocalMonitoredProxyCreationListener.java
index aae6fc9..abab08d 100644
--- a/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/logical/resolver/LocalMonitoredProxyCreationListener.java
+++ b/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/logical/resolver/LocalMonitoredProxyCreationListener.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2015 Obeo and others.
+ * Copyright (c) 2015, 2017 Obeo and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
@@ -8,12 +8,14 @@
* Contributors:
* Obeo - initial API and implementation
* Michael Borkowski - public visibility
+ * Philip Langer - bug 516500
*******************************************************************************/
package org.eclipse.emf.compare.ide.ui.internal.logical.resolver;
import com.google.common.eventbus.EventBus;
import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.compare.ide.internal.utils.IProxyCreationListener;
import org.eclipse.emf.compare.ide.ui.internal.util.ThreadSafeProgressMonitor;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.EStructuralFeature;
@@ -34,6 +36,10 @@
/** The local resolver. */
protected final IResourceDependencyLocalResolver localResolver;
+ /** Whether this listener should process proxies. */
+ protected final boolean processProxies = ResolutionUtil
+ .getResolutionScope() != CrossReferenceResolutionScope.SELF;
+
/**
* Constructor.
*
@@ -58,14 +64,15 @@
*/
public void proxyCreated(Resource source, EObject eObject, EStructuralFeature feature, EObject proxy,
int position) {
- final URI from = source.getURI();
- final URI to = ((InternalEObject)proxy).eProxyURI().trimFragment();
- // TODO Does this work with relative URIs? (isPlatformResource())
- if (ResolutionUtil.getResolutionScope() != CrossReferenceResolutionScope.SELF
- && to.isPlatformResource()) {
- SynchronizedResourceSet resourceSet = (SynchronizedResourceSet)source.getResourceSet();
- eventBus.post(new ResourceDependencyFoundEvent(from, to, eObject, feature));
- localResolver.demandResolve(resourceSet, to, diagnostic, tspm);
+ if (processProxies) {
+ final URI to = ((InternalEObject)proxy).eProxyURI().trimFragment();
+ // TODO Does this work with relative URIs? (isPlatformResource())
+ if (to.isPlatformResource()) {
+ final URI from = source.getURI();
+ SynchronizedResourceSet resourceSet = (SynchronizedResourceSet)source.getResourceSet();
+ eventBus.post(new ResourceDependencyFoundEvent(from, to, eObject, feature));
+ localResolver.demandResolve(resourceSet, to, diagnostic, tspm);
+ }
}
}
}
diff --git a/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/logical/resolver/RemoteMonitoredProxyCreationListener.java b/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/logical/resolver/RemoteMonitoredProxyCreationListener.java
index 4cd054f..61a3120 100644
--- a/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/logical/resolver/RemoteMonitoredProxyCreationListener.java
+++ b/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/logical/resolver/RemoteMonitoredProxyCreationListener.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2015 Obeo and others.
+ * Copyright (c) 2015, 2017 Obeo and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
@@ -8,6 +8,7 @@
* Contributors:
* Obeo - initial API and implementation
* Michael Borkowski - public visibility
+ * Philip Langer - bug 516500
*******************************************************************************/
package org.eclipse.emf.compare.ide.ui.internal.logical.resolver;
@@ -30,6 +31,10 @@
/** The remote resolver. */
protected final IResourceDependencyRemoteResolver remoteResolver;
+ /** Whether this listener should process proxies. */
+ protected final boolean processProxies = ResolutionUtil
+ .getResolutionScope() != CrossReferenceResolutionScope.SELF;
+
/**
* Constructor.
*
@@ -51,12 +56,13 @@
*/
public void proxyCreated(Resource source, EObject eObject, EStructuralFeature feature, EObject proxy,
int position) {
- final URI to = ((InternalEObject)proxy).eProxyURI().trimFragment();
- // TODO Does this work with relative URIs? (isPlatformResource())
- if (ResolutionUtil.getResolutionScope() != CrossReferenceResolutionScope.SELF
- && to.isPlatformResource()) {
- SynchronizedResourceSet resourceSet = (SynchronizedResourceSet)source.getResourceSet();
- remoteResolver.demandRemoteResolve(resourceSet, to, diagnostic, tspm);
+ if (processProxies) {
+ final URI to = ((InternalEObject)proxy).eProxyURI().trimFragment();
+ // TODO Does this work with relative URIs? (isPlatformResource())
+ if (to.isPlatformResource()) {
+ SynchronizedResourceSet resourceSet = (SynchronizedResourceSet)source.getResourceSet();
+ remoteResolver.demandRemoteResolve(resourceSet, to, diagnostic, tspm);
+ }
}
}
}