Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEd Willink2016-08-31 17:45:39 +0000
committerEd Willink2016-09-20 08:36:59 +0000
commitf3fbb9429c41e10f168b6ccf65311be4afaa4a67 (patch)
tree4045ccdf2e091a8f93f78a6a72b97ef657c9faa0
parent6c3fa370b1393a744e6bdf25d7b3435a7e9c2419 (diff)
downloadorg.eclipse.ocl-ewillink/500519.tar.gz
org.eclipse.ocl-ewillink/500519.tar.xz
org.eclipse.ocl-ewillink/500519.zip
-rw-r--r--examples/org.eclipse.ocl.examples.codegen/src/org/eclipse/ocl/examples/codegen/analyzer/AS2CGVisitor.java19
-rw-r--r--examples/org.eclipse.ocl.examples.codegen/src/org/eclipse/ocl/examples/codegen/completeocl/CompleteOCLAS2CGVisitor.java96
-rw-r--r--examples/org.eclipse.ocl.examples.codegen/src/org/eclipse/ocl/examples/codegen/completeocl/CompleteOCLCG2JavaPreVisitor.java26
-rw-r--r--examples/org.eclipse.ocl.examples.codegen/src/org/eclipse/ocl/examples/codegen/completeocl/CompleteOCLCG2JavaVisitor.java57
-rw-r--r--examples/org.eclipse.ocl.examples.codegen/src/org/eclipse/ocl/examples/codegen/completeocl/CompleteOCLCodeGenerator.java19
-rw-r--r--examples/org.eclipse.ocl.examples.codegen/src/org/eclipse/ocl/examples/codegen/completeocl/CompleteOCLGlobalContext.java38
-rw-r--r--examples/org.eclipse.ocl.examples.codegen/src/org/eclipse/ocl/examples/codegen/completeocl/CompleteOCLLocalContext.java28
-rw-r--r--tests/org.eclipse.ocl.examples.xtext.tests/src/org/eclipse/ocl/examples/test/xtext/OCLCompilerTests.java29
-rw-r--r--tests/org.eclipse.ocl.examples.xtext.tests/src/org/eclipse/ocl/examples/test/xtext/models/Fibonacci.ocl2
9 files changed, 263 insertions, 51 deletions
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 adb2c3f4c1..83a505235e 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
@@ -381,14 +381,10 @@ public class AS2CGVisitor extends AbstractExtendingVisitor<@Nullable CGNamedElem
Variable contextVariable = expressionInOCL.getOwnedContext();
if (contextVariable != null) {
CGParameter cgParameter = getParameter(contextVariable, null);
- // cgParameter.setTypeId(context.getTypeId(JavaConstants.getJavaTypeId(Object.class)));
- // cgParameter.setRequired(contextVariable.isIsRequired());
cgOperation.getParameters().add(cgParameter);
}
for (@NonNull Variable parameterVariable : ClassUtil.nullFree(expressionInOCL.getOwnedParameters())) {
CGParameter cgParameter = getParameter(parameterVariable, null);
- // cgParameter.setTypeId(context.getTypeId(JavaConstants.getJavaTypeId(Object.class)));
- // cgParameter.setRequired(parameterVariable.isIsRequired());
cgOperation.getParameters().add(cgParameter);
}
}
@@ -1058,6 +1054,21 @@ public class AS2CGVisitor extends AbstractExtendingVisitor<@Nullable CGNamedElem
|| (libraryProperty instanceof EObjectProperty);
}
+ protected @NonNull CGValuedElement libraryOperationCall(@NonNull OperationCallExp element,
+ CGValuedElement cgSource, @NonNull Operation finalOperation, @NonNull ConstrainedOperation libraryOperation) {
+ @NonNull CGLibraryOperationCallExp cgOperationCallExp = CGModelFactory.eINSTANCE.createCGLibraryOperationCallExp();
+ cgOperationCallExp.setSource(cgSource);
+ // cgOperationCallExp.setThisIsSelf(false);
+ for (OCLExpression pArgument : element.getOwnedArguments()) {
+ CGValuedElement cgArgument = doVisit(CGValuedElement.class, pArgument);
+ cgOperationCallExp.getArguments().add(cgArgument);
+ }
+ setAst(cgOperationCallExp, element);
+ cgOperationCallExp.setReferredOperation(finalOperation);
+ cgOperationCallExp.setLibraryOperation(libraryOperation);
+ return cgOperationCallExp;
+ }
+
protected @NonNull CGValuedElement nativeOperationCall(@NonNull OperationCallExp element,
@NonNull CGClass currentClass, CGValuedElement cgSource, @NonNull Operation finalOperation) {
if (!nativeOperationsStack.contains(finalOperation)) { // Prevent recursive call generating an additional implementation
diff --git a/examples/org.eclipse.ocl.examples.codegen/src/org/eclipse/ocl/examples/codegen/completeocl/CompleteOCLAS2CGVisitor.java b/examples/org.eclipse.ocl.examples.codegen/src/org/eclipse/ocl/examples/codegen/completeocl/CompleteOCLAS2CGVisitor.java
index 0a3a40fe93..a72959d614 100644
--- a/examples/org.eclipse.ocl.examples.codegen/src/org/eclipse/ocl/examples/codegen/completeocl/CompleteOCLAS2CGVisitor.java
+++ b/examples/org.eclipse.ocl.examples.codegen/src/org/eclipse/ocl/examples/codegen/completeocl/CompleteOCLAS2CGVisitor.java
@@ -10,24 +10,71 @@
*******************************************************************************/
package org.eclipse.ocl.examples.codegen.completeocl;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
import org.eclipse.jdt.annotation.NonNull;
import org.eclipse.jdt.annotation.Nullable;
import org.eclipse.ocl.examples.codegen.analyzer.AS2CGVisitor;
import org.eclipse.ocl.examples.codegen.analyzer.CodeGenAnalyzer;
+import org.eclipse.ocl.examples.codegen.cgmodel.CGClass;
import org.eclipse.ocl.examples.codegen.cgmodel.CGModelFactory;
import org.eclipse.ocl.examples.codegen.cgmodel.CGNamedElement;
+import org.eclipse.ocl.examples.codegen.cgmodel.CGOperation;
import org.eclipse.ocl.examples.codegen.cgmodel.CGPackage;
+import org.eclipse.ocl.examples.codegen.cgmodel.CGParameter;
+import org.eclipse.ocl.examples.codegen.cgmodel.CGValuedElement;
+import org.eclipse.ocl.pivot.ExpressionInOCL;
+import org.eclipse.ocl.pivot.LanguageExpression;
import org.eclipse.ocl.pivot.Model;
+import org.eclipse.ocl.pivot.Operation;
+import org.eclipse.ocl.pivot.utilities.ClassUtil;
+import org.eclipse.ocl.pivot.utilities.ParserException;
/**
* @since 1.3
*/
public final class CompleteOCLAS2CGVisitor extends AS2CGVisitor
{
+ private @NonNull Map<@NonNull Operation, @NonNull CGOperation> deferredOperations = new HashMap<>();
+
public CompleteOCLAS2CGVisitor(@NonNull CodeGenAnalyzer analyzer) {
super(analyzer);
}
+ public @NonNull CGPackage createCGDocument(@NonNull Model document, @NonNull String rootPackageNames, @NonNull String rootClassName) {
+ CGClass cgClass = (CGClass) ClassUtil.nonNullState(document.accept(this));
+ cgClass.setName(rootClassName);
+ CGPackage cgDocument = CGModelFactory.eINSTANCE.createCGPackage();
+ // setAst(cgDocument, asModel);
+ cgDocument.setName(rootPackageNames);
+ cgDocument.getClasses().add(cgClass);
+ createOperationBodies();
+ return cgDocument;
+ }
+
+ protected void createOperationBodies() {
+ for (@NonNull Operation asOperation : deferredOperations.keySet()) {
+ CGOperation cgOperation = deferredOperations.get(asOperation);
+ assert cgOperation != null;
+ LanguageExpression specification = asOperation.getBodyExpression();
+ assert specification != null;
+ try {
+ ExpressionInOCL query = metamodelManager.parseSpecification(specification);
+ createParameters(cgOperation, query);
+ cgOperation.setBody(doVisit(CGValuedElement.class, query.getOwnedBody()));
+ } catch (ParserException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
+ }
+ }
+
+ public @NonNull CompleteOCLCodeGenerator getCodeGenerator() {
+ return (@NonNull CompleteOCLCodeGenerator) context.getCodeGenerator();
+ }
+
/* @Override
public @NonNull CGValuedElement visitExpressionInOCL(@NonNull ExpressionInOCL element) {
Variable contextVariable = element.getOwnedContext();
@@ -47,12 +94,51 @@ public final class CompleteOCLAS2CGVisitor extends AS2CGVisitor
@Override
public @Nullable CGNamedElement visitModel(@NonNull Model asModel) {
- CGPackage cgRootPackage = CGModelFactory.eINSTANCE.createCGPackage();
- setAst(cgRootPackage, asModel);
+ CGClass cgRootClass = CGModelFactory.eINSTANCE.createCGClass();
+ setAst(cgRootClass, asModel);
for (org.eclipse.ocl.pivot.Package asPackage : asModel.getOwnedPackages()) {
- CGPackage cgNestedPackage = doVisit(CGPackage.class, asPackage);
- cgRootPackage.getPackages().add(cgNestedPackage);
+ CGClass cgClass = doVisit(CGClass.class, asPackage);
+ cgRootClass.getClasses().add(cgClass);
+ }
+ return cgRootClass;
+ }
+
+ @Override
+ public @Nullable CGOperation visitOperation(@NonNull Operation element) {
+ CGOperation cgOperation = CGModelFactory.eINSTANCE.createCGLibraryOperation();
+ setAst(cgOperation, element);
+ cgOperation.setRequired(element.isIsRequired());
+ CompleteOCLLocalContext localContext = getCodeGenerator().getGlobalContext().getLocalContext(cgOperation);
+ if (localContext != null) {
+ List<CGParameter> cgParameters = cgOperation.getParameters();
+ CGParameter executorParameter = localContext.createExecutorParameter();
+ if (executorParameter != null) {
+ cgParameters.add(executorParameter);
+ }
+ CGParameter typeIdParameter = localContext.createTypeIdParameter();
+ if (typeIdParameter != null) {
+ cgParameters.add(typeIdParameter);
+ }
+ }
+ LanguageExpression specification = element.getBodyExpression();
+ if (specification != null) {
+ deferredOperations.put(element, cgOperation);
+ }
+ return cgOperation;
+ }
+
+ @Override
+ public @Nullable CGClass visitPackage(org.eclipse.ocl.pivot.@NonNull Package asPackage) {
+ CGClass cgClass = CGModelFactory.eINSTANCE.createCGClass();
+ setAst(cgClass, asPackage);
+ for (org.eclipse.ocl.pivot.Package asNestedPackage : asPackage.getOwnedPackages()) {
+ CGClass cgNestedClass = doVisit(CGClass.class, asNestedPackage);
+ cgClass.getClasses().add(cgNestedClass);
+ }
+ for (org.eclipse.ocl.pivot.Class asNestedClass : asPackage.getOwnedClasses()) {
+ CGClass cgNestedClass = doVisit(CGClass.class, asNestedClass);
+ cgClass.getClasses().add(cgNestedClass);
}
- return cgRootPackage;
+ return cgClass;
}
}
diff --git a/examples/org.eclipse.ocl.examples.codegen/src/org/eclipse/ocl/examples/codegen/completeocl/CompleteOCLCG2JavaPreVisitor.java b/examples/org.eclipse.ocl.examples.codegen/src/org/eclipse/ocl/examples/codegen/completeocl/CompleteOCLCG2JavaPreVisitor.java
new file mode 100644
index 0000000000..50024e8a3b
--- /dev/null
+++ b/examples/org.eclipse.ocl.examples.codegen/src/org/eclipse/ocl/examples/codegen/completeocl/CompleteOCLCG2JavaPreVisitor.java
@@ -0,0 +1,26 @@
+/*******************************************************************************
+ * Copyright (c) 2013, 2016 Willink Transformations and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * E.D.Willink - Initial API and implementation
+ *******************************************************************************/
+package org.eclipse.ocl.examples.codegen.completeocl;
+
+import org.eclipse.jdt.annotation.NonNull;
+import org.eclipse.ocl.examples.codegen.java.CG2JavaPreVisitor;
+
+public class CompleteOCLCG2JavaPreVisitor extends CG2JavaPreVisitor
+{
+ public CompleteOCLCG2JavaPreVisitor(@NonNull CompleteOCLGlobalContext javaContext) {
+ super(javaContext);
+ }
+
+ // @Override
+ // protected @Nullable CGValuedElement installIdResolverVariable(@NonNull CGValuedElement cgValuedElement) {
+ // return localContext.getIdResolverVariable(cgValuedElement);
+ // }
+}
diff --git a/examples/org.eclipse.ocl.examples.codegen/src/org/eclipse/ocl/examples/codegen/completeocl/CompleteOCLCG2JavaVisitor.java b/examples/org.eclipse.ocl.examples.codegen/src/org/eclipse/ocl/examples/codegen/completeocl/CompleteOCLCG2JavaVisitor.java
index afc2628383..a2205cc660 100644
--- a/examples/org.eclipse.ocl.examples.codegen/src/org/eclipse/ocl/examples/codegen/completeocl/CompleteOCLCG2JavaVisitor.java
+++ b/examples/org.eclipse.ocl.examples.codegen/src/org/eclipse/ocl/examples/codegen/completeocl/CompleteOCLCG2JavaVisitor.java
@@ -15,6 +15,7 @@ import java.util.Set;
import org.eclipse.jdt.annotation.NonNull;
import org.eclipse.jdt.annotation.Nullable;
+import org.eclipse.ocl.examples.codegen.cgmodel.CGClass;
import org.eclipse.ocl.examples.codegen.cgmodel.CGPackage;
import org.eclipse.ocl.examples.codegen.cgmodel.CGValuedElement;
import org.eclipse.ocl.examples.codegen.java.CG2JavaVisitor;
@@ -35,39 +36,31 @@ public class CompleteOCLCG2JavaVisitor extends CG2JavaVisitor<@NonNull CompleteO
}
@Override
+ protected boolean doClassStatics(@NonNull CGClass cgClass, boolean needsBlankLine) {
+ if (cgClass.getContainingPackage() != null) {
+ @Nullable
+ List<CGValuedElement> sortedGlobals2 = sortedGlobals;
+ if (sortedGlobals2 != null) {
+ if (needsBlankLine) {
+ js.append("\n");
+ }
+ boolean gotOne = false;
+ for (CGValuedElement cgElement : sortedGlobals2) {
+ assert cgElement.isGlobal();
+ cgElement.accept(this);
+ gotOne = true;
+ }
+ if (gotOne) {
+ js.append("\n");
+ needsBlankLine = false;
+ }
+ }
+ }
+ return super.doClassStatics(cgClass, needsBlankLine);
+ }
+
+ @Override
public @NonNull Set<String> getAllImports() {
return globalContext.getImports();
}
-
- /* @Override
- public @NonNull Boolean visitCGClass(@NonNull CGClass cgClass) {
- js.appendClassHeader(cgClass.getContainingPackage());
- Class<?> baseClass = genModelHelper.getAbstractOperationClass(expInOcl.getOwnedParameters());
- String title = cgClass.getName() + " provides the Java implementation for\n";
- js.appendCommentWithOCL(title, expInOcl);
- String className = cgClass.getName();
- js.append("@SuppressWarnings(\"nls\")\n");
- js.append("public class " + className + " extends ");
- js.appendClassReference(baseClass);
- js.append("\n");
- js.append("{\n");
- js.pushIndentation(null);
- if (sortedGlobals != null) {
- generateGlobals(sortedGlobals);
- }
- js.append("\n");
- if (expInOcl.getOwnedContext() != null) {
- for (CGOperation cgOperation : cgClass.getOperations()) {
- cgOperation.accept(this);
- }
- }
- else {
- js.append("/*\n");
- js.append("«IF expInOcl.messageExpression != null»«(expInOcl.messageExpression as StringLiteralExp).stringSymbol»«ENDIF»\n");
- js.append("* /\n");
- }
- js.popIndentation();
- js.append("}\n");
- return true;
- } */
}
diff --git a/examples/org.eclipse.ocl.examples.codegen/src/org/eclipse/ocl/examples/codegen/completeocl/CompleteOCLCodeGenerator.java b/examples/org.eclipse.ocl.examples.codegen/src/org/eclipse/ocl/examples/codegen/completeocl/CompleteOCLCodeGenerator.java
index a6bcc3e196..b5518e83da 100644
--- a/examples/org.eclipse.ocl.examples.codegen/src/org/eclipse/ocl/examples/codegen/completeocl/CompleteOCLCodeGenerator.java
+++ b/examples/org.eclipse.ocl.examples.codegen/src/org/eclipse/ocl/examples/codegen/completeocl/CompleteOCLCodeGenerator.java
@@ -40,16 +40,19 @@ public class CompleteOCLCodeGenerator extends JavaCodeGenerator
protected final @NonNull CodeGenAnalyzer cgAnalyzer;
protected final @NonNull Model document;
protected final @NonNull String rootPackageNames;
+ protected final @NonNull String rootClassName;
private/* @LazyNonNull*/ CGPackage cgPackage;
private/* @LazyNonNull*/ String javaSourceCode = null;
- protected final @NonNull JavaGlobalContext<@NonNull CompleteOCLCodeGenerator> globalContext = new JavaGlobalContext<>(this);
+ protected final @NonNull CompleteOCLGlobalContext globalContext = new CompleteOCLGlobalContext(this);
- public CompleteOCLCodeGenerator(@NonNull EnvironmentFactoryInternal environmentFactory, @NonNull Model asDocument, @NonNull String rootPackageNames) {
+ public CompleteOCLCodeGenerator(@NonNull EnvironmentFactoryInternal environmentFactory, @NonNull Model asDocument,
+ @NonNull String rootPackageNames, @NonNull String rootClassName) {
super(environmentFactory);
// getOptions().setUseNullAnnotations(useNullAnnotations);
this.cgAnalyzer = new CodeGenAnalyzer(this);
this.document = asDocument;
this.rootPackageNames = rootPackageNames;
+ this.rootClassName = rootClassName;
}
private void appendSegmentName(@NonNull StringBuilder s, CGPackage sPackage) {
@@ -64,15 +67,19 @@ public class CompleteOCLCodeGenerator extends JavaCodeGenerator
return new CompleteOCLAS2CGVisitor(analyzer/*, gContext*/);
}
+ @Override
+ public @NonNull CompleteOCLCG2JavaPreVisitor createCG2JavaPreVisitor() {
+ return new CompleteOCLCG2JavaPreVisitor(getGlobalContext());
+ }
+
protected @NonNull CompleteOCLCG2JavaVisitor createCG2JavaVisitor(@NonNull CGPackage cgPackage, @Nullable List<CGValuedElement> sortedGlobals) {
return new CompleteOCLCG2JavaVisitor(this, cgPackage, sortedGlobals);
}
protected @NonNull String createClassFileContent() {
String javaSourceCode2;
- CompleteOCLAS2CGVisitor pivot2CGVisitor = createAS2CGVisitor(cgAnalyzer, getGlobalContext());
- CGPackage cgDocument = (CGPackage) ClassUtil.nonNullState(document.accept(pivot2CGVisitor));
- cgDocument.setName(rootPackageNames);
+ CompleteOCLAS2CGVisitor as2CGVisitor = createAS2CGVisitor(cgAnalyzer, getGlobalContext());
+ CGPackage cgDocument = as2CGVisitor.createCGDocument(document, rootPackageNames, rootClassName);
cgPackage = cgDocument;
optimize(cgDocument);
List<CGValuedElement> sortedGlobals = prepareGlobals();
@@ -98,7 +105,7 @@ public class CompleteOCLCodeGenerator extends JavaCodeGenerator
}
@Override
- public @NonNull JavaGlobalContext<@NonNull CompleteOCLCodeGenerator> getGlobalContext() {
+ public @NonNull CompleteOCLGlobalContext getGlobalContext() {
return globalContext;
}
diff --git a/examples/org.eclipse.ocl.examples.codegen/src/org/eclipse/ocl/examples/codegen/completeocl/CompleteOCLGlobalContext.java b/examples/org.eclipse.ocl.examples.codegen/src/org/eclipse/ocl/examples/codegen/completeocl/CompleteOCLGlobalContext.java
new file mode 100644
index 0000000000..ac05281a13
--- /dev/null
+++ b/examples/org.eclipse.ocl.examples.codegen/src/org/eclipse/ocl/examples/codegen/completeocl/CompleteOCLGlobalContext.java
@@ -0,0 +1,38 @@
+package org.eclipse.ocl.examples.codegen.completeocl;
+
+import org.eclipse.jdt.annotation.NonNull;
+import org.eclipse.jdt.annotation.Nullable;
+import org.eclipse.ocl.examples.codegen.cgmodel.CGElement;
+import org.eclipse.ocl.examples.codegen.java.JavaGlobalContext;
+
+/**
+ * A JavaGlobalContext maintains the Java-specific global context for generation of code.
+ */
+public class CompleteOCLGlobalContext extends JavaGlobalContext<@NonNull CompleteOCLCodeGenerator>
+{
+ public CompleteOCLGlobalContext(@NonNull CompleteOCLCodeGenerator codeGenerator) {
+ super(codeGenerator);
+ }
+
+ @Override
+ public @NonNull CompleteOCLLocalContext createNestedContext(@NonNull CGElement cgScope) {
+ return new CompleteOCLLocalContext(this, cgScope);
+ }
+
+ @Override
+ public @Nullable CompleteOCLLocalContext getLocalContext(@NonNull CGElement cgElement) {
+ return (CompleteOCLLocalContext)super.getLocalContext(cgElement);
+ }
+
+ /* public @NonNull CGParameter createSelfParameter(@NonNull Variable contextVariable) {
+ CGTextParameter cgTextParameter = CGModelFactory.eINSTANCE.createCGTextParameter();
+ cgTextParameter.setName(contextVariable.getName());
+ cgTextParameter.setValueName(getSelfName());
+ cgTextParameter.setAst(contextVariable);
+ cgTextParameter.setTextValue("this");
+ cgTextParameter.setNonInvalid();
+ cgTextParameter.setNonNull();
+ cgTextParameter.setTypeId(analyzer.getTypeId(contextVariable.getTypeId()));
+ return cgTextParameter;
+ } */
+} \ No newline at end of file
diff --git a/examples/org.eclipse.ocl.examples.codegen/src/org/eclipse/ocl/examples/codegen/completeocl/CompleteOCLLocalContext.java b/examples/org.eclipse.ocl.examples.codegen/src/org/eclipse/ocl/examples/codegen/completeocl/CompleteOCLLocalContext.java
new file mode 100644
index 0000000000..72d6d48cbb
--- /dev/null
+++ b/examples/org.eclipse.ocl.examples.codegen/src/org/eclipse/ocl/examples/codegen/completeocl/CompleteOCLLocalContext.java
@@ -0,0 +1,28 @@
+package org.eclipse.ocl.examples.codegen.completeocl;
+
+import org.eclipse.jdt.annotation.NonNull;
+import org.eclipse.ocl.examples.codegen.cgmodel.CGElement;
+import org.eclipse.ocl.examples.codegen.java.JavaLocalContext;
+
+/**
+ * A JavaLocalContext maintains the Java-specific context for generation of code from a CGOperation.
+ */
+public class CompleteOCLLocalContext extends JavaLocalContext<@NonNull CompleteOCLCodeGenerator>
+{
+ public CompleteOCLLocalContext(@NonNull CompleteOCLGlobalContext globalContext, @NonNull CGElement cgScope) {
+ super(globalContext, cgScope);
+ }
+
+ /* @Override
+ public @NonNull CGValuedElement createIdResolverVariable() {
+ CGValuedElement evaluator = createEvaluatorVariable();
+ CGValuedElement idResolverVariable = super.createIdResolverVariable();
+ idResolverVariable.getOwns().add(evaluator);
+ return idResolverVariable;
+ } */
+
+ @Override
+ public @NonNull CompleteOCLGlobalContext getGlobalContext() {
+ return (CompleteOCLGlobalContext) globalContext;
+ }
+}
diff --git a/tests/org.eclipse.ocl.examples.xtext.tests/src/org/eclipse/ocl/examples/test/xtext/OCLCompilerTests.java b/tests/org.eclipse.ocl.examples.xtext.tests/src/org/eclipse/ocl/examples/test/xtext/OCLCompilerTests.java
index 9790b2c2a2..e7db41706c 100644
--- a/tests/org.eclipse.ocl.examples.xtext.tests/src/org/eclipse/ocl/examples/test/xtext/OCLCompilerTests.java
+++ b/tests/org.eclipse.ocl.examples.xtext.tests/src/org/eclipse/ocl/examples/test/xtext/OCLCompilerTests.java
@@ -11,6 +11,7 @@
package org.eclipse.ocl.examples.test.xtext;
import java.io.File;
+import java.io.FileWriter;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
@@ -26,10 +27,12 @@ import org.eclipse.jdt.annotation.NonNull;
import org.eclipse.jdt.annotation.Nullable;
import org.eclipse.ocl.examples.codegen.completeocl.CompleteOCLCodeGenerator;
import org.eclipse.ocl.examples.codegen.dynamic.OCL2JavaFileObject;
+import org.eclipse.ocl.examples.codegen.oclinecore.OCLinEcoreTables;
import org.eclipse.ocl.examples.xtext.tests.TestUtil;
import org.eclipse.ocl.examples.xtext.tests.XtextTestCase;
import org.eclipse.ocl.pivot.Model;
import org.eclipse.ocl.pivot.internal.manager.MetamodelManagerInternal;
+import org.eclipse.ocl.pivot.internal.manager.PivotMetamodelManager;
import org.eclipse.ocl.pivot.internal.utilities.OCLInternal;
import org.eclipse.ocl.pivot.internal.utilities.PivotEnvironmentFactory;
import org.eclipse.ocl.pivot.oclstdlib.OCLstdlibTables;
@@ -119,8 +122,8 @@ public class OCLCompilerTests extends XtextTestCase
return asResource;
}
- protected @NonNull Class<? extends Transformer> generateCode(@NonNull Model asDocument, @NonNull String rootPackageNames) throws Exception {
- CompleteOCLCodeGenerator cg = new CompleteOCLCodeGenerator(getEnvironmentFactory(), asDocument, rootPackageNames);
+ protected @NonNull Class<? extends Transformer> generateCode(@NonNull Model asDocument, @NonNull String rootPackageNames, @NonNull String rootClassName) throws Exception {
+ CompleteOCLCodeGenerator cg = new CompleteOCLCodeGenerator(getEnvironmentFactory(), asDocument, rootPackageNames, rootClassName);
// QVTiCodeGenOptions options = cg.getOptions();
// options.setUseNullAnnotations(true);
// options.setPackagePrefix("cg_qvtimperative_tests");
@@ -197,7 +200,27 @@ public class OCLCompilerTests extends XtextTestCase
// URI outputModelURI = getProjectFileURI("Tree2TallTree/Tree2TallTree.xmi");
// URI referenceModelURI = getProjectFileURI("Tree2TallTree/TallTreeValidate.xmi");
Model asModel = myOCL.loadDocument(documentURI); //, genModelURI);
- Class<? extends Transformer> txClass = myOCL.generateCode(asModel, "fibonacci");
+
+ OCLinEcoreTables oclinEcoreTables = new OCLinEcoreTables((PivotMetamodelManager)myOCL.getMetamodelManager(), asModel.getOwnedPackages().get(0))
+ {
+
+ @Override
+ public @NonNull String getTablesClassName() {
+ return "FibonacciTables";
+ }
+
+ @Override
+ protected String getTablesPackageName() {
+ return "fibonacci";
+ }
+
+ };
+ oclinEcoreTables.generateTablesClass(null);
+ String generateTablesClass = oclinEcoreTables.toString();
+ FileWriter fw = new FileWriter("../org.eclipse.ocl.examples.xtext.tests/src-gen/fibonacci/FibonacciTables.java");
+ fw.append(generateTablesClass);
+ fw.close();
+ Class<? extends Transformer> txClass = myOCL.generateCode(asModel, "fibonacci", "Fibonacci");
// Transformer tx = myOCL.createTransformer(txClass);
// myOCL.loadInput(tx, "tree", inputModelURI);
// tx.run();
diff --git a/tests/org.eclipse.ocl.examples.xtext.tests/src/org/eclipse/ocl/examples/test/xtext/models/Fibonacci.ocl b/tests/org.eclipse.ocl.examples.xtext.tests/src/org/eclipse/ocl/examples/test/xtext/models/Fibonacci.ocl
index fdda2892de..56b1304982 100644
--- a/tests/org.eclipse.ocl.examples.xtext.tests/src/org/eclipse/ocl/examples/test/xtext/models/Fibonacci.ocl
+++ b/tests/org.eclipse.ocl.examples.xtext.tests/src/org/eclipse/ocl/examples/test/xtext/models/Fibonacci.ocl
@@ -1,4 +1,4 @@
-import ecore : 'http://www.eclipse.org/emf/2002/Ecore#/'
+--import ecore : 'http://www.eclipse.org/emf/2002/Ecore#/'
--package ecore
--context ELong

Back to the top