[575568] Ignore package for primitive types
diff --git a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/ecore/as2es/AS2EcoreTypeRefVisitor.java b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/ecore/as2es/AS2EcoreTypeRefVisitor.java
index 15fb622..c15e661 100644
--- a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/ecore/as2es/AS2EcoreTypeRefVisitor.java
+++ b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/ecore/as2es/AS2EcoreTypeRefVisitor.java
@@ -73,6 +73,19 @@
this.isRequired = isRequired;
}
+ private <T extends EObject> @Nullable T getESObject(@NonNull Class<T> requiredClass, org.eclipse.ocl.pivot.@NonNull Class pivotType) {
+ Iterable<org.eclipse.ocl.pivot.Class> partialClasses = metamodelManager.getPartialClasses(pivotType);
+ for (org.eclipse.ocl.pivot.Class type : partialClasses) {
+ if (type instanceof PivotObjectImpl) {
+ EObject esObject = ((PivotObjectImpl)type).getESObject();
+ if ((esObject != null) && requiredClass.isAssignableFrom(esObject.getClass())) {
+ return (T)esObject;
+ }
+ }
+ }
+ return null;
+ }
+
public EGenericType resolveEGenericType(org.eclipse.ocl.pivot.@NonNull Class type) {
EObject eType = safeVisit(type);
if (eType instanceof EGenericType) {
@@ -137,14 +150,9 @@
return eClassifier;
}
if (metamodelManager.isTypeServeable(pivotType)) {
- Iterable<org.eclipse.ocl.pivot.Class> partialClasses = metamodelManager.getPartialClasses(pivotType);
- for (org.eclipse.ocl.pivot.Class type : partialClasses) {
- if (type instanceof PivotObjectImpl) {
- EObject eTarget = ((PivotObjectImpl)type).getESObject();
- if (eTarget != null) {
- return eTarget;
- }
- }
+ eClassifier = getESObject(EClassifier.class, pivotType);
+ if (eClassifier != null) {
+ return eClassifier;
}
}
else {
@@ -226,6 +234,14 @@
if (eClassifier != null) {
return eClassifier;
}
+ // EDataType eClassifier2 = getESObject(EDataType.class, pivotType); -- too simple can give String rather than EString
+ // if (eClassifier2 != null) {
+ // if (!isRequired && (eClassifier2 == EcorePackage.Literals.EBOOLEAN)) {
+ // eClassifier2 = EcorePackage.Literals.EBOOLEAN_OBJECT;
+ // }
+ // context.putCreated(pivotType, eClassifier2);
+ // return eClassifier2;
+ // }
String uri = context.getPrimitiveTypesUriPrefix();
if (uri != null) {
URI proxyURI = URI.createURI(uri + pivotType.getName());
@@ -244,25 +260,21 @@
}
}
}
- org.eclipse.ocl.pivot.Package standardLibraryPackage = standardLibrary.getPackage();
for (org.eclipse.ocl.pivot.Class aType : partialClasses) {
- org.eclipse.ocl.pivot.Package pivotPackage = aType.getOwningPackage();
- if (pivotPackage == standardLibraryPackage) {
- if (aType == standardLibrary.getStringType()) {
- return EcorePackage.Literals.ESTRING;
- }
- else if (aType == standardLibrary.getBooleanType()) {
- return isRequired ? EcorePackage.Literals.EBOOLEAN : EcorePackage.Literals.EBOOLEAN_OBJECT;
- }
- else if (aType == standardLibrary.getIntegerType()) {
- return EcorePackage.Literals.EBIG_INTEGER;
- }
- else if (aType == standardLibrary.getRealType()) {
- return EcorePackage.Literals.EBIG_DECIMAL;
- }
- else if (aType == standardLibrary.getUnlimitedNaturalType()) {
- return EcorePackage.Literals.EBIG_INTEGER;
- }
+ if (aType == standardLibrary.getStringType()) {
+ return EcorePackage.Literals.ESTRING;
+ }
+ else if (aType == standardLibrary.getBooleanType()) {
+ return isRequired ? EcorePackage.Literals.EBOOLEAN : EcorePackage.Literals.EBOOLEAN_OBJECT;
+ }
+ else if (aType == standardLibrary.getIntegerType()) {
+ return EcorePackage.Literals.EBIG_INTEGER;
+ }
+ else if (aType == standardLibrary.getRealType()) {
+ return EcorePackage.Literals.EBIG_DECIMAL;
+ }
+ else if (aType == standardLibrary.getUnlimitedNaturalType()) {
+ return EcorePackage.Literals.EBIG_INTEGER;
}
}
throw new IllegalArgumentException("Unsupported primitive type '" + pivotType + "' in AS2Ecore TypeRef pass");