diff options
author | Camille Letavernier | 2013-08-07 09:13:16 +0000 |
---|---|---|
committer | Camille Letavernier | 2013-08-07 09:13:16 +0000 |
commit | 94d83dd0050c20d5b6ecd4fa62dc4af52ce9a305 (patch) | |
tree | 103987946a3af0e46d5e00a3f1fd37188df28a06 /plugins | |
parent | e25da987e64b32322b4f4465193d2872f950a1dc (diff) | |
download | org.eclipse.papyrus-94d83dd0050c20d5b6ecd4fa62dc4af52ce9a305.tar.gz org.eclipse.papyrus-94d83dd0050c20d5b6ecd4fa62dc4af52ce9a305.tar.xz org.eclipse.papyrus-94d83dd0050c20d5b6ecd4fa62dc4af52ce9a305.zip |
363835: [Model Explorer] General Performance problems
https://bugs.eclipse.org/bugs/show_bug.cgi?id=363835
Use a lightweight content provider for the ModelExplorer. Reduce the
number of encapsulations.
Diffstat (limited to 'plugins')
4 files changed, 51 insertions, 18 deletions
diff --git a/plugins/infra/emf/org.eclipse.papyrus.infra.emf/src/org/eclipse/papyrus/infra/emf/providers/strategy/SemanticEMFContentProvider.java b/plugins/infra/emf/org.eclipse.papyrus.infra.emf/src/org/eclipse/papyrus/infra/emf/providers/strategy/SemanticEMFContentProvider.java index 3dad19455c9..948eba885eb 100644 --- a/plugins/infra/emf/org.eclipse.papyrus.infra.emf/src/org/eclipse/papyrus/infra/emf/providers/strategy/SemanticEMFContentProvider.java +++ b/plugins/infra/emf/org.eclipse.papyrus.infra.emf/src/org/eclipse/papyrus/infra/emf/providers/strategy/SemanticEMFContentProvider.java @@ -46,6 +46,10 @@ public class SemanticEMFContentProvider extends CustomizableModelContentProvider protected AdapterFactory factory = new ComposedAdapterFactory(ComposedAdapterFactory.Descriptor.Registry.INSTANCE);
+ protected SemanticEMFContentProvider() {
+ super(Activator.getDefault().getCustomizationManager());
+ }
+
public SemanticEMFContentProvider(EObject editedEObject, EStructuralFeature feature, EObject[] roots, CustomizationManager customizationManager) {
super(customizationManager);
this.roots = roots;
diff --git a/plugins/uml/modelexplorer/org.eclipse.papyrus.uml.modelexplorer/plugin.xml b/plugins/uml/modelexplorer/org.eclipse.papyrus.uml.modelexplorer/plugin.xml index d476cc0b853..360813989a4 100644 --- a/plugins/uml/modelexplorer/org.eclipse.papyrus.uml.modelexplorer/plugin.xml +++ b/plugins/uml/modelexplorer/org.eclipse.papyrus.uml.modelexplorer/plugin.xml @@ -12,7 +12,7 @@ <extension point="org.eclipse.ui.navigator.navigatorContent">
<navigatorContent
activeByDefault="true"
- contentProvider="org.eclipse.papyrus.uml.tools.providers.UMLContentProvider"
+ contentProvider="org.eclipse.papyrus.uml.tools.providers.SemanticUMLContentProvider"
icon="platform:/plugin/org.eclipse.uml2.uml.edit/icons/full/obj16/Model.gif"
id="org.eclipse.papyrus.views.modelexplorer.UMLnavigatorContent"
labelProvider="org.eclipse.jface.viewers.LabelProvider"
diff --git a/plugins/uml/tools/org.eclipse.papyrus.uml.tools/src/org/eclipse/papyrus/uml/tools/providers/SemanticUMLContentProvider.java b/plugins/uml/tools/org.eclipse.papyrus.uml.tools/src/org/eclipse/papyrus/uml/tools/providers/SemanticUMLContentProvider.java index 4667cb97b21..d498196c794 100644 --- a/plugins/uml/tools/org.eclipse.papyrus.uml.tools/src/org/eclipse/papyrus/uml/tools/providers/SemanticUMLContentProvider.java +++ b/plugins/uml/tools/org.eclipse.papyrus.uml.tools/src/org/eclipse/papyrus/uml/tools/providers/SemanticUMLContentProvider.java @@ -20,8 +20,11 @@ import org.eclipse.emf.ecore.EObject; import org.eclipse.emf.ecore.EStructuralFeature;
import org.eclipse.emf.ecore.resource.Resource;
import org.eclipse.emf.ecore.resource.ResourceSet;
+import org.eclipse.jface.viewers.Viewer;
import org.eclipse.papyrus.infra.core.resource.ModelSet;
import org.eclipse.papyrus.infra.core.resource.NotFoundException;
+import org.eclipse.papyrus.infra.core.services.ServicesRegistry;
+import org.eclipse.papyrus.infra.core.utils.ServiceUtils;
import org.eclipse.papyrus.infra.emf.providers.strategy.SemanticEMFContentProvider;
import org.eclipse.papyrus.infra.widgets.Activator;
import org.eclipse.papyrus.uml.tools.model.UmlUtils;
@@ -36,6 +39,11 @@ import org.eclipse.uml2.uml.Stereotype; */
public class SemanticUMLContentProvider extends SemanticEMFContentProvider {
+
+ public SemanticUMLContentProvider() {
+ //Empty (@see #inputChanged(Viewer, Object, Object))
+ }
+
public SemanticUMLContentProvider(EObject editedEObject, EStructuralFeature feature, EObject[] roots) {
super(editedEObject, feature, roots);
}
@@ -72,26 +80,26 @@ public class SemanticUMLContentProvider extends SemanticEMFContentProvider { //This is related to the ModelSet evolution
try {
EObject rootElement = UmlUtils.getUmlModel(modelSet).lookupRoot();
- if (rootElement == null){
+ if(rootElement == null) {
return new EObject[0];
}
-
+
Resource rootResource = rootElement.eResource();
- if (rootResource == null){
- return new EObject[]{rootElement};
+ if(rootResource == null) {
+ return new EObject[]{ rootElement };
}
-
+
List<EObject> rootObjects = new LinkedList<EObject>();
- for (EObject rootObject : rootResource.getContents()){
- if (rootObject instanceof Element){
+ for(EObject rootObject : rootResource.getContents()) {
+ if(rootObject instanceof Element) {
rootObjects.add(rootObject);
}
}
-
- if (rootObjects.isEmpty()){
- return new EObject[]{rootElement};
+
+ if(rootObjects.isEmpty()) {
+ return new EObject[]{ rootElement };
}
-
+
return rootObjects.toArray(new EObject[0]);
} catch (NotFoundException ex) {
Activator.log.error(ex);
@@ -112,13 +120,13 @@ public class SemanticUMLContentProvider extends SemanticEMFContentProvider { if(metaclass instanceof Stereotype) {
Stereotype stereotype = (Stereotype)metaclass;
boolean res = semanticElement.getAppliedStereotype(stereotype.getQualifiedName()) != null;
- if (!res) {
+ if(!res) {
EClass definition = stereotype.getDefinition();
- for (EObject e : semanticElement.getStereotypeApplications()){
+ for(EObject e : semanticElement.getStereotypeApplications()) {
EClass c = e.eClass();
- if (definition != null && definition.isSuperTypeOf(c)){
- res = true ;
- break ;
+ if(definition != null && definition.isSuperTypeOf(c)) {
+ res = true;
+ break;
}
}
}
@@ -177,4 +185,25 @@ public class SemanticUMLContentProvider extends SemanticEMFContentProvider { //If no stereotype application is found, return the UML Element
return semanticElement;
}
+
+ @Override
+ public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
+ ResourceSet root = null;
+
+ if(newInput instanceof ResourceSet) {
+ root = (ResourceSet)newInput;
+ }
+
+ if(newInput instanceof ServicesRegistry) {
+ try {
+ root = ServiceUtils.getInstance().getModelSet((ServicesRegistry)newInput);
+ } catch (Exception ex) {
+ Activator.log.error(ex);
+ }
+ }
+
+ this.roots = getRoots(root);
+
+ super.inputChanged(viewer, oldInput, newInput);
+ }
}
diff --git a/plugins/uml/tools/org.eclipse.papyrus.uml.tools/src/org/eclipse/papyrus/uml/tools/providers/UMLContentProvider.java b/plugins/uml/tools/org.eclipse.papyrus.uml.tools/src/org/eclipse/papyrus/uml/tools/providers/UMLContentProvider.java index c50adafd18f..b17f4788620 100644 --- a/plugins/uml/tools/org.eclipse.papyrus.uml.tools/src/org/eclipse/papyrus/uml/tools/providers/UMLContentProvider.java +++ b/plugins/uml/tools/org.eclipse.papyrus.uml.tools/src/org/eclipse/papyrus/uml/tools/providers/UMLContentProvider.java @@ -53,7 +53,7 @@ public class UMLContentProvider extends EncapsulatedContentProvider { protected ResourceSet root;
public UMLContentProvider() {
- //Empty (@see #setInput())
+ //Empty (@see #inputChanged(Viewer, Object, Object))
}
@Override
|