diff options
author | Ed Willink | 2016-08-31 17:45:39 +0000 |
---|---|---|
committer | Ed Willink | 2016-09-20 08:36:59 +0000 |
commit | f3fbb9429c41e10f168b6ccf65311be4afaa4a67 (patch) | |
tree | 4045ccdf2e091a8f93f78a6a72b97ef657c9faa0 | |
parent | 6c3fa370b1393a744e6bdf25d7b3435a7e9c2419 (diff) | |
download | org.eclipse.ocl-ewillink/500519.tar.gz org.eclipse.ocl-ewillink/500519.tar.xz org.eclipse.ocl-ewillink/500519.zip |
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 |