[254462] performance: WebservicesSynchronizer/Manager consuming too much memory
diff --git a/plugins/org.eclipse.jst.j2ee.webservice.ui/META-INF/MANIFEST.MF b/plugins/org.eclipse.jst.j2ee.webservice.ui/META-INF/MANIFEST.MF index 321ad51..51f8155 100644 --- a/plugins/org.eclipse.jst.j2ee.webservice.ui/META-INF/MANIFEST.MF +++ b/plugins/org.eclipse.jst.j2ee.webservice.ui/META-INF/MANIFEST.MF
@@ -32,6 +32,7 @@ org.eclipse.ui.navigator.resources;bundle-version="[3.2.0,4.0.0)", org.eclipse.jst.j2ee.navigator.ui;bundle-version="[1.1.0,1.2.0)", org.eclipse.wst.common.project.facet.core;bundle-version="[1.3.0,2.0.0)", - org.eclipse.core.expressions;bundle-version="[3.2.0,4.0.0)" + org.eclipse.core.expressions;bundle-version="[3.2.0,4.0.0)", + org.eclipse.wst.web;bundle-version="1.1.205" Eclipse-LazyStart: true; exceptions="org.eclipse.jst.j2ee.internal.webservice.startup" Bundle-RequiredExecutionEnvironment: J2SE-1.5
diff --git a/plugins/org.eclipse.jst.j2ee.webservice.ui/webservices_ui/org/eclipse/jst/j2ee/internal/webservice/WebServiceViewerSynchronization.java b/plugins/org.eclipse.jst.j2ee.webservice.ui/webservices_ui/org/eclipse/jst/j2ee/internal/webservice/WebServiceViewerSynchronization.java index 96919c3..03cef47 100644 --- a/plugins/org.eclipse.jst.j2ee.webservice.ui/webservices_ui/org/eclipse/jst/j2ee/internal/webservice/WebServiceViewerSynchronization.java +++ b/plugins/org.eclipse.jst.j2ee.webservice.ui/webservices_ui/org/eclipse/jst/j2ee/internal/webservice/WebServiceViewerSynchronization.java
@@ -25,6 +25,7 @@ import org.eclipse.ui.progress.UIJob; import org.eclipse.wst.common.internal.emfworkbench.integration.DynamicAdapterFactory; import org.eclipse.wst.common.project.facet.core.internal.FacetedProjectPropertyTester; +import org.eclipse.wst.project.facet.ProductManager; public class WebServiceViewerSynchronization implements WebServiceManagerListener{ @@ -226,8 +227,10 @@ } public static boolean areThereWebServices() { - String val = WebServiceUIPlugin.getDefault().getPluginPreferences().getString(WebServiceViewerSynchronization.ARE_THERE_WEBSERVICES); - return Boolean.parseBoolean(val); + if (ProductManager.shouldUseViewerSyncForWebservices()) { + String val = WebServiceUIPlugin.getDefault().getPluginPreferences().getString(WebServiceViewerSynchronization.ARE_THERE_WEBSERVICES); + return Boolean.parseBoolean(val); + } else return false; } public static boolean isThereWebServicesPreferenceSet() { @@ -337,7 +340,7 @@ viewer.remove(contentProvider.getNavigatorGroup()); setNavigatorGroupAdded(false); setAreThereWebServices(false); - if(!contentProvider.projectListener.isDisposed() + if(contentProvider.projectListener != null && !contentProvider.projectListener.isDisposed() && !contentProvider.projectListener.isListening()) contentProvider.projectListener.startListening(); }
diff --git a/plugins/org.eclipse.jst.j2ee.webservice.ui/webservices_ui/org/eclipse/jst/j2ee/internal/webservice/WebServicesNavigatorContentProvider.java b/plugins/org.eclipse.jst.j2ee.webservice.ui/webservices_ui/org/eclipse/jst/j2ee/internal/webservice/WebServicesNavigatorContentProvider.java index 8cdfe98..dbf2745 100644 --- a/plugins/org.eclipse.jst.j2ee.webservice.ui/webservices_ui/org/eclipse/jst/j2ee/internal/webservice/WebServicesNavigatorContentProvider.java +++ b/plugins/org.eclipse.jst.j2ee.webservice.ui/webservices_ui/org/eclipse/jst/j2ee/internal/webservice/WebServicesNavigatorContentProvider.java
@@ -39,6 +39,7 @@ import org.eclipse.jst.j2ee.webservice.wsdd.PortComponent; import org.eclipse.jst.j2ee.webservice.wsdd.WsddPackage; import org.eclipse.wst.common.internal.emfworkbench.integration.DynamicAdapterFactory; +import org.eclipse.wst.project.facet.ProductManager; /** * @author jlanuti @@ -63,14 +64,17 @@ public WebServicesNavigatorContentProvider() { super(createAdapterFactory()); - viewerSynchronization = new WebServiceViewerSynchronization(this); - projectListener = new NewProjectsListener(viewerSynchronization); + if (ProductManager.shouldUseViewerSyncForWebservices()) { + viewerSynchronization = new WebServiceViewerSynchronization(this); + projectListener = new NewProjectsListener(viewerSynchronization); + } } public void dispose() { super.dispose(); - projectListener.dispose(); + if (projectListener != null) + projectListener.dispose(); } /** @@ -86,12 +90,13 @@ * @see org.eclipse.wst.common.navigator.internal.views.navigator.INavigatorContentProvider#getChildren(java.lang.Object) */ public Object[] getChildren(Object parentElement) { - + if (parentElement instanceof IWorkspaceRoot) { // return new Object[]{ getWebServicesNavigatorGroup(parentElement) }; if(WebServiceViewerSynchronization.isThereWebServicesPreferenceSet()){ if(WebServiceViewerSynchronization.areThereWebServices()){ - viewerSynchronization.setNavigatorGroupAdded(true); + if (viewerSynchronization != null) + viewerSynchronization.setNavigatorGroupAdded(true); return new Object[]{getNavigatorGroup()}; } else { return NO_CHILDREN;
diff --git a/plugins/org.eclipse.jst.j2ee.webservice.ui/webservices_ui/org/eclipse/jst/j2ee/internal/webservice/WebServicesNavigatorLabelProvider.java b/plugins/org.eclipse.jst.j2ee.webservice.ui/webservices_ui/org/eclipse/jst/j2ee/internal/webservice/WebServicesNavigatorLabelProvider.java index 5f1d285..a5d9ce6 100644 --- a/plugins/org.eclipse.jst.j2ee.webservice.ui/webservices_ui/org/eclipse/jst/j2ee/internal/webservice/WebServicesNavigatorLabelProvider.java +++ b/plugins/org.eclipse.jst.j2ee.webservice.ui/webservices_ui/org/eclipse/jst/j2ee/internal/webservice/WebServicesNavigatorLabelProvider.java
@@ -124,8 +124,8 @@ if (((ServiceRef) element).eContainer() instanceof Session) beanName14 = ((Session) ((ServiceRef) element).eContainer()).getName() + ": "; //$NON-NLS-1$ } - - return ProjectUtilities.getProject((ServiceRef) element).getName() + ": " + beanName14 //$NON-NLS-1$ + IProject refProj = ProjectUtilities.getProject((ServiceRef) element); + return (refProj != null) ? refProj.getName() : "" + ": " + beanName14 //$NON-NLS-1$ + ((ServiceRef) element).getServiceRefName(); } else return super.getText(element);
diff --git a/plugins/org.eclipse.jst.j2ee.webservice.ui/webservices_ui/org/eclipse/jst/j2ee/internal/webservice/startup/WebserviceListener.java b/plugins/org.eclipse.jst.j2ee.webservice.ui/webservices_ui/org/eclipse/jst/j2ee/internal/webservice/startup/WebserviceListener.java index 04da525..5dc970d 100644 --- a/plugins/org.eclipse.jst.j2ee.webservice.ui/webservices_ui/org/eclipse/jst/j2ee/internal/webservice/startup/WebserviceListener.java +++ b/plugins/org.eclipse.jst.j2ee.webservice.ui/webservices_ui/org/eclipse/jst/j2ee/internal/webservice/startup/WebserviceListener.java
@@ -11,6 +11,7 @@ import org.eclipse.core.runtime.CoreException; import org.eclipse.ui.IStartup; import org.eclipse.wst.common.project.facet.core.internal.FacetedProjectPropertyTester; +import org.eclipse.wst.project.facet.ProductManager; public class WebserviceListener implements IStartup, IResourceChangeListener, IResourceDeltaVisitor { @@ -76,8 +77,12 @@ return listening; } public void earlyStartup() { - INSTANCE = this; - startListening(); + if (ProductManager.shouldUseViewerSyncForWebservices()) { + INSTANCE = this; + startListening(); + } else { + org.eclipse.jst.j2ee.internal.webservice.WebServiceViewerSynchronization.setAreThereWebServices(false); + } } public void resourceChanged(IResourceChangeEvent event) {
diff --git a/plugins/org.eclipse.wst.web/static_web_project/org/eclipse/wst/project/facet/IProductConstants.java b/plugins/org.eclipse.wst.web/static_web_project/org/eclipse/wst/project/facet/IProductConstants.java index 75d5979..22b6558 100644 --- a/plugins/org.eclipse.wst.web/static_web_project/org/eclipse/wst/project/facet/IProductConstants.java +++ b/plugins/org.eclipse.wst.web/static_web_project/org/eclipse/wst/project/facet/IProductConstants.java
@@ -50,5 +50,6 @@ public static final String DEFAULT_RUNTIME_1 = "defaultRuntime1"; //$NON-NLS-1$ public static final String DEFAULT_RUNTIME_2 = "defaultRuntime2"; //$NON-NLS-1$ public static final String DEFAULT_RUNTIME_3 = "defaultRuntime3"; //$NON-NLS-1$ + public static final String VIEWER_SYNC_FOR_WEBSERVICES = "viewerSyncForWebservices"; //$NON-NLS-1$ }
diff --git a/plugins/org.eclipse.wst.web/static_web_project/org/eclipse/wst/project/facet/ProductManager.java b/plugins/org.eclipse.wst.web/static_web_project/org/eclipse/wst/project/facet/ProductManager.java index a5ff789..459aa2b 100644 --- a/plugins/org.eclipse.wst.web/static_web_project/org/eclipse/wst/project/facet/ProductManager.java +++ b/plugins/org.eclipse.wst.web/static_web_project/org/eclipse/wst/project/facet/ProductManager.java
@@ -36,6 +36,7 @@ private static final String ADD_TO_EAR_BY_DEFAULT = "false"; //$NON-NLS-1$ private static final String OUTPUT_FOLDER = "build/classes"; //$NON-NLS-1$ private static final String USE_SINGLE_ROOT_STRUCTURE = "false"; //$NON-NLS-1$ + private static final String VIEWER_SYNC_FOR_WEBSERVICES = "true"; //$NON-NLS-1$ private static final String ID_PERSPECTIVE_HIERARCHY_VIEW = "org.eclipse.ui.navigator.ProjectExplorer"; //$NON-NLS-1$ private static final String FINAL_PERSPECTIVE = "org.eclipse.jst.j2ee.J2EEPerspective"; //$NON-NLS-1$ private static final char RUNTIME_SEPARATOR = ':'; @@ -74,6 +75,8 @@ return ADD_TO_EAR_BY_DEFAULT; else if (key.equals(IProductConstants.USE_SINGLE_ROOT_STRUCTURE)) return USE_SINGLE_ROOT_STRUCTURE; + else if (key.equals(IProductConstants.VIEWER_SYNC_FOR_WEBSERVICES)) + return VIEWER_SYNC_FOR_WEBSERVICES; else if (key.equals(IProductConstants.OUTPUT_FOLDER)) return OUTPUT_FOLDER; else if (key.equals(IProductConstants.ID_PERSPECTIVE_HIERARCHY_VIEW)) @@ -105,6 +108,11 @@ String value = getProperty(IProductConstants.USE_SINGLE_ROOT_STRUCTURE); return Boolean.valueOf(value).booleanValue(); } + + public static boolean shouldUseViewerSyncForWebservices() { + String value = getProperty(IProductConstants.VIEWER_SYNC_FOR_WEBSERVICES); + return Boolean.valueOf(value).booleanValue(); + } public static List/*<IRuntime>*/ getDefaultRuntimes() { List theRuntimes = null;