diff options
author | Ed Willink | 2014-08-06 13:26:43 +0000 |
---|---|---|
committer | Ed Willink | 2014-08-06 13:26:43 +0000 |
commit | d9fff51be2d98c9d055662fc760e5a36d94ea89d (patch) | |
tree | 0ad13653318df09c9e951eec081523c66c04b228 | |
parent | 996e9683d4df90bf7fcedf913bc2a060e72a5316 (diff) | |
download | org.eclipse.ocl-d9fff51be2d98c9d055662fc760e5a36d94ea89d.tar.gz org.eclipse.ocl-d9fff51be2d98c9d055662fc760e5a36d94ea89d.tar.xz org.eclipse.ocl-d9fff51be2d98c9d055662fc760e5a36d94ea89d.zip |
[441004] Correct CGClass.templateParameters isUnique
6 files changed, 33 insertions, 21 deletions
diff --git a/examples/org.eclipse.ocl.examples.autogen/src/org/eclipse/ocl/examples/autogen/lookup/LookupCG2JavaVisitor.java b/examples/org.eclipse.ocl.examples.autogen/src/org/eclipse/ocl/examples/autogen/lookup/LookupCG2JavaVisitor.java index d2dc955c5f..ba439cc21c 100644 --- a/examples/org.eclipse.ocl.examples.autogen/src/org/eclipse/ocl/examples/autogen/lookup/LookupCG2JavaVisitor.java +++ b/examples/org.eclipse.ocl.examples.autogen/src/org/eclipse/ocl/examples/autogen/lookup/LookupCG2JavaVisitor.java @@ -80,9 +80,8 @@ public class LookupCG2JavaVisitor extends AutoCG2JavaVisitor<LookupCodeGenerator js.append("this."); js.appendReferenceTo(context.getChildVariable()); js.append(" = " + LookupClassContext.ELEMENT_NAME + ";\n"); - js.append("return ("); - js.appendClassReference(Environment.class); - js.append(")" + LookupClassContext.ELEMENT_NAME); + js.append("return "); + js.append(LookupClassContext.ELEMENT_NAME); js.append(".accept(this);\n"); js.popIndentation(); js.append("}\n"); @@ -124,9 +123,7 @@ public class LookupCG2JavaVisitor extends AutoCG2JavaVisitor<LookupCodeGenerator js.append("this."); js.appendReferenceTo(context.getChildVariable()); js.append(" = " + LookupClassContext.ELEMENT_NAME + ";\n"); - js.append("return ("); - js.appendClassReference(Environment.class); - js.append(")(("); + js.append("return (("); js.appendClassReference(Visitable.class); js.append(")" + LookupClassContext.PARENT_NAME + ").accept(this);\n"); js.popIndentation(); diff --git a/examples/org.eclipse.ocl.examples.autogen/src/org/eclipse/ocl/examples/autogen/lookup/LookupCodeGenerator.java b/examples/org.eclipse.ocl.examples.autogen/src/org/eclipse/ocl/examples/autogen/lookup/LookupCodeGenerator.java index 39ec937f37..b83c08157f 100644 --- a/examples/org.eclipse.ocl.examples.autogen/src/org/eclipse/ocl/examples/autogen/lookup/LookupCodeGenerator.java +++ b/examples/org.eclipse.ocl.examples.autogen/src/org/eclipse/ocl/examples/autogen/lookup/LookupCodeGenerator.java @@ -162,6 +162,7 @@ public class LookupCodeGenerator extends AutoCodeGenerator protected final @NonNull Property asIdResolverProperty; protected final @NonNull Operation asVisitorEnvOperation; protected final @NonNull Operation asVisitorParentEnvOperation; + protected final @NonNull Type asEnvironmentType; // // Important CG elements // @@ -189,7 +190,7 @@ public class LookupCodeGenerator extends AutoCodeGenerator this.asElementEnvOperation = DomainUtil.nonNullState((Operation)asElementTypeServer.getMemberOperation(envOperationId)); OperationId parentEnvOperationId = asElementType.getTypeId().getOperationId(0, LookupClassContext.PARENT_ENV_NAME, emptyParametersId); this.asElementParentEnvOperation = DomainUtil.nonNullState((Operation)asElementTypeServer.getMemberOperation(parentEnvOperationId)); - Type asEnvironmentType = DomainUtil.nonNullState(asElementParentEnvOperation.getType()); + this.asEnvironmentType = DomainUtil.nonNullState(asElementParentEnvOperation.getType()); TypeServer asEnvironmentTypeServer = metaModelManager.getTypeServer(asEnvironmentType); OperationId nestedEnvOperationId = asElementType.getTypeId().getOperationId(0, LookupClassContext.NESTED_ENV_NAME, emptyParametersId); this.asEnvironmentNestedEnvOperation = DomainUtil.nonNullState((Operation)asEnvironmentTypeServer.getMemberOperation(nestedEnvOperationId)); @@ -282,8 +283,9 @@ public class LookupCodeGenerator extends AutoCodeGenerator // String superClassName = "AbstractExtending" + visitorClass; // The default Abstract Visitor generated for the language String superClassName = "AbstractExtendingVisitor"; // The default Abstract Visitor generated for the language CGClass superClass = getExternalClass(visitorPackage, superClassName, false); - superClass.getTemplateParameters().add(getExternalClass(Object.class)); - superClass.getTemplateParameters().add(getExternalClass(Environment.class)); + CGClass cgResultClass = getExternalClass(getVisitorResultClass()); + superClass.getTemplateParameters().add(cgResultClass); + superClass.getTemplateParameters().add(cgResultClass); cgClass.getSuperTypes().add(superClass); } } @@ -443,6 +445,11 @@ public class LookupCodeGenerator extends AutoCodeGenerator public @NonNull Class<?> getVisitableClass() { return Visitable.class; } + + @Override + public @NonNull Class<?> getVisitorResultClass() { + return Environment.class; + } @Override protected @NonNull String getVisitorPackageName(@NonNull String visitorsPackageName) { @@ -546,7 +553,7 @@ public class LookupCodeGenerator extends AutoCodeGenerator } /** - * Copy all the visitXXX operation bodies from the _emv bodies replacing references to redefined parameters. + * Copy all the visitXXX operation bodies from the _env bodies replacing references to redefined parameters. */ protected void rewriteVisitOperationBodies(@NonNull Map<Element, Element> reDefinitions, @NonNull Map<Operation, Operation> envOperation2asOperation) { for (@SuppressWarnings("null")@NonNull Operation envOperation : envOperation2asOperation.keySet()) { @@ -556,6 +563,7 @@ public class LookupCodeGenerator extends AutoCodeGenerator OCLExpression asExpression = RereferencingCopier.copy(DomainUtil.nonNullState(envExpressionInOCL.getBodyExpression()), reDefinitions); ExpressionInOCL asExpressionInOCL = PivotUtil.createExpressionInOCL(null, asExpression, asElement); PivotUtil.initOperation(asOperation, asExpressionInOCL); + asOperation.setType(asEnvironmentType); asOperation.setIsRequired(false); } } diff --git a/examples/org.eclipse.ocl.examples.codegen/emf-gen/org/eclipse/ocl/examples/codegen/cgmodel/impl/CGClassImpl.java b/examples/org.eclipse.ocl.examples.codegen/emf-gen/org/eclipse/ocl/examples/codegen/cgmodel/impl/CGClassImpl.java index d12c70fdcf..e325770019 100644 --- a/examples/org.eclipse.ocl.examples.codegen/emf-gen/org/eclipse/ocl/examples/codegen/cgmodel/impl/CGClassImpl.java +++ b/examples/org.eclipse.ocl.examples.codegen/emf-gen/org/eclipse/ocl/examples/codegen/cgmodel/impl/CGClassImpl.java @@ -266,12 +266,19 @@ public class CGClassImpl extends CGNamedElementImpl implements CGClass { /** * <!-- begin-user-doc --> * <!-- end-user-doc --> - * @generated + * @generated NOT FIXME workaround BUG 89325 */ + @SuppressWarnings("serial") @Override public List<CGClass> getTemplateParameters() { if (templateParameters == null) { - templateParameters = new EObjectEList<CGClass>(CGClass.class, this, CGModelPackage.CG_CLASS__TEMPLATE_PARAMETERS); + templateParameters = new EObjectEList<CGClass>(CGClass.class, this, CGModelPackage.CG_CLASS__TEMPLATE_PARAMETERS) + { + @Override + protected boolean isUnique() { + return false; + } + }; } return templateParameters; } diff --git a/examples/org.eclipse.ocl.examples.codegen/emf-gen/org/eclipse/ocl/examples/codegen/cgmodel/impl/CGModelPackageImpl.java b/examples/org.eclipse.ocl.examples.codegen/emf-gen/org/eclipse/ocl/examples/codegen/cgmodel/impl/CGModelPackageImpl.java index 0674ec62fa..4265a8da9d 100644 --- a/examples/org.eclipse.ocl.examples.codegen/emf-gen/org/eclipse/ocl/examples/codegen/cgmodel/impl/CGModelPackageImpl.java +++ b/examples/org.eclipse.ocl.examples.codegen/emf-gen/org/eclipse/ocl/examples/codegen/cgmodel/impl/CGModelPackageImpl.java @@ -3269,7 +3269,7 @@ public class CGModelPackageImpl extends EPackageImpl implements CGModelPackage { initEReference(getCGClass_Invariants(), this.getCGConstraint(), null, "invariants", null, 0, -1, CGClass.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED); initEReference(getCGClass_SuperTypes(), this.getCGClass(), null, "superTypes", null, 0, -1, CGClass.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); initEAttribute(getCGClass_Interface(), ecorePackage.getEBoolean(), "interface", "false", 1, 1, CGClass.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); - initEReference(getCGClass_TemplateParameters(), this.getCGClass(), null, "templateParameters", null, 0, -1, CGClass.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); + initEReference(getCGClass_TemplateParameters(), this.getCGClass(), null, "templateParameters", null, 0, -1, CGClass.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, !IS_UNIQUE, !IS_DERIVED, IS_ORDERED); initEClass(cgCollectionExpEClass, CGCollectionExp.class, "CGCollectionExp", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); initEReference(getCGCollectionExp_Parts(), this.getCGCollectionPart(), this.getCGCollectionPart_CollectionExp(), "parts", null, 0, -1, CGCollectionExp.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); diff --git a/examples/org.eclipse.ocl.examples.codegen/model/cgmodel.ecore b/examples/org.eclipse.ocl.examples.codegen/model/cgmodel.ecore index 5ec48adef0..3b8f33122b 100644 --- a/examples/org.eclipse.ocl.examples.codegen/model/cgmodel.ecore +++ b/examples/org.eclipse.ocl.examples.codegen/model/cgmodel.ecore @@ -110,8 +110,8 @@ <details key="documentation" value="the boolean value"/> </eAnnotations> </eStructuralFeatures> - <eStructuralFeatures xsi:type="ecore:EReference" name="templateParameters" upperBound="-1" - eType="#//CGClass" resolveProxies="false"/> + <eStructuralFeatures xsi:type="ecore:EReference" name="templateParameters" unique="false" + upperBound="-1" eType="#//CGClass" resolveProxies="false"/> </eClassifiers> <eClassifiers xsi:type="ecore:EClass" name="CGCollectionExp" eSuperTypes="#//CGValuedElement"> <eStructuralFeatures xsi:type="ecore:EReference" name="parts" upperBound="-1" diff --git a/examples/org.eclipse.ocl.examples.pivot/emf-gen/org/eclipse/ocl/examples/pivot/lookup/AutoPivotLookupVisitor.java b/examples/org.eclipse.ocl.examples.pivot/emf-gen/org/eclipse/ocl/examples/pivot/lookup/AutoPivotLookupVisitor.java index b85dd62584..609f833761 100644 --- a/examples/org.eclipse.ocl.examples.pivot/emf-gen/org/eclipse/ocl/examples/pivot/lookup/AutoPivotLookupVisitor.java +++ b/examples/org.eclipse.ocl.examples.pivot/emf-gen/org/eclipse/ocl/examples/pivot/lookup/AutoPivotLookupVisitor.java @@ -61,7 +61,7 @@ import org.eclipse.ocl.examples.pivot.util.AbstractExtendingVisitor; import org.eclipse.ocl.examples.pivot.util.Visitable; public class AutoPivotLookupVisitor - extends AbstractExtendingVisitor<Object, Environment> + extends AbstractExtendingVisitor<Environment, Environment> { public static final @NonNull /*@NonInvalid*/ RootPackageId PACKid_$metamodel$ = IdManager.getRootPackageId("$metamodel$"); public static final @NonNull /*@NonInvalid*/ NsURIPackageId PACKid_http_c_s_s_www_example_org_s_examples_s_env_ecore = IdManager.getNsURIPackageId("http://www.example.org/examples/env.ecore", null, null); @@ -121,7 +121,7 @@ public class AutoPivotLookupVisitor */ public @Nullable Environment envForChild(@NonNull Element element, @Nullable Element child) { this.child = element; - return (Environment)element.accept(this); + return element.accept(this); } /** @@ -131,14 +131,14 @@ public class AutoPivotLookupVisitor EObject parent = element.eContainer(); if (parent instanceof Visitable) { this.child = element; - return (Environment)((Visitable)parent).accept(this); + return ((Visitable)parent).accept(this); } else { return null; } } - public @Nullable Object visiting(@NonNull Visitable visitable) { + public @Nullable Environment visiting(@NonNull Visitable visitable) { throw new UnsupportedOperationException("AutoPivotLookupVisitor is not supported by \"" + getClass().getName() + "\""); } @@ -688,12 +688,12 @@ public class AutoPivotLookupVisitor } /** - * visitMetaclass(element : Metaclass) : OclVoid[?] + * visitMetaclass(element : Metaclass) : env::Environment[?] * * null */ @Override - public @Nullable /*@NonInvalid*/ Object visitMetaclass(final @NonNull /*@NonInvalid*/ Metaclass<?> element_8) { + public @Nullable /*@NonInvalid*/ Environment visitMetaclass(final @NonNull /*@NonInvalid*/ Metaclass<?> element_8) { return null; } |