[wip]
diff --git a/examples/org.eclipse.ocl.examples.codegen/src/org/eclipse/ocl/examples/codegen/analyzer/AS2CGVisitor.java b/examples/org.eclipse.ocl.examples.codegen/src/org/eclipse/ocl/examples/codegen/analyzer/AS2CGVisitor.java
index eac05bd..27c0254 100644
--- a/examples/org.eclipse.ocl.examples.codegen/src/org/eclipse/ocl/examples/codegen/analyzer/AS2CGVisitor.java
+++ b/examples/org.eclipse.ocl.examples.codegen/src/org/eclipse/ocl/examples/codegen/analyzer/AS2CGVisitor.java
@@ -124,6 +124,7 @@
import org.eclipse.ocl.examples.pivot.Operation;
import org.eclipse.ocl.examples.pivot.OperationCallExp;
import org.eclipse.ocl.examples.pivot.OppositePropertyCallExp;
+import org.eclipse.ocl.examples.pivot.Parameter;
import org.eclipse.ocl.examples.pivot.Property;
import org.eclipse.ocl.examples.pivot.PropertyCallExp;
import org.eclipse.ocl.examples.pivot.RealLiteralExp;
@@ -316,7 +317,10 @@
cgParameter = CGModelFactory.eINSTANCE.createCGParameter();
context.setNames(cgParameter, aParameter);
setAst(cgParameter, aParameter);
- cgParameter.setTypeId(context.getTypeId(TypeId.OCL_VOID)); // FIXME Java-specific
+// cgParameter.setTypeId(context.getTypeId(TypeId.OCL_VOID)); // FIXME Java-specific
+ Parameter representedParameter = aParameter.getRepresentedParameter();
+ TypeId typeId = (representedParameter != null ? representedParameter : aParameter).getTypeId();
+ cgParameter.setTypeId(context.getTypeId(typeId));
addParameter(aParameter, cgParameter);
cgParameter.setRequired(aParameter.isRequired());
if (aParameter.isRequired()) {
diff --git a/examples/org.eclipse.ocl.examples.codegen/src/org/eclipse/ocl/examples/codegen/generator/TypeDescriptor.java b/examples/org.eclipse.ocl.examples.codegen/src/org/eclipse/ocl/examples/codegen/generator/TypeDescriptor.java
index 816b8de..e227e2a 100644
--- a/examples/org.eclipse.ocl.examples.codegen/src/org/eclipse/ocl/examples/codegen/generator/TypeDescriptor.java
+++ b/examples/org.eclipse.ocl.examples.codegen/src/org/eclipse/ocl/examples/codegen/generator/TypeDescriptor.java
@@ -25,6 +25,7 @@
import org.eclipse.ocl.examples.codegen.java.JavaStream.SubStream;
import org.eclipse.ocl.examples.codegen.java.types.CollectionDescriptor;
import org.eclipse.ocl.examples.codegen.java.types.UnboxedDescriptor;
+import org.eclipse.ocl.examples.domain.ids.ElementId;
/**
* TypeDescriptor captures the characteristics of a Java type and supports serialization to a javaStream.
@@ -84,6 +85,8 @@
*/
@Nullable EClassifier getEClassifier();
+ @NonNull ElementId getElementId();
+
/**
* Return the basic Java class for this descriptor. e.g. List<?> for an unboxed collection.
*/
diff --git a/examples/org.eclipse.ocl.examples.codegen/src/org/eclipse/ocl/examples/codegen/java/types/BooleanObjectDescriptor.java b/examples/org.eclipse.ocl.examples.codegen/src/org/eclipse/ocl/examples/codegen/java/types/BooleanObjectDescriptor.java
index 41fb817..234c917 100644
--- a/examples/org.eclipse.ocl.examples.codegen/src/org/eclipse/ocl/examples/codegen/java/types/BooleanObjectDescriptor.java
+++ b/examples/org.eclipse.ocl.examples.codegen/src/org/eclipse/ocl/examples/codegen/java/types/BooleanObjectDescriptor.java
@@ -51,9 +51,10 @@
}
@Override
- public void appendEqualsValue(@NonNull JavaStream js, @NonNull CGValuedElement thisValue,
- @NonNull CGValuedElement thatValue, boolean notEquals) {
- super.appendEqualsValue(js, thisValue, thatValue, notEquals);
+ public void appendEqualsValue(@NonNull JavaStream js, @NonNull CGValuedElement thisValue, @NonNull CGValuedElement thatValue, boolean notEquals) {
+ js.appendValueName(thisValue);
+ js.append(notEquals ? " != " : " == ");
+ js.appendValueName(thatValue);
}
@Override
diff --git a/examples/org.eclipse.ocl.examples.codegen/src/org/eclipse/ocl/examples/codegen/java/types/IntegerObjectDescriptor.java b/examples/org.eclipse.ocl.examples.codegen/src/org/eclipse/ocl/examples/codegen/java/types/IntegerObjectDescriptor.java
index f3b0cce..63bf62b 100644
--- a/examples/org.eclipse.ocl.examples.codegen/src/org/eclipse/ocl/examples/codegen/java/types/IntegerObjectDescriptor.java
+++ b/examples/org.eclipse.ocl.examples.codegen/src/org/eclipse/ocl/examples/codegen/java/types/IntegerObjectDescriptor.java
@@ -15,12 +15,16 @@
package org.eclipse.ocl.examples.codegen.java.types;
import org.eclipse.jdt.annotation.NonNull;
+import org.eclipse.jdt.annotation.Nullable;
import org.eclipse.ocl.examples.codegen.cgmodel.CGBoxExp;
import org.eclipse.ocl.examples.codegen.cgmodel.CGValuedElement;
+import org.eclipse.ocl.examples.codegen.generator.TypeDescriptor;
import org.eclipse.ocl.examples.codegen.java.JavaLocalContext;
import org.eclipse.ocl.examples.codegen.java.JavaStream;
+import org.eclipse.ocl.examples.codegen.java.JavaStream.SubStream;
import org.eclipse.ocl.examples.domain.ids.ElementId;
import org.eclipse.ocl.examples.domain.values.util.ValuesUtil;
+import org.eclipse.ocl.examples.pivot.manager.MetaModelManager;
/**
* An IntegerObjectDescriptor describes the unboxed representations of an OCL Integer.
@@ -46,4 +50,12 @@
js.append(";\n");
return true;
}
+
+ @Override
+ public void appendEqualsValue(@NonNull JavaStream js, @NonNull CGValuedElement thisValue, @NonNull CGValuedElement thatValue, boolean notEquals) {
+ TypeDescriptor thatTypeDescriptor = js.getCodeGenerator().getTypeDescriptor(thatValue);
+ js.appendValueName(thisValue);
+ js.append(notEquals ? " != " : " == ");
+ js.appendValueName(thatValue);
+ }
}
\ No newline at end of file
diff --git a/examples/org.eclipse.ocl.examples.codegen/src/org/eclipse/ocl/examples/codegen/java/types/IntegerValueDescriptor.java b/examples/org.eclipse.ocl.examples.codegen/src/org/eclipse/ocl/examples/codegen/java/types/IntegerValueDescriptor.java
index acb4d55..4c8c3e9 100644
--- a/examples/org.eclipse.ocl.examples.codegen/src/org/eclipse/ocl/examples/codegen/java/types/IntegerValueDescriptor.java
+++ b/examples/org.eclipse.ocl.examples.codegen/src/org/eclipse/ocl/examples/codegen/java/types/IntegerValueDescriptor.java
@@ -15,10 +15,13 @@
package org.eclipse.ocl.examples.codegen.java.types;
import org.eclipse.jdt.annotation.NonNull;
+import org.eclipse.jdt.annotation.Nullable;
import org.eclipse.ocl.examples.codegen.cgmodel.CGUnboxExp;
import org.eclipse.ocl.examples.codegen.cgmodel.CGValuedElement;
+import org.eclipse.ocl.examples.codegen.generator.TypeDescriptor;
import org.eclipse.ocl.examples.codegen.java.JavaLocalContext;
import org.eclipse.ocl.examples.codegen.java.JavaStream;
+import org.eclipse.ocl.examples.codegen.java.JavaStream.SubStream;
import org.eclipse.ocl.examples.domain.ids.ElementId;
import org.eclipse.ocl.examples.domain.values.IntegerValue;
@@ -32,6 +35,36 @@
}
@Override
+ public void appendCast(@NonNull JavaStream js,
+ @Nullable Class<?> actualJavaClass, @Nullable SubStream subStream) {
+ // TODO Auto-generated method stub
+ super.appendCast(js, actualJavaClass, subStream);
+ }
+
+ @Override
+ public void appendCastTerm(@NonNull JavaStream js,
+ @NonNull CGValuedElement cgElement) {
+ // TODO Auto-generated method stub
+ super.appendCastTerm(js, cgElement);
+ }
+
+ @Override
+ public void appendNotEqualsTerm(@NonNull JavaStream js,
+ @NonNull CGValuedElement thisValue,
+ @NonNull TypeDescriptor thatTypeDescriptor, @NonNull String thatName) {
+ // TODO Auto-generated method stub
+ super.appendNotEqualsTerm(js, thisValue, thatTypeDescriptor, thatName);
+ }
+
+ @Override
+ public void appendEqualsValue(@NonNull JavaStream js,
+ @NonNull CGValuedElement thisValue,
+ @NonNull CGValuedElement thatValue, boolean notEquals) {
+ // TODO Auto-generated method stub
+ super.appendEqualsValue(js, thisValue, thatValue, notEquals);
+ }
+
+ @Override
public @NonNull Boolean appendUnboxStatements(@NonNull JavaStream js, @NonNull JavaLocalContext localContext,
@NonNull CGUnboxExp cgUnboxExp, @NonNull CGValuedElement boxedValue) {
js.appendDeclaration(cgUnboxExp);
diff --git a/examples/org.eclipse.ocl.examples.codegen/src/org/eclipse/ocl/examples/codegen/java/types/RealObjectDescriptor.java b/examples/org.eclipse.ocl.examples.codegen/src/org/eclipse/ocl/examples/codegen/java/types/RealObjectDescriptor.java
index a99694d..7fcda59 100644
--- a/examples/org.eclipse.ocl.examples.codegen/src/org/eclipse/ocl/examples/codegen/java/types/RealObjectDescriptor.java
+++ b/examples/org.eclipse.ocl.examples.codegen/src/org/eclipse/ocl/examples/codegen/java/types/RealObjectDescriptor.java
@@ -46,4 +46,11 @@
js.append(";\n");
return true;
}
+
+ @Override
+ public void appendEqualsValue(@NonNull JavaStream js, @NonNull CGValuedElement thisValue, @NonNull CGValuedElement thatValue, boolean notEquals) {
+ js.appendValueName(thisValue);
+ js.append(notEquals ? " != " : " == ");
+ js.appendValueName(thatValue);
+ }
}
\ No newline at end of file
diff --git a/examples/org.eclipse.ocl.examples.codegen/src/org/eclipse/ocl/examples/codegen/java/types/UnlimitedNaturalObjectDescriptor.java b/examples/org.eclipse.ocl.examples.codegen/src/org/eclipse/ocl/examples/codegen/java/types/UnlimitedNaturalObjectDescriptor.java
index 9826fe7..5a5a67e 100644
--- a/examples/org.eclipse.ocl.examples.codegen/src/org/eclipse/ocl/examples/codegen/java/types/UnlimitedNaturalObjectDescriptor.java
+++ b/examples/org.eclipse.ocl.examples.codegen/src/org/eclipse/ocl/examples/codegen/java/types/UnlimitedNaturalObjectDescriptor.java
@@ -46,4 +46,11 @@
js.append(";\n");
return true;
}
+
+ @Override
+ public void appendEqualsValue(@NonNull JavaStream js, @NonNull CGValuedElement thisValue, @NonNull CGValuedElement thatValue, boolean notEquals) {
+ js.appendValueName(thisValue);
+ js.append(notEquals ? " != " : " == ");
+ js.appendValueName(thatValue);
+ }
}
\ No newline at end of file
diff --git a/examples/org.eclipse.ocl.examples.codegen/src/org/eclipse/ocl/examples/codegen/oclinecore/OCLinEcoreCG2JavaVisitor.java b/examples/org.eclipse.ocl.examples.codegen/src/org/eclipse/ocl/examples/codegen/oclinecore/OCLinEcoreCG2JavaVisitor.java
index e28eabc..05e956a 100644
--- a/examples/org.eclipse.ocl.examples.codegen/src/org/eclipse/ocl/examples/codegen/oclinecore/OCLinEcoreCG2JavaVisitor.java
+++ b/examples/org.eclipse.ocl.examples.codegen/src/org/eclipse/ocl/examples/codegen/oclinecore/OCLinEcoreCG2JavaVisitor.java
@@ -76,7 +76,7 @@
Map<String, String> bodies = new HashMap<String, String>();
for (CGClass cgClass : cgPackage.getClasses()) {
for (CGConstraint cgConstraint : cgClass.getInvariants()) {
- if ("Pseudostate".equals(cgClass.getName())) {
+ if ("MultiplicityElement".equals(cgClass.getName())) {
System.out.println("got it");
}
CGValuedElement cgBody = cgConstraint.getBody();
diff --git a/tests/org.eclipse.ocl.examples.xtext.tests/plugin.xml b/tests/org.eclipse.ocl.examples.xtext.tests/plugin.xml
index 28f93bd..6498d47 100644
--- a/tests/org.eclipse.ocl.examples.xtext.tests/plugin.xml
+++ b/tests/org.eclipse.ocl.examples.xtext.tests/plugin.xml
@@ -74,6 +74,12 @@
</extension>
<extension point="org.eclipse.emf.ecore.generated_package">
+ <!-- @generated Bug412736a NOT -->
+ <!--package uri="http://bug412736a" class="bug412736a.Bug412736aPackage"/-->
+ <package uri="dummy-protocol://dummy-nsuri/bug412736a" class="codegen.company.CodegencompanyPackage"/>
+ </extension>
+
+ <extension point="org.eclipse.emf.ecore.generated_package">
<!-- @generated Bug414855 NOT -->
<!--package uri="http://bug414855" class="bug414855.Bug414855Package"/-->
<package uri="dummy-protocol://dummy-nsuri/bug414855" class="codegen.company.CodegencompanyPackage"/>
diff --git a/tests/org.eclipse.ocl.examples.xtext.tests/src/org/eclipse/ocl/examples/test/xtext/UsageTests.java b/tests/org.eclipse.ocl.examples.xtext.tests/src/org/eclipse/ocl/examples/test/xtext/UsageTests.java
index 7a353db..d6ea5a7 100644
--- a/tests/org.eclipse.ocl.examples.xtext.tests/src/org/eclipse/ocl/examples/test/xtext/UsageTests.java
+++ b/tests/org.eclipse.ocl.examples.xtext.tests/src/org/eclipse/ocl/examples/test/xtext/UsageTests.java
@@ -613,6 +613,7 @@
+ " attribute eShortObject : ecore::EShortObject { derived readonly volatile } { derivation: negEShortObject(1); }\n"
+ " attribute eShort : ecore::EShort { derived readonly volatile } { derivation: negEShort(1); }\n"
+ " attribute eString : ecore::EString { derived readonly volatile } { derivation: upCase('abc'); }\n"
+ + " operation eqEInt(a : ecore::EInt, b : ecore::EInt) : ecore::EBoolean { body: a = b; }\n"
+ " operation negEBigDecimal(b : ecore::EBigDecimal) : ecore::EBigDecimal { body: -b; }\n"
+ " operation negEBigInteger(b : ecore::EBigInteger) : ecore::EBigInteger { body: -b; }\n"
+ " operation negEChar(b : ecore::EChar) : ecore::EChar { body: -b; }\n"
@@ -657,6 +658,24 @@
}
}
+ public void testEcoreTypes412736a() throws Exception {
+ String testFileStem = "Bug412736a";
+ String testProjectName = "bug412736a";
+ String testProjectPath = EMFPlugin.IS_ECLIPSE_RUNNING ? testProjectName : ORG_ECLIPSE_OCL_EXAMPLES_XTEXT_TESTRESULTS;
+ String oclinecoreFile = "import ecore : 'http://www.eclipse.org/emf/2002/Ecore#/';\n"
+ + "package bug412736a : bug412736a = 'http://bug412736a'\n"
+ + "{\n"
+ + " class EcoreDataTypes\n"
+ + " {\n"
+ + " operation eqEInt(a : ecore::EInt, b : ecore::EInt) : ecore::EBoolean { body: a = b; }\n"
+ + " }\n" + "}\n";
+ String genmodelFile = createGenModelContent(testProjectPath, "Bug412736a", null);
+ doDelete(testProjectName);
+ URI fileURI = createModels(testProjectPath, testFileStem, oclinecoreFile, genmodelFile);
+ doGenModel(testProjectPath, fileURI);
+ doCompile(testProjectName);
+ }
+
public void testEnumTypes412685() throws Exception {
String testFileStem = "Bug412685";
String testProjectName = "bug412685";