[153968] Improving performance of profile element correlation methods.
diff --git a/plugins/org.eclipse.uml2.uml/src/org/eclipse/uml2/uml/internal/operations/ProfileOperations.java b/plugins/org.eclipse.uml2.uml/src/org/eclipse/uml2/uml/internal/operations/ProfileOperations.java
index b2714b5..e7b9dc1 100644
--- a/plugins/org.eclipse.uml2.uml/src/org/eclipse/uml2/uml/internal/operations/ProfileOperations.java
+++ b/plugins/org.eclipse.uml2.uml/src/org/eclipse/uml2/uml/internal/operations/ProfileOperations.java
@@ -8,7 +8,7 @@
* Contributors:
* IBM - initial API and implementation
*
- * $Id: ProfileOperations.java,v 1.28 2006/05/29 21:10:14 khussey Exp $
+ * $Id: ProfileOperations.java,v 1.28.2.1 2006/08/16 18:22:25 khussey Exp $
*/
package org.eclipse.uml2.uml.internal.operations;
@@ -49,7 +49,6 @@
import org.eclipse.uml2.uml.UMLPlugin;
import org.eclipse.uml2.uml.VisibilityKind;
-import org.eclipse.uml2.uml.util.UMLSwitch;
import org.eclipse.uml2.uml.util.UMLValidator;
/**
@@ -324,65 +323,51 @@
return null;
}
- protected static ENamedElement getDefinition(final Profile profile,
- NamedElement namedElement, final EPackage profileDefinition) {
+ protected static ENamedElement getDefinition(Profile profile,
+ NamedElement namedElement, EPackage profileDefinition) {
- return (ENamedElement) new UMLSwitch() {
+ if (namedElement instanceof Classifier) {
- public Object caseClassifier(Classifier classifier) {
+ if (profileDefinition != null) {
- if (profileDefinition != null) {
+ for (Iterator eClassifiers = profileDefinition
+ .getEClassifiers().iterator(); eClassifiers.hasNext();) {
- for (Iterator eClassifiers = profileDefinition
- .getEClassifiers().iterator(); eClassifiers.hasNext();) {
+ EClassifier eClassifier = (EClassifier) eClassifiers.next();
+ EAnnotation eAnnotation = eClassifier
+ .getEAnnotation(UMLPackage.eNS_URI);
- EClassifier eClassifier = (EClassifier) eClassifiers
- .next();
- EAnnotation eAnnotation = eClassifier
- .getEAnnotation(UMLPackage.eNS_URI);
+ if (eAnnotation != null
+ && eAnnotation.getReferences().contains(namedElement)) {
- if (eAnnotation != null
- && eAnnotation.getReferences().contains(classifier)) {
-
- return eClassifier;
- }
+ return eClassifier;
}
}
-
- return null;
}
- public Object caseEnumerationLiteral(
- EnumerationLiteral enumerationLiteral) {
- Object enumerationDefinition = doSwitch(enumerationLiteral
- .getEnumeration());
- return enumerationDefinition instanceof EEnum
- ? ((EEnum) enumerationDefinition)
- .getEEnumLiteral(enumerationLiteral.getName())
- : null;
- }
-
- public Object caseProperty(Property property) {
- Object namespaceDefinition = doSwitch(property.getNamespace());
- return namespaceDefinition instanceof EClass
- ? ((EClass) namespaceDefinition)
- .getEStructuralFeature(getValidJavaIdentifier(property
- .getName()))
- : null;
- }
-
- public Object casePackage(org.eclipse.uml2.uml.Package package_) {
- return package_ == profile
- ? profileDefinition
- : null;
- }
-
- public Object doSwitch(EObject eObject) {
- return eObject == null
- ? null
- : super.doSwitch(eObject);
- }
- }.doSwitch(namedElement);
+ return null;
+ } else if (namedElement instanceof Property) {
+ ENamedElement namespaceDefinition = getDefinition(profile,
+ namedElement.getNamespace(), profileDefinition);
+ return namespaceDefinition instanceof EClass
+ ? ((EClass) namespaceDefinition)
+ .getEStructuralFeature(getValidJavaIdentifier(namedElement
+ .getName()))
+ : null;
+ } else if (namedElement instanceof EnumerationLiteral) {
+ ENamedElement namespaceDefinition = getDefinition(profile,
+ namedElement.getNamespace(), profileDefinition);
+ return namespaceDefinition instanceof EEnum
+ ? ((EEnum) namespaceDefinition).getEEnumLiteral(namedElement
+ .getName())
+ : null;
+ } else if (namedElement instanceof org.eclipse.uml2.uml.Package) {
+ return namedElement == profile
+ ? profileDefinition
+ : null;
+ } else {
+ return null;
+ }
}
/**
diff --git a/plugins/org.eclipse.uml2.uml/src/org/eclipse/uml2/uml/util/UMLUtil.java b/plugins/org.eclipse.uml2.uml/src/org/eclipse/uml2/uml/util/UMLUtil.java
index 62cfd9d..93fb37d 100644
--- a/plugins/org.eclipse.uml2.uml/src/org/eclipse/uml2/uml/util/UMLUtil.java
+++ b/plugins/org.eclipse.uml2.uml/src/org/eclipse/uml2/uml/util/UMLUtil.java
@@ -8,7 +8,7 @@
* Contributors:
* IBM - initial API and implementation
*
- * $Id: UMLUtil.java,v 1.35.2.3 2006/07/28 21:36:49 khussey Exp $
+ * $Id: UMLUtil.java,v 1.35.2.4 2006/08/16 18:22:25 khussey Exp $
*/
package org.eclipse.uml2.uml.util;
@@ -5982,70 +5982,55 @@
protected static NamedElement getNamedElement(ENamedElement definition) {
- return (NamedElement) new EcoreSwitch() {
+ if (definition instanceof EClassifier) {
+ EAnnotation eAnnotation = definition
+ .getEAnnotation(UMLPackage.eNS_URI);
- public Object caseEClassifier(EClassifier eClassifier) {
- EAnnotation eAnnotation = eClassifier
- .getEAnnotation(UMLPackage.eNS_URI);
+ if (eAnnotation != null) {
+ EList references = eAnnotation.getReferences();
- if (eAnnotation != null) {
- EList references = eAnnotation.getReferences();
+ if (!references.isEmpty()) {
+ Object reference = references.get(0);
- if (!references.isEmpty()) {
- Object reference = references.get(0);
-
- if (reference instanceof Classifier) {
- return reference;
- }
+ if (reference instanceof Classifier) {
+ return (NamedElement) reference;
}
}
-
- return null;
}
- public Object caseEEnumLiteral(EEnumLiteral eEnumLiteral) {
- Enumeration enumeration = (Enumeration) doSwitch(eEnumLiteral
- .getEEnum());
- return enumeration == null
- ? null
- : enumeration.getOwnedLiteral(eEnumLiteral.getName());
- }
+ return null;
+ } else if (definition instanceof EStructuralFeature) {
+ org.eclipse.uml2.uml.Class class_ = (org.eclipse.uml2.uml.Class) getNamedElement(((EStructuralFeature) definition)
+ .getEContainingClass());
- public Object caseEStructuralFeature(
- EStructuralFeature eStructuralFeature) {
- org.eclipse.uml2.uml.Class class_ = (org.eclipse.uml2.uml.Class) doSwitch(eStructuralFeature
- .getEContainingClass());
+ if (class_ != null) {
+ String name = definition.getName();
- if (class_ != null) {
- String name = eStructuralFeature.getName();
+ for (Iterator ownedAttributes = class_.getOwnedAttributes()
+ .iterator(); ownedAttributes.hasNext();) {
- for (Iterator ownedAttributes = class_.getOwnedAttributes()
- .iterator(); ownedAttributes.hasNext();) {
+ Property ownedAttribute = (Property) ownedAttributes.next();
- Property ownedAttribute = (Property) ownedAttributes
- .next();
+ if (safeEquals(getValidJavaIdentifier(ownedAttribute
+ .getName()), name)) {
- if (safeEquals(getValidJavaIdentifier(ownedAttribute
- .getName()), name)) {
-
- return ownedAttribute;
- }
+ return ownedAttribute;
}
}
-
- return null;
}
- public Object caseEPackage(EPackage ePackage) {
- return getProfile(ePackage);
- }
-
- public Object doSwitch(EObject eObject) {
- return eObject == null
- ? null
- : super.doSwitch(eObject);
- }
- }.doSwitch(definition);
+ return null;
+ } else if (definition instanceof EEnumLiteral) {
+ Enumeration enumeration = (Enumeration) getNamedElement(((EEnumLiteral) definition)
+ .getEEnum());
+ return enumeration == null
+ ? null
+ : enumeration.getOwnedLiteral(definition.getName());
+ } else if (definition instanceof EPackage) {
+ return getProfile((EPackage) definition);
+ } else {
+ return null;
+ }
}
protected static Stereotype getStereotype(EClass definition) {
@@ -6095,21 +6080,25 @@
public static void setBaseElement(EObject stereotypeApplication,
Element element) {
- if (getStereotype(stereotypeApplication) != null) {
+ if (stereotypeApplication != null) {
+ EClass eClass = stereotypeApplication.eClass();
- for (Iterator eAllStructuralFeatures = stereotypeApplication
- .eClass().getEAllStructuralFeatures().iterator(); eAllStructuralFeatures
- .hasNext();) {
+ if (getStereotype(eClass) != null) {
- EStructuralFeature eStructuralFeature = (EStructuralFeature) eAllStructuralFeatures
- .next();
+ for (Iterator eAllStructuralFeatures = eClass
+ .getEAllStructuralFeatures().iterator(); eAllStructuralFeatures
+ .hasNext();) {
- if (eStructuralFeature.getName().startsWith(
- Extension.METACLASS_ROLE_PREFIX)
- && (element == null || eStructuralFeature.getEType()
- .isInstance(element))) {
+ EStructuralFeature eStructuralFeature = (EStructuralFeature) eAllStructuralFeatures
+ .next();
- stereotypeApplication.eSet(eStructuralFeature, element);
+ if (eStructuralFeature.getName().startsWith(
+ Extension.METACLASS_ROLE_PREFIX)
+ && (element == null || eStructuralFeature.getEType()
+ .isInstance(element))) {
+
+ stereotypeApplication.eSet(eStructuralFeature, element);
+ }
}
}
}