Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEd Willink2016-11-08 11:50:22 +0000
committerEd Willink2016-12-20 21:48:21 +0000
commitb8b64a2c79d6f86ee5562883c448ffc490729671 (patch)
tree2cec58678b43ec2a458039ed10e5f8eb3960ef27
parentfabe88b770fec06e20d20b02aad9eaf57356d384 (diff)
downloadorg.eclipse.qvtd-b8b64a2c79d6f86ee5562883c448ffc490729671.tar.gz
org.eclipse.qvtd-b8b64a2c79d6f86ee5562883c448ffc490729671.tar.xz
org.eclipse.qvtd-b8b64a2c79d6f86ee5562883c448ffc490729671.zip
[500962] Use allInstances connections
-rw-r--r--plugins/org.eclipse.qvtd.codegen/src/org/eclipse/qvtd/codegen/qvti/analyzer/QVTiAS2CGVisitor.java3
-rw-r--r--plugins/org.eclipse.qvtd.codegen/src/org/eclipse/qvtd/codegen/qvti/java/QVTiCG2JavaVisitor.java103
-rw-r--r--plugins/org.eclipse.qvtd.codegen/src/org/eclipse/qvtd/codegen/utilities/QVTiCGUtil.java23
-rw-r--r--plugins/org.eclipse.qvtd.pivot.qvtimperative/src/org/eclipse/qvtd/pivot/qvtimperative/attributes/MappingAttribution.java2
-rw-r--r--plugins/org.eclipse.qvtd.pivot.qvtimperative/src/org/eclipse/qvtd/pivot/qvtimperative/evaluation/BasicQVTiExecutor.java22
-rw-r--r--plugins/org.eclipse.qvtd.pivot.qvtimperative/src/org/eclipse/qvtd/pivot/qvtimperative/evaluation/QVTiModelsManager.java2
-rw-r--r--plugins/org.eclipse.qvtd.pivot.qvtimperative/src/org/eclipse/qvtd/pivot/qvtimperative/evaluation/QVTiTransformationAnalysis.java13
-rw-r--r--plugins/org.eclipse.qvtd.pivot.qvtimperative/src/org/eclipse/qvtd/pivot/qvtimperative/utilities/QVTimperativeUtil.java27
-rw-r--r--plugins/org.eclipse.qvtd.runtime/src/org/eclipse/qvtd/runtime/internal/evaluation/AbstractTransformerInternal.java4
-rw-r--r--plugins/org.eclipse.qvtd.xtext.qvtimperative/src/org/eclipse/qvtd/xtext/qvtimperative/cs2as/QVTimperativeCS2AS.java2
-rw-r--r--tests/org.eclipse.qvtd.build.etl.tests/src/org/eclipse/qvtd/build/etl/tests/Families2Persons/Families2PersonsNormalizer.java12
-rw-r--r--tests/org.eclipse.qvtd.build.etl.tests/src/org/eclipse/qvtd/build/etl/tests/QVTdMtcTests.java2
-rw-r--r--tests/org.eclipse.qvtd.build.etl.tests/src/org/eclipse/qvtd/build/etl/tests/UpperToLower/UpperToLowerNormalizer.java14
-rw-r--r--tests/org.eclipse.qvtd.xtext.qvtbase.tests/META-INF/MANIFEST.MF3
-rw-r--r--tests/org.eclipse.qvtd.xtext.qvtbase.tests/src/org/eclipse/qvtd/xtext/qvtbase/tests/AbstractTestQVT.java309
-rw-r--r--tests/org.eclipse.qvtd.xtext.qvtbase.tests/src/org/eclipse/qvtd/xtext/qvtbase/tests/LoadTestCase.java45
-rw-r--r--tests/org.eclipse.qvtd.xtext.qvtbase.tests/src/org/eclipse/qvtd/xtext/qvtbase/tests/ModelNormalizer.java (renamed from tests/org.eclipse.qvtd.xtext.qvtimperative.tests/src/org/eclipse/qvtd/xtext/qvtimperative/tests/ModelNormalizer.java)4
-rw-r--r--tests/org.eclipse.qvtd.xtext.qvtcore.tests/src/org/eclipse/qvtd/xtext/qvtcore/tests/QVTcCompilerTests.java132
-rw-r--r--tests/org.eclipse.qvtd.xtext.qvtcore.tests/src/org/eclipse/qvtd/xtext/qvtcore/tests/QVTcSerializeTests.java47
-rw-r--r--tests/org.eclipse.qvtd.xtext.qvtcore.tests/src/org/eclipse/qvtd/xtext/qvtcore/tests/families2persons/Families2PersonsNormalizer.java14
-rw-r--r--tests/org.eclipse.qvtd.xtext.qvtcore.tests/src/org/eclipse/qvtd/xtext/qvtcore/tests/forward2reverse/Forward2ReverseNormalizer.java6
-rw-r--r--tests/org.eclipse.qvtd.xtext.qvtcore.tests/src/org/eclipse/qvtd/xtext/qvtcore/tests/hsv2hsl/HSV2HSLNormalizer.java6
-rw-r--r--tests/org.eclipse.qvtd.xtext.qvtcore.tests/src/org/eclipse/qvtd/xtext/qvtcore/tests/uml2rdbms/SimpleRDBMSNormalizer.java12
-rw-r--r--tests/org.eclipse.qvtd.xtext.qvtcore.tests/src/org/eclipse/qvtd/xtext/qvtcore/tests/upper2lower/Upper2LowerNormalizer.java16
-rw-r--r--tests/org.eclipse.qvtd.xtext.qvtimperative.tests/src/org/eclipse/qvtd/xtext/qvtimperative/tests/HSV2HSL/HSV2HSL.qvti4
-rw-r--r--tests/org.eclipse.qvtd.xtext.qvtimperative.tests/src/org/eclipse/qvtd/xtext/qvtimperative/tests/ManualUML2RDBMS/ManualRDBMSNormalizer.java12
-rw-r--r--tests/org.eclipse.qvtd.xtext.qvtimperative.tests/src/org/eclipse/qvtd/xtext/qvtimperative/tests/QVTiCompilerTests.java1
-rw-r--r--tests/org.eclipse.qvtd.xtext.qvtimperative.tests/src/org/eclipse/qvtd/xtext/qvtimperative/tests/QVTiInterpreterTests.java1
-rw-r--r--tests/org.eclipse.qvtd.xtext.qvtimperative.tests/src/org/eclipse/qvtd/xtext/qvtimperative/tests/QVTiSerializeTests.java50
-rw-r--r--tests/org.eclipse.qvtd.xtext.qvtimperative.tests/src/org/eclipse/qvtd/xtext/qvtimperative/tests/SimpleUML2RDBMS/SimpleRDBMSNormalizer.java12
-rw-r--r--tests/org.eclipse.qvtd.xtext.qvtrelation.tests/src/org/eclipse/qvtd/xtext/qvtrelation/tests/QVTrCompilerTests.java294
-rw-r--r--tests/org.eclipse.qvtd.xtext.qvtrelation.tests/src/org/eclipse/qvtd/xtext/qvtrelation/tests/forward2reverse/Forward2ReverseNormalizer.java6
-rw-r--r--tests/org.eclipse.qvtd.xtext.qvtrelation.tests/src/org/eclipse/qvtd/xtext/qvtrelation/tests/hstm2fstm/FlatStateMachineNormalizer.java6
-rw-r--r--tests/org.eclipse.qvtd.xtext.qvtrelation.tests/src/org/eclipse/qvtd/xtext/qvtrelation/tests/rel2core/PivotNormalizer.java14
34 files changed, 645 insertions, 578 deletions
diff --git a/plugins/org.eclipse.qvtd.codegen/src/org/eclipse/qvtd/codegen/qvti/analyzer/QVTiAS2CGVisitor.java b/plugins/org.eclipse.qvtd.codegen/src/org/eclipse/qvtd/codegen/qvti/analyzer/QVTiAS2CGVisitor.java
index f8440320a..18357a64c 100644
--- a/plugins/org.eclipse.qvtd.codegen/src/org/eclipse/qvtd/codegen/qvti/analyzer/QVTiAS2CGVisitor.java
+++ b/plugins/org.eclipse.qvtd.codegen/src/org/eclipse/qvtd/codegen/qvti/analyzer/QVTiAS2CGVisitor.java
@@ -618,7 +618,6 @@ public class QVTiAS2CGVisitor extends AS2CGVisitor implements QVTimperativeVisit
return ClassUtil.nonNullState(analyzer.getTypedModel(referredTypedModel));
}
Transformation pTransformation = QVTimperativeUtil.getContainingTransformation(pVariable);
- assert pTransformation != null;
ImperativeTypedModel asTypedModel = (ImperativeTypedModel) ClassUtil.nonNullState(pTransformation.getModelParameter(null));
return ClassUtil.nonNullState(analyzer.getTypedModel(asTypedModel));
}
@@ -1085,7 +1084,7 @@ public class QVTiAS2CGVisitor extends AS2CGVisitor implements QVTimperativeVisit
@Override
public @Nullable CGNamedElement visitSetStatement(@NonNull SetStatement asSetStatement) {
- ImperativeTransformation asTransformation = ClassUtil.nonNullModel(QVTimperativeUtil.getContainingTransformation(asSetStatement));
+ ImperativeTransformation asTransformation = QVTimperativeUtil.getContainingTransformation(asSetStatement);
QVTiTransformationAnalysis transformationAnalysis = analyzer.getCodeGenerator().getTransformationAnalysis(asTransformation);
Integer cacheIndex = transformationAnalysis.getCacheIndex(asSetStatement);
if (cacheIndex != null) {
diff --git a/plugins/org.eclipse.qvtd.codegen/src/org/eclipse/qvtd/codegen/qvti/java/QVTiCG2JavaVisitor.java b/plugins/org.eclipse.qvtd.codegen/src/org/eclipse/qvtd/codegen/qvti/java/QVTiCG2JavaVisitor.java
index a162d40c2..713fd1f1b 100644
--- a/plugins/org.eclipse.qvtd.codegen/src/org/eclipse/qvtd/codegen/qvti/java/QVTiCG2JavaVisitor.java
+++ b/plugins/org.eclipse.qvtd.codegen/src/org/eclipse/qvtd/codegen/qvti/java/QVTiCG2JavaVisitor.java
@@ -65,6 +65,7 @@ import org.eclipse.ocl.pivot.Parameter;
import org.eclipse.ocl.pivot.Property;
import org.eclipse.ocl.pivot.ShadowPart;
import org.eclipse.ocl.pivot.TypedElement;
+import org.eclipse.ocl.pivot.Type;
import org.eclipse.ocl.pivot.VariableDeclaration;
import org.eclipse.ocl.pivot.VariableExp;
import org.eclipse.ocl.pivot.ids.ClassId;
@@ -225,20 +226,57 @@ public class QVTiCG2JavaVisitor extends CG2JavaVisitor<@NonNull QVTiCodeGenerato
}
}
- protected @NonNull String @Nullable [] doAllInstances(@NonNull QVTiTransformationAnalysis transformationAnalysis) {
- Set<org.eclipse.ocl.pivot.@NonNull Class> allInstancesClasses = transformationAnalysis.getAllInstancesClasses();
- if (allInstancesClasses.size() > 0) {
- NameManager nameManager = getGlobalContext().getNameManager();
- Map<org.eclipse.ocl.pivot.@NonNull Class, @Nullable List<org.eclipse.ocl.pivot.@NonNull Class>> instancesClassAnalysis = transformationAnalysis.getInstancesClassAnalysis(allInstancesClasses);
+ protected static class AllInstancesAnalysis
+ {
+ protected final @NonNull Set<org.eclipse.ocl.pivot.@NonNull Class> allInstancesClasses;
+ protected final @NonNull Map<org.eclipse.ocl.pivot.@NonNull Class, @Nullable List<org.eclipse.ocl.pivot.@NonNull Class>> instancesClassAnalysis;
+ protected final @NonNull Map<org.eclipse.ocl.pivot.@NonNull Class, @NonNull Integer> instancesClass2index;
+ protected final @NonNull List<org.eclipse.ocl.pivot.@NonNull Class> sortedList;
+ private @NonNull String @Nullable [] names = null;
+
+ public AllInstancesAnalysis(@NonNull QVTiTransformationAnalysis transformationAnalysis, @NonNull Set<org.eclipse.ocl.pivot.@NonNull Class> allInstancesClasses) {
+ this.allInstancesClasses = allInstancesClasses;
+ this.instancesClassAnalysis = transformationAnalysis.getInstancesClassAnalysis(allInstancesClasses);
//
// Populate a mapping from instancesClass to linear index.
//
- Map<org.eclipse.ocl.pivot.@NonNull Class, @NonNull Integer> instancesClass2index = new HashMap<org.eclipse.ocl.pivot.@NonNull Class, @NonNull Integer>(instancesClassAnalysis.size());
- List<org.eclipse.ocl.pivot.@NonNull Class> sortedList = new ArrayList<org.eclipse.ocl.pivot.@NonNull Class>(instancesClassAnalysis.keySet());
+ this.instancesClass2index = new HashMap<>(instancesClassAnalysis.size());
+ this.sortedList = new ArrayList<>(instancesClassAnalysis.keySet());
Collections.sort(sortedList, NameUtil.NameableComparator.INSTANCE);
for (int i = 0; i < sortedList.size(); i++) {
instancesClass2index.put(sortedList.get(i), i);
}
+ }
+
+ protected @NonNull Map<org.eclipse.ocl.pivot.@NonNull Class, @NonNull Integer> getInstancesClass2index() {
+ return instancesClass2index;
+ }
+
+ protected @NonNull Map<org.eclipse.ocl.pivot.@NonNull Class, @Nullable List<org.eclipse.ocl.pivot.@NonNull Class>> getInstancesClassAnalysis() {
+ return instancesClassAnalysis;
+ }
+
+ protected @NonNull String @NonNull [] getNames() {
+ return ClassUtil.nonNullState(names);
+ }
+
+ protected @NonNull List<org.eclipse.ocl.pivot.@NonNull Class> getSortedList() {
+ return sortedList;
+ }
+
+ public void setNames(@NonNull String[] names) {
+ this.names = names;
+ }
+ }
+
+ protected @Nullable AllInstancesAnalysis doAllInstances(@NonNull QVTiTransformationAnalysis transformationAnalysis) {
+ Set<org.eclipse.ocl.pivot.@NonNull Class> allInstancesClasses = transformationAnalysis.getAllInstancesClasses();
+ if (allInstancesClasses.size() > 0) {
+ AllInstancesAnalysis allInstancesAnalysis = new AllInstancesAnalysis(transformationAnalysis, allInstancesClasses);
+ Map<org.eclipse.ocl.pivot.@NonNull Class, @NonNull Integer> instancesClass2index = allInstancesAnalysis.getInstancesClass2index();
+ List<org.eclipse.ocl.pivot.@NonNull Class> sortedList = allInstancesAnalysis.getSortedList();
+ Map<org.eclipse.ocl.pivot.@NonNull Class, @Nullable List<org.eclipse.ocl.pivot.@NonNull Class>> instancesClassAnalysis = allInstancesAnalysis.getInstancesClassAnalysis();
+ NameManager nameManager = getGlobalContext().getNameManager();
//
// Emit the ClassId array
//
@@ -337,7 +375,8 @@ public class QVTiCG2JavaVisitor extends CG2JavaVisitor<@NonNull QVTiCodeGenerato
}
js.popIndentation();
js.append("};\n");
- return new @NonNull String[]{ classIndex2classIdName, classIndex2allClassIndexes};
+ allInstancesAnalysis.setNames(new @NonNull String[]{ classIndex2classIdName, classIndex2allClassIndexes});
+ return allInstancesAnalysis;
}
return null;
}
@@ -1206,7 +1245,7 @@ public class QVTiCG2JavaVisitor extends CG2JavaVisitor<@NonNull QVTiCodeGenerato
js.append(") {\n");
js.pushIndentation(null);
}
- else if (!cgMappingCallBinding.isNonNull()) {
+ else if (!cgMappingCallBinding.getOwnedValue().isNonNull()) {
js.append("if (");
js.appendValueName(cgMappingCallBinding.getOwnedValue());
js.append(" != null) {\n");
@@ -1255,7 +1294,7 @@ public class QVTiCG2JavaVisitor extends CG2JavaVisitor<@NonNull QVTiCodeGenerato
js.popIndentation();
js.append("}\n");
}
- else if (!cgMappingCallBinding.isNonNull()) {
+ else if (!cgMappingCallBinding.getOwnedValue().isNonNull()) {
js.popIndentation();
js.append("}\n");
}
@@ -1377,14 +1416,14 @@ public class QVTiCG2JavaVisitor extends CG2JavaVisitor<@NonNull QVTiCodeGenerato
return;
}
js.append("\n/*\n * Property-source to Property-target unnavigable navigation caches\n */\n");
- Map<@NonNull String, @NonNull Property> key2property = new HashMap<@NonNull String, @NonNull Property>();
+ Map<@NonNull String, @NonNull Property> key2property = new HashMap<>();
for (Map.Entry<@NonNull Property, @NonNull Integer> entry : opposites.entrySet()) {
Property property = entry.getKey();
String name = getGlobalContext().addOppositeProperty(property);
key2property.put(name, property);
}
- List<String> sortedKeys = new ArrayList<String>(key2property.keySet());
+ List<String> sortedKeys = new ArrayList<>(key2property.keySet());
Collections.sort(sortedKeys);
for (String key : sortedKeys) {
Property property = key2property.get(key);
@@ -1454,11 +1493,29 @@ public class QVTiCG2JavaVisitor extends CG2JavaVisitor<@NonNull QVTiCodeGenerato
return oppositeIndex2propertyIdName;
}
- protected void doRun(@NonNull CGTransformation cgTransformation) {
+ protected void doRun(@NonNull CGTransformation cgTransformation, @Nullable AllInstancesAnalysis allInstancesAnalysis) {
CGMapping cgRootMapping = QVTiCGUtil.getRootMapping(cgTransformation);
js.append("@Override\n");
js.append("public boolean run() {\n");
js.pushIndentation(null);
+ for (@NonNull CGGuardVariable cgGuardVariable : QVTiCGUtil.getOwnedGuardVariables(cgRootMapping)) {
+ // js.appendDeclaration(cgGuardVariable);
+ js.append("final ");
+ js.appendClassReference(true, Connection.class);
+ js.append(" ");
+ js.appendValueName(cgGuardVariable);
+ js.append(" = ");
+ js.append(QVTiGlobalContext.MODELS_NAME);
+ js.append("[");
+ appendModelIndex(QVTiCGUtil.getOwningTransformation(cgRootMapping).getOwnedTypedModels().get(0));
+ js.append("].getConnection(");
+ VariableDeclaration asGuardVariable = QVTiCGUtil.getAST(cgGuardVariable);
+ assert allInstancesAnalysis != null;
+ Type type = asGuardVariable.getType();
+ Integer classIndex = allInstancesAnalysis.getInstancesClass2index().get(type);
+ js.append(classIndex + "/*" + type + "*/");
+ js.append(");\n");
+ }
if (isIncremental || useClass(cgRootMapping)) {
js.append(getMappingCtorName(cgRootMapping) + ".invoke();\n");
js.append("return invocationManager.flush();\n");
@@ -1466,7 +1523,16 @@ public class QVTiCG2JavaVisitor extends CG2JavaVisitor<@NonNull QVTiCodeGenerato
else {
js.append("return ");
js.append(getMappingName(cgRootMapping));
- js.append("()");
+ js.append("(");
+ boolean isFirst = true;
+ for (@NonNull CGGuardVariable cgGuardVariable : cgRootMapping.getOwnedGuardVariables()) {
+ if (!isFirst) {
+ js.append(", ");
+ }
+ js.appendValueName(cgGuardVariable);
+ isFirst = false;
+ }
+ js.append(")");
js.append(" && invocationManager.flush();\n");
}
js.popIndentation();
@@ -1479,7 +1545,7 @@ public class QVTiCG2JavaVisitor extends CG2JavaVisitor<@NonNull QVTiCodeGenerato
@Override
public @NonNull Set<String> getAllImports() {
- Set<String> allImports = new HashSet<String>();
+ Set<String> allImports = new HashSet<>();
for (String anImport : super.getAllImports()) {
allImports.add(anImport);
if (anImport.endsWith(".Model")) {
@@ -1574,7 +1640,7 @@ public class QVTiCG2JavaVisitor extends CG2JavaVisitor<@NonNull QVTiCodeGenerato
}
private boolean isConnection(CGValuedElement source) {
- return (source.getAst() instanceof VariableExp) && (((VariableExp)source.getAst()).getReferredVariable() instanceof BufferStatement);
+ return (source.getAst() instanceof VariableExp) && (((VariableExp)source.getAst()).getReferredVariable() instanceof ConnectionVariable);
}
private boolean isHazardous2(@NonNull NavigationCallExp asNavigationCallExp) {
@@ -2403,7 +2469,8 @@ public class QVTiCG2JavaVisitor extends CG2JavaVisitor<@NonNull QVTiCodeGenerato
if (oppositeIndex2propertyIdName != null) {
js.append("\n");
}
- @NonNull String @Nullable [] allInstancesNames = doAllInstances(transformationAnalysis);
+ AllInstancesAnalysis allInstancesAnalysis = doAllInstances(transformationAnalysis);
+ @NonNull String @Nullable [] allInstancesNames = allInstancesAnalysis != null ? allInstancesAnalysis.getNames() : null;
js.append("\n");
List<@NonNull CGMapping> cgMappings = ClassUtil.nullFree(cgTransformation.getOwnedMappings());
List<CGOperation> cgOperations = cgTransformation.getOperations();
@@ -2416,7 +2483,7 @@ public class QVTiCG2JavaVisitor extends CG2JavaVisitor<@NonNull QVTiCodeGenerato
doCreateIncrementalManagers();
js.append("\n");
} */
- doRun(cgTransformation);
+ doRun(cgTransformation, allInstancesAnalysis);
for (@NonNull CGOperation cgOperation : ClassUtil.nullFree(cgOperations)) {
if (!(cgOperation instanceof CGCachedOperation)) {
js.append("\n");
diff --git a/plugins/org.eclipse.qvtd.codegen/src/org/eclipse/qvtd/codegen/utilities/QVTiCGUtil.java b/plugins/org.eclipse.qvtd.codegen/src/org/eclipse/qvtd/codegen/utilities/QVTiCGUtil.java
index 034d396e4..eb3ae25c5 100644
--- a/plugins/org.eclipse.qvtd.codegen/src/org/eclipse/qvtd/codegen/utilities/QVTiCGUtil.java
+++ b/plugins/org.eclipse.qvtd.codegen/src/org/eclipse/qvtd/codegen/utilities/QVTiCGUtil.java
@@ -18,10 +18,12 @@ import org.eclipse.ocl.examples.codegen.cgmodel.CGAccumulator;
import org.eclipse.ocl.examples.codegen.cgmodel.CGEcorePropertyCallExp;
import org.eclipse.ocl.examples.codegen.cgmodel.CGElement;
import org.eclipse.ocl.examples.codegen.utilities.CGUtil;
+import org.eclipse.ocl.pivot.VariableDeclaration;
import org.eclipse.ocl.pivot.utilities.ClassUtil;
import org.eclipse.ocl.pivot.utilities.NameUtil;
import org.eclipse.qvtd.codegen.qvticgmodel.CGEcoreContainerAssignment;
import org.eclipse.qvtd.codegen.qvticgmodel.CGEcorePropertyAssignment;
+import org.eclipse.qvtd.codegen.qvticgmodel.CGGuardVariable;
import org.eclipse.qvtd.codegen.qvticgmodel.CGMapping;
import org.eclipse.qvtd.codegen.qvticgmodel.CGMappingCall;
import org.eclipse.qvtd.codegen.qvticgmodel.CGMappingCallBinding;
@@ -36,10 +38,6 @@ import org.eclipse.qvtd.pivot.qvtimperative.MappingCall;
public class QVTiCGUtil extends CGUtil
{
- public static @NonNull Mapping getAST(@NonNull CGMapping cgMapping) {
- return ClassUtil.nonNullState((Mapping) cgMapping.getAst());
- }
-
public static @Nullable CGMapping basicGetContainingCGMapping(@NonNull CGElement cgElement) {
for (EObject eObject = cgElement; eObject != null; eObject = eObject.eContainer()) {
if (eObject instanceof CGMapping) {
@@ -49,6 +47,14 @@ public class QVTiCGUtil extends CGUtil
return null;
}
+ public static @NonNull VariableDeclaration getAST(@NonNull CGGuardVariable cgGuardVariable) {
+ return ClassUtil.nonNullState((VariableDeclaration)cgGuardVariable.getAst());
+ }
+
+ public static @NonNull Mapping getAST(@NonNull CGMapping cgMapping) {
+ return ClassUtil.nonNullState((Mapping)cgMapping.getAst());
+ }
+
public static @NonNull MappingCall getAST(@NonNull CGMappingCall cgMappingCall) {
return ClassUtil.nonNullState((MappingCall)cgMappingCall.getAst());
}
@@ -118,4 +124,13 @@ public class QVTiCGUtil extends CGUtil
}
return cgRootMapping;
}
+
+ public static @NonNull Iterable<@NonNull CGGuardVariable> getOwnedGuardVariables(@NonNull CGMapping cgRootMapping) {
+ return ClassUtil.nullFree(cgRootMapping.getOwnedGuardVariables());
+ }
+
+ public static @NonNull CGTransformation getOwningTransformation(@NonNull CGMapping cgMapping) {
+ return ClassUtil.nonNullState(cgMapping.getOwningTransformation());
+
+ }
}
diff --git a/plugins/org.eclipse.qvtd.pivot.qvtimperative/src/org/eclipse/qvtd/pivot/qvtimperative/attributes/MappingAttribution.java b/plugins/org.eclipse.qvtd.pivot.qvtimperative/src/org/eclipse/qvtd/pivot/qvtimperative/attributes/MappingAttribution.java
index 075056bbb..678209a34 100644
--- a/plugins/org.eclipse.qvtd.pivot.qvtimperative/src/org/eclipse/qvtd/pivot/qvtimperative/attributes/MappingAttribution.java
+++ b/plugins/org.eclipse.qvtd.pivot.qvtimperative/src/org/eclipse/qvtd/pivot/qvtimperative/attributes/MappingAttribution.java
@@ -77,7 +77,7 @@ public class MappingAttribution extends AbstractAttribution
}
}
environmentView.addNamedElements(QVTimperativeUtil.getOwnedMappingParameters(mapping));
- ImperativeTransformation transformation = QVTimperativeUtil.getContainingTransformation(mapping);
+ ImperativeTransformation transformation = QVTimperativeUtil.basicGetContainingTransformation(mapping);
if (transformation != null) {
for (@NonNull ImperativeTypedModel typedModel : QVTimperativeUtil.getOwnedTypedModels(transformation)) {
for (org.eclipse.ocl.pivot.Package usedPackage : typedModel.getUsedPackage()) {
diff --git a/plugins/org.eclipse.qvtd.pivot.qvtimperative/src/org/eclipse/qvtd/pivot/qvtimperative/evaluation/BasicQVTiExecutor.java b/plugins/org.eclipse.qvtd.pivot.qvtimperative/src/org/eclipse/qvtd/pivot/qvtimperative/evaluation/BasicQVTiExecutor.java
index a27f67444..3465732fb 100644
--- a/plugins/org.eclipse.qvtd.pivot.qvtimperative/src/org/eclipse/qvtd/pivot/qvtimperative/evaluation/BasicQVTiExecutor.java
+++ b/plugins/org.eclipse.qvtd.pivot.qvtimperative/src/org/eclipse/qvtd/pivot/qvtimperative/evaluation/BasicQVTiExecutor.java
@@ -49,6 +49,7 @@ import org.eclipse.ocl.pivot.values.NullValue;
import org.eclipse.qvtd.pivot.qvtbase.Function;
import org.eclipse.qvtd.pivot.qvtbase.Transformation;
import org.eclipse.qvtd.pivot.qvtbase.utilities.QVTbaseUtil;
+import org.eclipse.qvtd.pivot.qvtimperative.AppendParameter;
import org.eclipse.qvtd.pivot.qvtimperative.AppendParameterBinding;
import org.eclipse.qvtd.pivot.qvtimperative.GuardParameterBinding;
import org.eclipse.qvtd.pivot.qvtimperative.ImperativeTransformation;
@@ -64,8 +65,10 @@ import org.eclipse.qvtd.pivot.qvtimperative.SimpleParameterBinding;
import org.eclipse.qvtd.pivot.qvtimperative.Statement;
import org.eclipse.qvtd.pivot.qvtimperative.utilities.QVTimperativeUtil;
import org.eclipse.qvtd.runtime.evaluation.AbstractTransformer;
+import org.eclipse.qvtd.runtime.evaluation.Connection;
import org.eclipse.qvtd.runtime.evaluation.Interval;
import org.eclipse.qvtd.runtime.evaluation.InvocationFailedException;
+import org.eclipse.qvtd.runtime.evaluation.TypedModelInstance;
public abstract class BasicQVTiExecutor extends AbstractExecutor implements QVTiExecutor
{
@@ -383,6 +386,25 @@ public abstract class BasicQVTiExecutor extends AbstractExecutor implements QVTi
try {
Interval rootInterval = getInvocationManager().getRootInterval();
mapping2interval.put(rule, rootInterval);
+ TypedModelInstance modelInstance = null;
+ for (@NonNull ImperativeTypedModel typedModel : QVTimperativeUtil.getOwnedTypedModels(transformation)) {
+ if (typedModel.isIsChecked()) {
+ modelInstance = getModelsManager().getTypedModelInstance(typedModel);
+ break;
+ }
+ }
+ assert modelInstance != null;
+ for (@NonNull MappingParameter mappingParameter : QVTimperativeUtil.getOwnedMappingParameters(rule)) {
+ if (mappingParameter instanceof AppendParameter) {
+ org.eclipse.ocl.pivot.Class type = QVTimperativeUtil.getClassType(mappingParameter);
+ Connection connection = rootInterval.createConnection(QVTimperativeUtil.getName(mappingParameter), type.getTypeId(), false);
+ Iterable<@NonNull ? extends Object> objectsOfKind = modelInstance.getObjectsOfKind(type);
+ for (@NonNull Object object : objectsOfKind) {
+ connection.append(object);
+ }
+ getEvaluationEnvironment().add(mappingParameter, connection);
+ }
+ }
rule.accept(undecoratedVisitor); // Use an outer InvocationConstructor?
getInvocationManager().flush();
}
diff --git a/plugins/org.eclipse.qvtd.pivot.qvtimperative/src/org/eclipse/qvtd/pivot/qvtimperative/evaluation/QVTiModelsManager.java b/plugins/org.eclipse.qvtd.pivot.qvtimperative/src/org/eclipse/qvtd/pivot/qvtimperative/evaluation/QVTiModelsManager.java
index 4ca1fb24d..9bed9a922 100644
--- a/plugins/org.eclipse.qvtd.pivot.qvtimperative/src/org/eclipse/qvtd/pivot/qvtimperative/evaluation/QVTiModelsManager.java
+++ b/plugins/org.eclipse.qvtd.pivot.qvtimperative/src/org/eclipse/qvtd/pivot/qvtimperative/evaluation/QVTiModelsManager.java
@@ -385,7 +385,7 @@ public class QVTiModelsManager
}
}
- public static class QVTiTypedModelInstance extends AbstractTypedModelInstance
+ public static class QVTiTypedModelInstance extends AbstractTypedModelInstance // FIXME reimplement using CG variant
{
protected final @NonNull QVTiModelsManager modelManager;
protected final @NonNull ImperativeTypedModel typedModel;
diff --git a/plugins/org.eclipse.qvtd.pivot.qvtimperative/src/org/eclipse/qvtd/pivot/qvtimperative/evaluation/QVTiTransformationAnalysis.java b/plugins/org.eclipse.qvtd.pivot.qvtimperative/src/org/eclipse/qvtd/pivot/qvtimperative/evaluation/QVTiTransformationAnalysis.java
index 3de7c11a2..fcc3ba6d7 100644
--- a/plugins/org.eclipse.qvtd.pivot.qvtimperative/src/org/eclipse/qvtd/pivot/qvtimperative/evaluation/QVTiTransformationAnalysis.java
+++ b/plugins/org.eclipse.qvtd.pivot.qvtimperative/src/org/eclipse/qvtd/pivot/qvtimperative/evaluation/QVTiTransformationAnalysis.java
@@ -32,6 +32,7 @@ import org.eclipse.ocl.pivot.PrimitiveType;
import org.eclipse.ocl.pivot.Property;
import org.eclipse.ocl.pivot.PropertyCallExp;
import org.eclipse.ocl.pivot.Type;
+import org.eclipse.ocl.pivot.TypedElement;
import org.eclipse.ocl.pivot.ids.IdManager;
import org.eclipse.ocl.pivot.ids.OperationId;
import org.eclipse.ocl.pivot.ids.TypeId;
@@ -39,6 +40,7 @@ import org.eclipse.ocl.pivot.internal.manager.MetamodelManagerInternal;
import org.eclipse.ocl.pivot.internal.utilities.EnvironmentFactoryInternal;
import org.eclipse.ocl.pivot.library.LibraryFeature;
import org.eclipse.ocl.pivot.library.oclany.OclElementOclContainerProperty;
+import org.eclipse.qvtd.pivot.qvtimperative.AppendParameter;
import org.eclipse.qvtd.pivot.qvtimperative.ImperativeTransformation;
import org.eclipse.qvtd.pivot.qvtimperative.Mapping;
import org.eclipse.qvtd.pivot.qvtimperative.SetStatement;
@@ -115,8 +117,8 @@ public class QVTiTransformationAnalysis
this.transformation = transformation;
}
- private void addAllInstancesClass(@NonNull OCLExpression asExpression) {
- Type asType = asExpression.getTypeValue();
+ private void addAllInstancesClass(@NonNull TypedElement asExpression) {
+ Type asType = asExpression instanceof OCLExpression ? ((OCLExpression)asExpression).getTypeValue() : null;
if (asType == null) {
asType = asExpression.getType();
}
@@ -269,6 +271,13 @@ public class QVTiTransformationAnalysis
else if (eObject instanceof SetStatement) {
setStatements.add((SetStatement)eObject);
}
+ else if (eObject instanceof AppendParameter) {
+ Mapping mapping = QVTimperativeUtil.getContainingMapping(eObject);
+ Mapping rootMapping = QVTimperativeUtil.getRootMapping(QVTimperativeUtil.getContainingTransformation(mapping));
+ if (rootMapping == mapping) {
+ addAllInstancesClass((AppendParameter)eObject);
+ }
+ }
else if (eObject instanceof OperationCallExp) {
OperationCallExp operationCallExp = (OperationCallExp)eObject;
Operation referredOperation = operationCallExp.getReferredOperation();
diff --git a/plugins/org.eclipse.qvtd.pivot.qvtimperative/src/org/eclipse/qvtd/pivot/qvtimperative/utilities/QVTimperativeUtil.java b/plugins/org.eclipse.qvtd.pivot.qvtimperative/src/org/eclipse/qvtd/pivot/qvtimperative/utilities/QVTimperativeUtil.java
index 15925fede..33c49f484 100644
--- a/plugins/org.eclipse.qvtd.pivot.qvtimperative/src/org/eclipse/qvtd/pivot/qvtimperative/utilities/QVTimperativeUtil.java
+++ b/plugins/org.eclipse.qvtd.pivot.qvtimperative/src/org/eclipse/qvtd/pivot/qvtimperative/utilities/QVTimperativeUtil.java
@@ -28,6 +28,7 @@ import org.eclipse.ocl.pivot.OCLExpression;
import org.eclipse.ocl.pivot.PivotFactory;
import org.eclipse.ocl.pivot.Property;
import org.eclipse.ocl.pivot.Type;
+import org.eclipse.ocl.pivot.TypedElement;
import org.eclipse.ocl.pivot.Variable;
import org.eclipse.ocl.pivot.VariableDeclaration;
import org.eclipse.ocl.pivot.VariableExp;
@@ -103,6 +104,15 @@ public class QVTimperativeUtil extends QVTbaseUtil
}
}
+ public static @Nullable ImperativeTransformation basicGetContainingTransformation(@Nullable EObject eObject) {
+ for ( ; eObject != null; eObject = eObject.eContainer()) {
+ if (eObject instanceof ImperativeTransformation) {
+ return (ImperativeTransformation) eObject;
+ }
+ }
+ return null;
+ }
+
public static @Nullable ImperativeTypedModel basicGetOwnedTypedModel(@NonNull ImperativeTransformation transformation, @Nullable String name) {
return NameUtil.getNameable(getOwnedTypedModels(transformation), name);
}
@@ -232,6 +242,10 @@ public class QVTimperativeUtil extends QVTbaseUtil
return variableExp;
} */
+ public static org.eclipse.ocl.pivot.@NonNull Class getClassType(@NonNull TypedElement typedElement) {
+ return ClassUtil.nonNullState((org.eclipse.ocl.pivot.Class)typedElement.getType());
+ }
+
public static @Nullable Mapping getContainingMapping(@Nullable EObject eObject) {
for ( ; eObject != null; eObject = eObject.eContainer()) {
if (eObject instanceof Mapping) {
@@ -250,19 +264,18 @@ public class QVTimperativeUtil extends QVTbaseUtil
return null;
}
- public static @Nullable ImperativeTransformation getContainingTransformation(@Nullable EObject eObject) {
- for ( ; eObject != null; eObject = eObject.eContainer()) {
- if (eObject instanceof ImperativeTransformation) {
- return (ImperativeTransformation) eObject;
- }
- }
- return null;
+ public static @NonNull ImperativeTransformation getContainingTransformation(@Nullable EObject eObject) {
+ return ClassUtil.nonNullState(basicGetContainingTransformation(eObject));
}
public static @NonNull String getName(@NonNull Mapping asMapping) {
return ClassUtil.nonNullState(asMapping.getName());
}
+ public static @NonNull String getName(@NonNull MappingParameter asParameter) {
+ return ClassUtil.nonNullState(asParameter.getName());
+ }
+
public static @NonNull Mapping getOwnedMapping(@NonNull ImperativeTransformation transformation, @Nullable String name) {
return ClassUtil.nonNullState(NameUtil.getNameable(getOwnedMappings(transformation), name));
}
diff --git a/plugins/org.eclipse.qvtd.runtime/src/org/eclipse/qvtd/runtime/internal/evaluation/AbstractTransformerInternal.java b/plugins/org.eclipse.qvtd.runtime/src/org/eclipse/qvtd/runtime/internal/evaluation/AbstractTransformerInternal.java
index 1db2f0e62..64bdaf9ea 100644
--- a/plugins/org.eclipse.qvtd.runtime/src/org/eclipse/qvtd/runtime/internal/evaluation/AbstractTransformerInternal.java
+++ b/plugins/org.eclipse.qvtd.runtime/src/org/eclipse/qvtd/runtime/internal/evaluation/AbstractTransformerInternal.java
@@ -305,6 +305,10 @@ public abstract class AbstractTransformerInternal /*extends AbstractModelManager
return allEObjects2;
}
+ public @NonNull Connection getConnection(int classIndex) {
+ return classIndex2connection[classIndex];
+ }
+
@Override
public @NonNull Iterable<@NonNull Object> getObjectsOfKind(org.eclipse.ocl.pivot.@NonNull Class type) {
TypeId classId = type.getTypeId();
diff --git a/plugins/org.eclipse.qvtd.xtext.qvtimperative/src/org/eclipse/qvtd/xtext/qvtimperative/cs2as/QVTimperativeCS2AS.java b/plugins/org.eclipse.qvtd.xtext.qvtimperative/src/org/eclipse/qvtd/xtext/qvtimperative/cs2as/QVTimperativeCS2AS.java
index 5f47670ff..e8b1b3dca 100644
--- a/plugins/org.eclipse.qvtd.xtext.qvtimperative/src/org/eclipse/qvtd/xtext/qvtimperative/cs2as/QVTimperativeCS2AS.java
+++ b/plugins/org.eclipse.qvtd.xtext.qvtimperative/src/org/eclipse/qvtd/xtext/qvtimperative/cs2as/QVTimperativeCS2AS.java
@@ -33,7 +33,7 @@ public class QVTimperativeCS2AS extends EssentialOCLCS2AS
for (EObject eObject = csElement; eObject != null; eObject = eObject.eContainer()) {
if (eObject instanceof MappingCS) {
Element mapping = ((MappingCS)eObject).getPivot();
- ImperativeTransformation transformation = QVTimperativeUtil.getContainingTransformation(mapping);
+ ImperativeTransformation transformation = QVTimperativeUtil.basicGetContainingTransformation(mapping);
if (transformation != null) {
ImperativeTypedModel middleModel = QVTimperativeUtil.basicGetOwnedTypedModel(transformation, null);
if ((middleModel == null) || middleModel.getUsedPackage().contains(areaPackage)) {
diff --git a/tests/org.eclipse.qvtd.build.etl.tests/src/org/eclipse/qvtd/build/etl/tests/Families2Persons/Families2PersonsNormalizer.java b/tests/org.eclipse.qvtd.build.etl.tests/src/org/eclipse/qvtd/build/etl/tests/Families2Persons/Families2PersonsNormalizer.java
index 9fa780b25..91c9c1a17 100644
--- a/tests/org.eclipse.qvtd.build.etl.tests/src/org/eclipse/qvtd/build/etl/tests/Families2Persons/Families2PersonsNormalizer.java
+++ b/tests/org.eclipse.qvtd.build.etl.tests/src/org/eclipse/qvtd/build/etl/tests/Families2Persons/Families2PersonsNormalizer.java
@@ -23,20 +23,20 @@ import org.eclipse.emf.ecore.resource.Resource;
import org.eclipse.jdt.annotation.NonNull;
import org.eclipse.ocl.examples.xtext.tests.XtextTestCase.Normalizer;
import org.eclipse.ocl.pivot.utilities.ClassUtil;
-import org.eclipse.qvtd.xtext.qvtimperative.tests.ModelNormalizer;
+import org.eclipse.qvtd.xtext.qvtbase.tests.ModelNormalizer;
import build.test.families2persons.Persons.PersonsPackage;
/**
* UpperToLowerNormalizer normalises the results of the UpperToLower transformation.
- *
+ *
* Even though everything is ordered in the input/output model, the edges/incoming/outgoing lists cn be independently ordered, and only
* the edges order is preserved in the middle model.
*/
public class Families2PersonsNormalizer implements ModelNormalizer
{
public static final @NonNull Families2PersonsNormalizer INSTANCE = new Families2PersonsNormalizer();
-
+
protected static class PersonComparator implements Comparator<EObject>
{
private final @NonNull EClass femaleClass;
@@ -46,7 +46,7 @@ public class Families2PersonsNormalizer implements ModelNormalizer
this.femaleClass = femaleClass;
this.personFullName = personFullName;
}
-
+
@Override
public int compare(EObject o1, EObject o2) {
if (femaleClass.isInstance(o1)) {
@@ -66,7 +66,7 @@ public class Families2PersonsNormalizer implements ModelNormalizer
}
@Override
- public @NonNull List<Normalizer> normalize(@NonNull Resource resource) {
+ public @NonNull List<@NonNull Normalizer> normalize(@NonNull Resource resource) {
EObject eRoot = resource.getContents().get(0);
EPackage ePackage = eRoot.eClass().getEPackage();
EClass femaleClass = (EClass) ePackage.getEClassifier(PersonsPackage.Literals.FEMALE.getName());
@@ -79,7 +79,7 @@ public class Families2PersonsNormalizer implements ModelNormalizer
assert personFullName != null;
PersonComparator personComparator = new PersonComparator(femaleClass, personFullName);
ECollections.sort(resource.getContents(), personComparator);
- List<Normalizer> normalizers = new ArrayList<Normalizer>();
+ List<@NonNull Normalizer> normalizers = new ArrayList<>();
return normalizers;
}
} \ No newline at end of file
diff --git a/tests/org.eclipse.qvtd.build.etl.tests/src/org/eclipse/qvtd/build/etl/tests/QVTdMtcTests.java b/tests/org.eclipse.qvtd.build.etl.tests/src/org/eclipse/qvtd/build/etl/tests/QVTdMtcTests.java
index d99b4f411..ced8202b5 100644
--- a/tests/org.eclipse.qvtd.build.etl.tests/src/org/eclipse/qvtd/build/etl/tests/QVTdMtcTests.java
+++ b/tests/org.eclipse.qvtd.build.etl.tests/src/org/eclipse/qvtd/build/etl/tests/QVTdMtcTests.java
@@ -62,9 +62,9 @@ import org.eclipse.qvtd.pivot.qvtimperative.evaluation.QVTiTransformationExecuto
import org.eclipse.qvtd.pivot.qvtimperative.utilities.QVTimperativeUtil;
import org.eclipse.qvtd.runtime.evaluation.Transformer;
import org.eclipse.qvtd.xtext.qvtbase.tests.LoadTestCase;
+import org.eclipse.qvtd.xtext.qvtbase.tests.ModelNormalizer;
import org.eclipse.qvtd.xtext.qvtbase.tests.utilities.TestsXMLUtil;
import org.eclipse.qvtd.xtext.qvtcore.QVTcoreStandaloneSetup;
-import org.eclipse.qvtd.xtext.qvtimperative.tests.ModelNormalizer;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
diff --git a/tests/org.eclipse.qvtd.build.etl.tests/src/org/eclipse/qvtd/build/etl/tests/UpperToLower/UpperToLowerNormalizer.java b/tests/org.eclipse.qvtd.build.etl.tests/src/org/eclipse/qvtd/build/etl/tests/UpperToLower/UpperToLowerNormalizer.java
index 386e7641d..e56744dda 100644
--- a/tests/org.eclipse.qvtd.build.etl.tests/src/org/eclipse/qvtd/build/etl/tests/UpperToLower/UpperToLowerNormalizer.java
+++ b/tests/org.eclipse.qvtd.build.etl.tests/src/org/eclipse/qvtd/build/etl/tests/UpperToLower/UpperToLowerNormalizer.java
@@ -26,20 +26,20 @@ import org.eclipse.emf.ecore.resource.Resource;
import org.eclipse.jdt.annotation.NonNull;
import org.eclipse.ocl.examples.xtext.tests.XtextTestCase.Normalizer;
import org.eclipse.ocl.pivot.utilities.ClassUtil;
-import org.eclipse.qvtd.xtext.qvtimperative.tests.ModelNormalizer;
+import org.eclipse.qvtd.xtext.qvtbase.tests.ModelNormalizer;
import build.upper2lower.simplegraph.SimplegraphPackage;
/**
* UpperToLowerNormalizer normalises the results of the UpperToLower transformation.
- *
+ *
* Even though everything is ordered in the input/output model, the edges/incoming/outgoing lists cn be independently ordered, and only
* the edges order is preserved in the middle model.
*/
public class UpperToLowerNormalizer implements ModelNormalizer
{
public static final @NonNull UpperToLowerNormalizer INSTANCE = new UpperToLowerNormalizer();
-
+
protected static class ElementComparator implements Comparator<EObject>
{
private final @NonNull EClass edgeClass;
@@ -53,7 +53,7 @@ public class UpperToLowerNormalizer implements ModelNormalizer
this.edgeTarget = edgeTarget;
this.nodeLabel = nodeLabel;
}
-
+
@Override
public int compare(EObject o1, EObject o2) {
String n1;
@@ -104,7 +104,7 @@ public class UpperToLowerNormalizer implements ModelNormalizer
ECollections.sort(elements, elementComparator);
}
}
-
+
protected class NodeNormalizer implements Normalizer
{
protected final @NonNull EObject node;
@@ -134,7 +134,7 @@ public class UpperToLowerNormalizer implements ModelNormalizer
}
@Override
- public @NonNull List<Normalizer> normalize(@NonNull Resource resource) {
+ public @NonNull List<@NonNull Normalizer> normalize(@NonNull Resource resource) {
EObject eRoot = resource.getContents().get(0);
EPackage ePackage = eRoot.eClass().getEPackage();
EClass graphClass = (EClass) ePackage.getEClassifier(SimplegraphPackage.Literals.GRAPH.getName());
@@ -158,7 +158,7 @@ public class UpperToLowerNormalizer implements ModelNormalizer
EReference edgeTarget = (EReference) edgeClass.getEStructuralFeature(SimplegraphPackage.Literals.EDGE__TARGET.getName());
assert edgeTarget != null;
ElementComparator elementComparator = new ElementComparator(edgeClass, edgeSource, edgeTarget, nodeLabel);
- List<Normalizer> normalizers = new ArrayList<Normalizer>();
+ List<@NonNull Normalizer> normalizers = new ArrayList<>();
for (TreeIterator<EObject> tit = resource.getAllContents(); tit.hasNext(); ) {
EObject eObject = tit.next();
EClass eClass = eObject.eClass();
diff --git a/tests/org.eclipse.qvtd.xtext.qvtbase.tests/META-INF/MANIFEST.MF b/tests/org.eclipse.qvtd.xtext.qvtbase.tests/META-INF/MANIFEST.MF
index f833db39c..dfcf5ff83 100644
--- a/tests/org.eclipse.qvtd.xtext.qvtbase.tests/META-INF/MANIFEST.MF
+++ b/tests/org.eclipse.qvtd.xtext.qvtbase.tests/META-INF/MANIFEST.MF
@@ -12,7 +12,8 @@ Require-Bundle: org.junit;visibility:=reexport,
org.eclipse.uml2.uml.resources;visibility:=reexport,
org.eclipse.ocl.xtext.oclstdlib;bundle-version="[1.2.0,1.4.0)",
org.eclipse.ocl.examples.xtext.tests;bundle-version="[3.7.0,3.9.0)";visibility:=reexport,
- org.eclipse.qvtd.pivot.qvtbase;bundle-version="[0.14.0,1.0.0)"
+ org.eclipse.qvtd.compiler;bundle-version="[0.14.0,1.0.0)";visibility:=reexport,
+ org.eclipse.qvtd.xtext.qvtimperative;bundle-version="[0.14.0,1.0.0)"
Bundle-Vendor: %providerName
Bundle-Localization: plugin
Export-Package: org.eclipse.qvtd.xtext.qvtbase.tests,
diff --git a/tests/org.eclipse.qvtd.xtext.qvtbase.tests/src/org/eclipse/qvtd/xtext/qvtbase/tests/AbstractTestQVT.java b/tests/org.eclipse.qvtd.xtext.qvtbase.tests/src/org/eclipse/qvtd/xtext/qvtbase/tests/AbstractTestQVT.java
new file mode 100644
index 000000000..b21318623
--- /dev/null
+++ b/tests/org.eclipse.qvtd.xtext.qvtbase.tests/src/org/eclipse/qvtd/xtext/qvtbase/tests/AbstractTestQVT.java
@@ -0,0 +1,309 @@
+/*******************************************************************************
+ * Copyright (c) 2012, 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.qvtd.xtext.qvtbase.tests;
+
+import java.io.File;
+import java.io.IOException;
+import java.lang.reflect.Field;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Map;
+import java.util.Set;
+
+import org.eclipse.emf.codegen.ecore.genmodel.GenModel;
+import org.eclipse.emf.codegen.ecore.genmodel.GenModelPackage;
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.emf.ecore.resource.ResourceSet;
+import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;
+import org.eclipse.jdt.annotation.NonNull;
+import org.eclipse.jdt.annotation.Nullable;
+import org.eclipse.ocl.examples.codegen.dynamic.OCL2JavaFileObject;
+import org.eclipse.ocl.pivot.PivotTables;
+import org.eclipse.ocl.pivot.internal.manager.MetamodelManagerInternal;
+import org.eclipse.ocl.pivot.messages.StatusCodes;
+import org.eclipse.ocl.pivot.resource.ASResource;
+import org.eclipse.ocl.pivot.resource.ProjectManager;
+import org.eclipse.ocl.pivot.utilities.ClassUtil;
+import org.eclipse.ocl.pivot.utilities.OCL;
+import org.eclipse.ocl.pivot.utilities.PivotUtil;
+import org.eclipse.qvtd.codegen.qvti.QVTiCodeGenOptions;
+import org.eclipse.qvtd.codegen.qvti.java.QVTiCodeGenerator;
+import org.eclipse.qvtd.compiler.AbstractCompilerChain;
+import org.eclipse.qvtd.compiler.CompilerChain;
+import org.eclipse.qvtd.pivot.qvtbase.Transformation;
+import org.eclipse.qvtd.pivot.qvtbase.utilities.QVTbase;
+import org.eclipse.qvtd.pivot.qvtimperative.ImperativeTransformation;
+import org.eclipse.qvtd.pivot.qvtimperative.evaluation.BasicQVTiExecutor;
+import org.eclipse.qvtd.pivot.qvtimperative.evaluation.QVTiEnvironmentFactory;
+import org.eclipse.qvtd.pivot.qvtimperative.evaluation.QVTiIncrementalExecutor;
+import org.eclipse.qvtd.pivot.qvtimperative.evaluation.QVTiTransformationExecutor;
+import org.eclipse.qvtd.pivot.qvtimperative.utilities.QVTimperative;
+import org.eclipse.qvtd.pivot.qvtimperative.utilities.QVTimperativeUtil;
+import org.eclipse.qvtd.runtime.evaluation.Transformer;
+import org.eclipse.qvtd.xtext.qvtbase.tests.utilities.TestsXMLUtil;
+import org.eclipse.qvtd.xtext.qvtimperativecs.QVTimperativeCSPackage;
+import org.eclipse.xtext.resource.XtextResource;
+
+import junit.framework.TestCase;
+
+public abstract class AbstractTestQVT extends QVTimperative
+{
+ protected final @NonNull URI testsBaseURI;
+ protected final @NonNull String projectName;
+ protected final @NonNull String testFolderName;
+ protected final @NonNull URI testFolderURI;
+ protected final @NonNull URI samplesBaseUri;
+ protected AbstractCompilerChain compilerChain = null;
+ protected BasicQVTiExecutor interpretedExecutor = null;
+ protected QVTiTransformationExecutor generatedExecutor = null;
+ private Set<@NonNull String> nsURIs = new HashSet<@NonNull String>();
+
+ public AbstractTestQVT(@NonNull URI testsBaseURI, @NonNull String projectName, @NonNull String testFolderName) {
+ super(new QVTiEnvironmentFactory(LoadTestCase.getProjectMap(), null));
+ this.testsBaseURI = testsBaseURI;
+ this.projectName = projectName;
+ this.testFolderName = testFolderName;
+ this.testFolderURI = testsBaseURI.appendSegment(testFolderName);
+ this.samplesBaseUri = testFolderURI.appendSegment("samples");
+ }
+
+ public void checkOutput(@NonNull Resource outputResource, @NonNull String expectedFile, @Nullable ModelNormalizer normalizer) throws IOException, InterruptedException {
+ URI referenceModelURI = samplesBaseUri.appendSegment(expectedFile);
+ Resource referenceResource = outputResource.getResourceSet().getResource(referenceModelURI, true);
+ assert referenceResource != null;
+ if (normalizer != null) {
+ normalizer.normalize(referenceResource);
+ normalizer.normalize(outputResource);
+ }
+ LoadTestCase.assertSameModel(referenceResource, outputResource);
+ }
+
+ protected abstract @NonNull AbstractCompilerChain createCompilerChain(@NonNull URI prefixURI,
+ @NonNull Map<@NonNull String, @Nullable Map<CompilerChain.@NonNull Key<Object>, @Nullable Object>> options);
+
+ public @NonNull Class<? extends Transformer> createGeneratedClass(@NonNull Transformation asTransformation, @NonNull String @NonNull... genModelFiles) throws Exception {
+ ResourceSet resourceSet = getResourceSet();
+ resourceSet.getPackageRegistry().put(GenModelPackage.eNS_URI, GenModelPackage.eINSTANCE);
+ loadGenModels(genModelFiles);
+ QVTiCodeGenerator cg = new QVTiCodeGenerator(getEnvironmentFactory(), asTransformation);
+ QVTiCodeGenOptions options = cg.getOptions();
+ options.setUseNullAnnotations(true);
+ setPackagePrefixOption(options);
+ cg.generateClassFile();
+ cg.saveSourceFile("../" + projectName + "/test-gen/");
+ File explicitClassPath = new File("../" + projectName + "/bin");
+ String qualifiedClassName = cg.getQualifiedName();
+ String javaCodeSource = cg.generateClassFile();
+ OCL2JavaFileObject.saveClass(ClassUtil.nonNullState(explicitClassPath.toString()), qualifiedClassName, javaCodeSource);
+ @SuppressWarnings("unchecked")
+ Class<? extends Transformer> txClass = (Class<? extends Transformer>) OCL2JavaFileObject.loadExplicitClass(explicitClassPath, qualifiedClassName);
+ if (txClass == null) {
+ TestCase.fail("Failed to compile transformation");
+ throw new UnsupportedOperationException();
+ }
+ return txClass;
+ }
+
+ public void createGeneratedExecutor(@NonNull Transformation asTransformation, @NonNull String @NonNull... genModelFiles) throws Exception {
+ Class<? extends Transformer> txClass = createGeneratedClass(asTransformation, genModelFiles);
+ createGeneratedExecutor(txClass);
+ }
+
+ public QVTiTransformationExecutor createGeneratedExecutor(@NonNull Class<? extends Transformer> txClass) throws Exception {
+ return generatedExecutor = new QVTiTransformationExecutor(getEnvironmentFactory(), txClass);
+ }
+
+ public @NonNull BasicQVTiExecutor createInterpretedExecutor(@NonNull ImperativeTransformation asTransformation) throws Exception {
+ interpretedExecutor = new QVTiIncrementalExecutor(getEnvironmentFactory(), asTransformation, QVTiIncrementalExecutor.Mode.LAZY);
+ return interpretedExecutor;
+ }
+
+ public @Nullable Resource createModel(@NonNull String modelName, @NonNull String modelFile) {
+ URI modelURI = samplesBaseUri.appendSegment(modelFile);
+ return interpretedExecutor.createModel(modelName, modelURI, null);
+ }
+
+ @Override
+ public synchronized void dispose() {
+ super.dispose();
+ if (interpretedExecutor != null) {
+ interpretedExecutor.dispose();
+ }
+ if (compilerChain != null) {
+ compilerChain.dispose();
+ }
+ /**
+ * Remove the eInstances from the EPackage.Registry.INSTANCE so that global registrations from the calling test
+ * do not confuse subsequent tests that may want to use dynamic models.
+ */
+ for (String nsURI : nsURIs) {
+ EPackage.Registry.INSTANCE.remove(nsURI);
+ }
+ }
+
+ protected @NonNull Class<? extends Transformer> doBuild(@NonNull String testFileName, @NonNull String outputName,
+ @NonNull Map<@NonNull String, @Nullable Map<CompilerChain.@NonNull Key<Object>, @Nullable Object>> options,
+ @NonNull String @NonNull... genModelFiles) throws Exception {
+ compilerChain = createCompilerChain(testFolderURI.appendSegment(testFileName), options);
+ ImperativeTransformation asTransformation = compilerChain.compile(outputName);
+ URI txURI = asTransformation.eResource().getURI();
+ if (txURI != null) {
+ URI inputURI = txURI;
+ URI serializedURI = txURI.trimFileExtension().appendFileExtension("serialized.qvti");
+ doSerialize(inputURI, serializedURI);
+ }
+ Class<? extends Transformer> txClass = compilerChain.generate(asTransformation, genModelFiles);
+ createGeneratedExecutor(txClass);
+ return txClass;
+ }
+
+ protected @NonNull ImperativeTransformation doCompile(@NonNull String testFileName, @NonNull String outputName,
+ @NonNull Map<@NonNull String, @Nullable Map<CompilerChain.@NonNull Key<Object>, @Nullable Object>> options) throws Exception {
+ compilerChain = createCompilerChain(testFolderURI.appendSegment(testFileName), options);
+ ImperativeTransformation transformation = compilerChain.compile(outputName);
+ URI txURI = transformation.eResource().getURI();
+ if (txURI != null) {
+ URI inputURI = txURI;
+ URI serializedURI = txURI.trimFileExtension().appendFileExtension("serialized.qvti");
+ doSerialize(inputURI, serializedURI);
+ }
+ return transformation;
+ }
+
+ protected static XtextResource doSerialize(@NonNull URI inputURI, @NonNull URI serializedURI) throws IOException {
+ ResourceSet resourceSet = new ResourceSetImpl();
+ //
+ // Load QVTiAS
+ //
+ OCL ocl = QVTbase.newInstance(OCL.NO_PROJECTS);
+ ocl.getEnvironmentFactory().setSeverity(PivotTables.STR_Variable_c_c_CompatibleInitialiserType, StatusCodes.Severity.IGNORE);
+ try {
+ ASResource asResource = LoadTestCase.loadQVTiAS(ocl, inputURI);
+ LoadTestCase.assertNoResourceErrors("Normalisation failed", asResource);
+ LoadTestCase.assertNoUnresolvedProxies("Normalisation invalid", asResource);
+ LoadTestCase.assertNoValidationErrors("Normalisation invalid", asResource);
+ //
+ // Pivot to CS
+ //
+ XtextResource xtextResource = LoadTestCase.pivot2cs(ocl, resourceSet, asResource, serializedURI, QVTimperativeCSPackage.eCONTENT_TYPE);
+ resourceSet.getResources().clear();
+
+ QVTimperative qvti = QVTimperative.newInstance(ProjectManager.NO_PROJECTS, null);
+ try {
+ Resource asResource2 = QVTimperativeUtil.loadTransformation(qvti.getEnvironmentFactory(), serializedURI, false).eResource();
+ LoadTestCase.assertNoResourceErrors("Load failed", asResource2);
+ LoadTestCase.assertNoUnresolvedProxies("Load invalid", asResource2);
+ LoadTestCase.assertNoValidationErrors("Load invalid", asResource2);
+ }
+ finally {
+ qvti.dispose();
+ qvti = null;
+ }
+ return xtextResource;
+ }
+ finally {
+ ocl.dispose();
+ ocl = null;
+ }
+ }
+
+ public Transformer executeTransformation() throws Exception {
+ if (interpretedExecutor != null) {
+ interpretedExecutor.execute();
+ interpretedExecutor.saveModels(TestsXMLUtil.defaultSavingOptions);
+ // interpretedExecutor.saveModels(TestsXMLUtil.defaultSavingOptions);
+ return null;
+ }
+ else {
+ Transformer transformer = generatedExecutor.getTransformer();
+ transformer.run();
+ return transformer;
+ }
+ }
+
+ @Override
+ public @NonNull QVTiEnvironmentFactory getEnvironmentFactory() {
+ return super.getEnvironmentFactory();
+ }
+
+ public @NonNull Collection<@NonNull ? extends Object> getRootObjects(@NonNull String modelName) {
+ if (interpretedExecutor != null) {
+ return interpretedExecutor.getRootObjects(modelName);
+ }
+ else {
+ return generatedExecutor.getTransformer().getRootObjects(modelName);
+ }
+ }
+
+ public @NonNull Map<Object, Object> getSaveOptions() {
+ Map<Object, Object> saveOptions = new HashMap<Object, Object>(TestsXMLUtil.defaultSavingOptions);
+ saveOptions.put(ASResource.OPTION_NORMALIZE_CONTENTS, Boolean.TRUE);
+ return saveOptions;
+ }
+
+ protected void loadGenModel(@NonNull URI genModelURI) {
+ ResourceSet resourceSet = getResourceSet();
+ MetamodelManagerInternal metamodelManager = getMetamodelManager();
+ Resource csGenResource = resourceSet.getResource(genModelURI, true);
+ for (EObject eObject : csGenResource.getContents()) {
+ if (eObject instanceof GenModel) {
+ GenModel genModel = (GenModel)eObject;
+ genModel.reconcile();
+ metamodelManager.addGenModel(genModel);
+ }
+ }
+ }
+
+ /**
+ * Explicitly install the eInstances that would normally make it into the ProjectMap from extension point registrations.
+ * Test models are not registered via extension point so we have to do this manually.
+ */
+ public void installEPackages(EPackage... eInstances) {
+ ResourceSetImpl resourceSet = (ResourceSetImpl) getResourceSet();
+ for (EPackage eInstance : eInstances) {
+ String nsURI = eInstance.getNsURI();
+ if (nsURI != null) {
+ nsURIs.add(nsURI);
+ }
+ resourceSet.getURIResourceMap().put(testFolderURI.appendSegment(eInstance.getName()+".ecore"), eInstance.eResource());
+ }
+ }
+
+ public @Nullable Resource loadInput(@NonNull String modelName, @NonNull String modelFile) {
+ URI modelURI = samplesBaseUri.appendSegment(modelFile);
+ if (interpretedExecutor != null) {
+ return interpretedExecutor.loadModel(modelName, modelURI);
+ }
+ else {
+ // Resource inputResource = getResourceSet().getResource(modelURI, true);
+ ResourceSet resourceSet = environmentFactory.getMetamodelManager().getASResourceSet(); // FIXME get package registrations in exteranl RespurcSet
+ PivotUtil.initializeLoadOptionsToSupportSelfReferences(resourceSet);
+ Resource inputResource = resourceSet.getResource(modelURI, true);
+ generatedExecutor.getTransformer().addRootObjects(modelName, ClassUtil.nonNullState(inputResource.getContents()));
+ return inputResource;
+ }
+ }
+
+ protected abstract void loadGenModels(@NonNull String @NonNull... genModelFiles);
+
+ public void removeRegisteredPackage(@NonNull String ePackageClassName) throws NoSuchFieldException, IllegalAccessException, ClassNotFoundException {
+ Class<?> ePackageClass = Class.forName(ePackageClassName);
+ Field eNsURIField = ePackageClass.getField("eNS_URI");
+ String nsURI = String.valueOf(eNsURIField.get(null));
+ EPackage.Registry.INSTANCE.remove(nsURI);
+ }
+
+ protected void setPackagePrefixOption(@NonNull QVTiCodeGenOptions options) {}
+} \ No newline at end of file
diff --git a/tests/org.eclipse.qvtd.xtext.qvtbase.tests/src/org/eclipse/qvtd/xtext/qvtbase/tests/LoadTestCase.java b/tests/org.eclipse.qvtd.xtext.qvtbase.tests/src/org/eclipse/qvtd/xtext/qvtbase/tests/LoadTestCase.java
index 57f875579..1b8e9d8db 100644
--- a/tests/org.eclipse.qvtd.xtext.qvtbase.tests/src/org/eclipse/qvtd/xtext/qvtbase/tests/LoadTestCase.java
+++ b/tests/org.eclipse.qvtd.xtext.qvtbase.tests/src/org/eclipse/qvtd/xtext/qvtbase/tests/LoadTestCase.java
@@ -22,16 +22,61 @@ import org.eclipse.jdt.annotation.NonNull;
import org.eclipse.jdt.annotation.Nullable;
import org.eclipse.ocl.pivot.internal.StandardLibraryImpl;
import org.eclipse.ocl.pivot.internal.library.StandardLibraryContribution;
+import org.eclipse.ocl.pivot.resource.ASResource;
+import org.eclipse.ocl.pivot.resource.CSResource;
+import org.eclipse.ocl.pivot.utilities.ClassUtil;
import org.eclipse.ocl.pivot.utilities.OCL;
+import org.eclipse.ocl.pivot.utilities.PivotConstants;
import org.eclipse.ocl.xtext.base.utilities.BaseCSResource;
import org.eclipse.qvtd.pivot.qvtbase.utilities.QVTbase;
import org.eclipse.qvtd.xtext.qvtbase.tests.utilities.TestsXMLUtil;
+import org.eclipse.xtext.resource.XtextResource;
/**
* Tests that load a model and verify that there are no unresolved proxies as a result.
*/
public class LoadTestCase extends XtextTestCase
{
+ protected static @NonNull ASResource loadQVTiAS(@NonNull OCL ocl, @NonNull URI inputURI) {
+ Resource asResource = ocl.getMetamodelManager().getASResourceSet().getResource(inputURI, true);
+ assert asResource != null;
+ // List<String> conversionErrors = new ArrayList<String>();
+ // RootPackageCS documentCS = Ecore2OCLinEcore.importFromEcore(resourceSet, null, ecoreResource);
+ // Resource eResource = documentCS.eResource();
+ assertNoResourceErrors("Load failed", asResource);
+ // Resource xtextResource = resourceSet.createResource(outputURI, OCLinEcoreCSTPackage.eCONTENT_TYPE);
+ // XtextResource xtextResource = (XtextResource) resourceSet.createResource(outputURI);
+ // xtextResource.getContents().add(documentCS);
+ return (ASResource) asResource;
+ }
+
+ // FIXME move following clones to a Util class
+ protected static @NonNull XtextResource pivot2cs(@NonNull OCL ocl, @NonNull ResourceSet resourceSet, @NonNull ASResource asResource, @NonNull URI outputURI, /*@NonNull*/ String csContentType) throws IOException {
+ XtextResource xtextResource = ClassUtil.nonNullState((XtextResource) resourceSet.createResource(outputURI, csContentType));
+ ocl.as2cs(asResource, (CSResource) xtextResource);
+ assertNoResourceErrors("Conversion failed", xtextResource);
+ //
+ // CS save
+ //
+ URI savedURI = ClassUtil.nonNullState(asResource.getURI());
+ asResource.setURI(outputURI.trimFileExtension().trimFileExtension().appendFileExtension(PivotConstants.OCL_AS_FILE_EXTENSION));
+ asResource.save(TestsXMLUtil.defaultSavingOptions);
+ asResource.setURI(savedURI);
+ assertNoDiagnosticErrors("Concrete Syntax validation failed", xtextResource);
+ try {
+ xtextResource.save(TestsXMLUtil.defaultSavingOptions);
+ }
+ catch (Exception e) {
+ e.printStackTrace();
+ URI xmiURI = outputURI.appendFileExtension(".xmi");
+ Resource xmiResource = resourceSet.createResource(xmiURI);
+ xmiResource.getContents().addAll(ClassUtil.nullFree(xtextResource.getContents()));
+ xmiResource.save(TestsXMLUtil.defaultSavingOptions);
+ fail(e.toString());
+ }
+ return xtextResource;
+ }
+
public void doLoad_Concrete(@NonNull String inputName, @NonNull String @Nullable [] messages) throws IOException {
OCL ocl = QVTbase.newInstance(getProjectMap(), null);
// OCL ocl = OCL.newInstance(getProjectMap());
diff --git a/tests/org.eclipse.qvtd.xtext.qvtimperative.tests/src/org/eclipse/qvtd/xtext/qvtimperative/tests/ModelNormalizer.java b/tests/org.eclipse.qvtd.xtext.qvtbase.tests/src/org/eclipse/qvtd/xtext/qvtbase/tests/ModelNormalizer.java
index af51cf8b3..6eb5bce21 100644
--- a/tests/org.eclipse.qvtd.xtext.qvtimperative.tests/src/org/eclipse/qvtd/xtext/qvtimperative/tests/ModelNormalizer.java
+++ b/tests/org.eclipse.qvtd.xtext.qvtbase.tests/src/org/eclipse/qvtd/xtext/qvtbase/tests/ModelNormalizer.java
@@ -8,7 +8,7 @@
* Contributors:
* E.D.Willink - initial API and implementation
*******************************************************************************/
-package org.eclipse.qvtd.xtext.qvtimperative.tests;
+package org.eclipse.qvtd.xtext.qvtbase.tests;
import java.util.List;
@@ -17,5 +17,5 @@ import org.eclipse.jdt.annotation.NonNull;
import org.eclipse.ocl.examples.xtext.tests.XtextTestCase.Normalizer;
public interface ModelNormalizer {
- @NonNull List<Normalizer> normalize(@NonNull Resource resource);
+ @NonNull List<@NonNull Normalizer> normalize(@NonNull Resource resource);
}
diff --git a/tests/org.eclipse.qvtd.xtext.qvtcore.tests/src/org/eclipse/qvtd/xtext/qvtcore/tests/QVTcCompilerTests.java b/tests/org.eclipse.qvtd.xtext.qvtcore.tests/src/org/eclipse/qvtd/xtext/qvtcore/tests/QVTcCompilerTests.java
index fb5709dfe..bc83ef11b 100644
--- a/tests/org.eclipse.qvtd.xtext.qvtcore.tests/src/org/eclipse/qvtd/xtext/qvtcore/tests/QVTcCompilerTests.java
+++ b/tests/org.eclipse.qvtd.xtext.qvtcore.tests/src/org/eclipse/qvtd/xtext/qvtcore/tests/QVTcCompilerTests.java
@@ -10,30 +10,17 @@
*******************************************************************************/
package org.eclipse.qvtd.xtext.qvtcore.tests;
-import java.io.File;
import java.io.IOException;
-import java.util.Collection;
import java.util.HashMap;
-import java.util.HashSet;
import java.util.Map;
-import java.util.Set;
-
-import org.eclipse.emf.codegen.ecore.genmodel.GenModel;
-import org.eclipse.emf.codegen.ecore.genmodel.GenModelPackage;
import org.eclipse.emf.common.util.URI;
-import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.EPackage;
import org.eclipse.emf.ecore.resource.Resource;
import org.eclipse.emf.ecore.resource.ResourceSet;
import org.eclipse.jdt.annotation.NonNull;
import org.eclipse.jdt.annotation.Nullable;
-import org.eclipse.ocl.examples.codegen.dynamic.OCL2JavaFileObject;
-import org.eclipse.ocl.pivot.internal.manager.MetamodelManagerInternal;
import org.eclipse.ocl.pivot.model.OCLstdlib;
-import org.eclipse.ocl.pivot.utilities.ClassUtil;
import org.eclipse.ocl.xtext.base.services.BaseLinkingService;
-import org.eclipse.qvtd.codegen.qvti.QVTiCodeGenOptions;
-import org.eclipse.qvtd.codegen.qvti.java.QVTiCodeGenerator;
import org.eclipse.qvtd.compiler.CompilerChain;
import org.eclipse.qvtd.compiler.QVTcCompilerChain;
import org.eclipse.qvtd.compiler.internal.qvtp2qvts.BasicMappingRegion;
@@ -47,14 +34,12 @@ import org.eclipse.qvtd.compiler.internal.qvts2qvts.merger.LateConsumerMerger;
import org.eclipse.qvtd.compiler.internal.qvts2qvts.splitter.Splitter;
import org.eclipse.qvtd.pivot.qvtbase.Transformation;
import org.eclipse.qvtd.pivot.qvtimperative.ImperativeTransformation;
-import org.eclipse.qvtd.pivot.qvtimperative.evaluation.BasicQVTiExecutor;
import org.eclipse.qvtd.pivot.qvtimperative.evaluation.QVTiEnvironmentFactory;
-import org.eclipse.qvtd.pivot.qvtimperative.evaluation.QVTiIncrementalExecutor;
-import org.eclipse.qvtd.pivot.qvtimperative.evaluation.QVTiTransformationExecutor;
-import org.eclipse.qvtd.pivot.qvtimperative.utilities.QVTimperative;
import org.eclipse.qvtd.pivot.qvtimperative.utilities.QVTimperativeUtil;
import org.eclipse.qvtd.runtime.evaluation.Transformer;
+import org.eclipse.qvtd.xtext.qvtbase.tests.AbstractTestQVT;
import org.eclipse.qvtd.xtext.qvtbase.tests.LoadTestCase;
+import org.eclipse.qvtd.xtext.qvtbase.tests.ModelNormalizer;
import org.eclipse.qvtd.xtext.qvtbase.tests.utilities.TestsXMLUtil;
import org.eclipse.qvtd.xtext.qvtcore.tests.families2persons.Families2PersonsNormalizer;
import org.eclipse.qvtd.xtext.qvtcore.tests.families2persons.Families.FamiliesPackage;
@@ -72,24 +57,22 @@ import org.eclipse.qvtd.xtext.qvtcore.tests.uml2rdbms.simplerdbms.SimplerdbmsPac
import org.eclipse.qvtd.xtext.qvtcore.tests.uml2rdbms.simpleuml.SimpleumlPackage;
import org.eclipse.qvtd.xtext.qvtcore.tests.uml2rdbms.simpleuml2rdbms.Simpleuml2rdbmsPackage;
import org.eclipse.qvtd.xtext.qvtcore.tests.upper2lower.Upper2LowerNormalizer;
-import org.eclipse.qvtd.xtext.qvtimperative.tests.ModelNormalizer;
import org.eclipse.qvtd.xtext.qvtimperative.tests.QVTiTestUtil;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
-import junit.framework.TestCase;
-
/**
* Tests that QVTc files can be compiled and executed.
*/
public class QVTcCompilerTests extends LoadTestCase
{
+ private static final @NonNull String PROJECT_NAME = "org.eclipse.qvtd.xtext.qvtcore.tests";
protected static final @NonNull URI TESTS_BASE_URI = URI.createPlatformResourceURI("/org.eclipse.qvtd.xtext.qvtcore.tests/bin/org/eclipse/qvtd/xtext/qvtcore/tests", true);
protected static final @NonNull URI TESTS_JAVA_SRC_URI = URI.createPlatformResourceURI("/org.eclipse.qvtd.xtext.qvtcore.tests/test-gen", true);
protected static final @NonNull URI TESTS_JAVA_BIN_URI = URI.createPlatformResourceURI("/org.eclipse.qvtd.xtext.qvtcore.tests/bin", true);
- protected static class MyQVT extends QVTimperative
+ protected static class MyQVT extends AbstractTestQVT
{
protected class InstrumentedCompilerChain extends QVTcCompilerChain
{
@@ -112,20 +95,18 @@ public class QVTcCompilerTests extends LoadTestCase
}
}
- protected final @NonNull String testFolderName;
+ /* protected final @NonNull String testFolderName;
protected final @NonNull URI testFolderURI;
protected final @NonNull URI samplesBaseUri;
private QVTcCompilerChain compilerChain = null;
private BasicQVTiExecutor interpretedExecutor = null;
private QVTiTransformationExecutor generatedExecutor = null;
private Set<@NonNull String> nsURIs = new HashSet<@NonNull String>();
+ */
private final @NonNull Map<@NonNull Class<? extends Region>, @NonNull Integer> regionClass2count = new HashMap<>();
public MyQVT(@NonNull String testFolderName) {
- super(new QVTiEnvironmentFactory(getProjectMap(), null));
- this.testFolderName = testFolderName;
- this.testFolderURI = TESTS_BASE_URI.appendSegment(testFolderName);
- this.samplesBaseUri = testFolderURI.appendSegment("samples");
+ super(TESTS_BASE_URI, PROJECT_NAME, testFolderName);
}
public void assertRegionCount(@NonNull Class<? extends Region> regionClass, @NonNull Integer count) {
@@ -139,20 +120,26 @@ public class QVTcCompilerTests extends LoadTestCase
QVTcCompilerChain.setOption(options, CompilerChain.JAVA_STEP, CompilerChain.URI_KEY, TESTS_JAVA_SRC_URI);
QVTcCompilerChain.setOption(options, CompilerChain.JAVA_STEP, CompilerChain.JAVA_EXTRA_PREFIX_KEY, "cg");
QVTcCompilerChain.setOption(options, CompilerChain.CLASS_STEP, CompilerChain.URI_KEY, TESTS_JAVA_BIN_URI);
- compilerChain = new InstrumentedCompilerChain(getEnvironmentFactory(), testFolderURI.appendSegment(testFileName), options);
- Class<? extends Transformer> txClass = compilerChain.build(outputName, genModelFiles);
- createGeneratedExecutor(txClass);
- return txClass;
+ // compilerChain = new InstrumentedCompilerChain(getEnvironmentFactory(), testFolderURI.appendSegment(testFileName), options);
+ // Class<? extends Transformer> txClass = compilerChain.build(outputName, genModelFiles);
+ // createGeneratedExecutor(txClass);
+ // return txClass;
+ return doBuild(testFileName, outputName, options, genModelFiles);
+ // compilerChain = createCompilerChain(testFolderURI.appendSegment(testFileName), options);
+ // Class<? extends Transformer> txClass = compilerChain.build(outputName, genModelFiles);
+ // createGeneratedExecutor(txClass);
+ // return txClass;
}
public @NonNull ImperativeTransformation compileTransformation(@NonNull String testFileName, @NonNull String outputName) throws Exception {
Map<@NonNull String, @Nullable Map<CompilerChain.@NonNull Key<Object>, @Nullable Object>> options = new HashMap<@NonNull String, @Nullable Map<CompilerChain.@NonNull Key<Object>, @Nullable Object>>();
QVTcCompilerChain.setOption(options, CompilerChain.DEFAULT_STEP, CompilerChain.DEBUG_KEY, true);
QVTcCompilerChain.setOption(options, CompilerChain.DEFAULT_STEP, CompilerChain.SAVE_OPTIONS_KEY, TestsXMLUtil.defaultSavingOptions);
- compilerChain = new InstrumentedCompilerChain(getEnvironmentFactory(), testFolderURI.appendSegment(testFileName), options);
+ /* compilerChain = new InstrumentedCompilerChain(getEnvironmentFactory(), testFolderURI.appendSegment(testFileName), options);
return compilerChain.compile(outputName);
}
+ @Override
public @NonNull Class<? extends Transformer> createGeneratedClass(@NonNull Transformation asTransformation, @NonNull String @NonNull... genModelFiles) throws Exception {
ResourceSet resourceSet = getResourceSet();
resourceSet.getPackageRegistry().put(GenModelPackage.eNS_URI, GenModelPackage.eINSTANCE);
@@ -179,71 +166,37 @@ public class QVTcCompilerTests extends LoadTestCase
return txClass;
}
+ @Override
public void createGeneratedExecutor(@NonNull Transformation asTransformation, @NonNull String @NonNull... genModelFiles) throws Exception {
Class<? extends Transformer> txClass = createGeneratedClass(asTransformation, genModelFiles);
createGeneratedExecutor(txClass);
}
+ @Override
public QVTiTransformationExecutor createGeneratedExecutor(@NonNull Class<? extends Transformer> txClass) throws Exception {
return generatedExecutor = new QVTiTransformationExecutor(getEnvironmentFactory(), txClass);
}
+ @Override
public @NonNull BasicQVTiExecutor createInterpretedExecutor(@NonNull ImperativeTransformation asTransformation) throws Exception {
interpretedExecutor = new QVTiIncrementalExecutor(getEnvironmentFactory(), asTransformation, QVTiIncrementalExecutor.Mode.LAZY);
return interpretedExecutor;
}
+ @Override
public @Nullable Resource createModel(@NonNull String modelName, @NonNull String modelFile) {
URI modelURI = samplesBaseUri.appendSegment(modelFile);
return interpretedExecutor.createModel(modelName, modelURI, null);
+ } */
+ return doCompile(testFileName, outputName, options);
+ // compilerChain = createCompilerChain(testFolderURI.appendSegment(testFileName), options);
+ // return compilerChain.compile(outputName);
}
@Override
- public synchronized void dispose() {
- super.dispose();
- if (interpretedExecutor != null) {
- interpretedExecutor.dispose();
- }
- if (compilerChain != null) {
- compilerChain.dispose();
- }
- /**
- * Remove the eInstances from the EPackage.Registry.INSTANCE so that global registrations from the calling test
- * do not confuse subsequent tests that may want to use dynamic models.
- */
- for (String nsURI : nsURIs) {
- EPackage.Registry.INSTANCE.remove(nsURI);
- }
- }
-
- public void executeTransformation() throws Exception {
- if (interpretedExecutor != null) {
- interpretedExecutor.execute();
- interpretedExecutor.saveContents();
- // interpretedExecutor.saveModels(TestsXMLUtil.defaultSavingOptions);
- }
- else {
- Transformer transformer = generatedExecutor.getTransformer();
- transformer.run();
- }
- }
-
- @Override
- public @NonNull QVTiEnvironmentFactory getEnvironmentFactory() {
- return super.getEnvironmentFactory();
- }
-
- public @NonNull Collection<@NonNull ? extends Object> getRootObjects(@NonNull String modelName) {
- if (interpretedExecutor != null) {
- return interpretedExecutor.getRootObjects(modelName);
- }
- else {
- return generatedExecutor.getTransformer().getRootObjects(modelName);
- }
- }
-
- public @NonNull Map<Object, Object> getSaveOptions() {
- return TestsXMLUtil.defaultSavingOptions;
+ protected @NonNull QVTcCompilerChain createCompilerChain(@NonNull URI prefixURI,
+ @NonNull Map<@NonNull String, @Nullable Map<CompilerChain.@NonNull Key<Object>, @Nullable Object>> options) {
+ return new InstrumentedCompilerChain(getEnvironmentFactory(), prefixURI, options);
}
private void instrumentRegion(@NonNull Region parentRegion) {
@@ -260,28 +213,11 @@ public class QVTcCompilerTests extends LoadTestCase
rSet.getPackageRegistry().put(fileURI.toString(), ePackage);
}
- private void loadGenModel(@NonNull URI genModelURI) {
- ResourceSet resourceSet = getResourceSet();
- MetamodelManagerInternal metamodelManager = getMetamodelManager();
- Resource csGenResource = resourceSet.getResource(genModelURI, true);
- for (EObject eObject : csGenResource.getContents()) {
- if (eObject instanceof GenModel) {
- GenModel genModel = (GenModel)eObject;
- genModel.reconcile();
- metamodelManager.addGenModel(genModel);
- }
- }
- }
-
- public @Nullable Resource loadInput(@NonNull String modelName, @NonNull String modelFile) {
- URI modelURI = samplesBaseUri.appendSegment(modelFile);
- if (interpretedExecutor != null) {
- return interpretedExecutor.loadModel(modelName, modelURI);
- }
- else {
- Resource inputResource = getResourceSet().getResource(modelURI, true);
- generatedExecutor.getTransformer().addRootObjects(modelName, ClassUtil.nullFree(inputResource.getContents()));
- return inputResource;
+ @Override
+ protected void loadGenModels(@NonNull String @NonNull... genModelFiles) {
+ for (String genModelFile : genModelFiles) {
+ URI genModelURI = testFolderURI.appendSegment(genModelFile);
+ loadGenModel(genModelURI);
}
}
diff --git a/tests/org.eclipse.qvtd.xtext.qvtcore.tests/src/org/eclipse/qvtd/xtext/qvtcore/tests/QVTcSerializeTests.java b/tests/org.eclipse.qvtd.xtext.qvtcore.tests/src/org/eclipse/qvtd/xtext/qvtcore/tests/QVTcSerializeTests.java
index 95408c6f5..60a2ca58c 100644
--- a/tests/org.eclipse.qvtd.xtext.qvtcore.tests/src/org/eclipse/qvtd/xtext/qvtcore/tests/QVTcSerializeTests.java
+++ b/tests/org.eclipse.qvtd.xtext.qvtcore.tests/src/org/eclipse/qvtd/xtext/qvtcore/tests/QVTcSerializeTests.java
@@ -10,7 +10,6 @@
*******************************************************************************/
package org.eclipse.qvtd.xtext.qvtcore.tests;
-import java.io.IOException;
import java.util.Map;
import org.eclipse.emf.common.util.URI;
@@ -21,10 +20,6 @@ import org.eclipse.jdt.annotation.NonNull;
import org.eclipse.jdt.annotation.Nullable;
import org.eclipse.ocl.pivot.Model;
import org.eclipse.ocl.pivot.resource.ASResource;
-import org.eclipse.ocl.pivot.resource.CSResource;
-import org.eclipse.ocl.pivot.utilities.ClassUtil;
-import org.eclipse.ocl.pivot.utilities.OCL;
-import org.eclipse.ocl.pivot.utilities.PivotConstants;
import org.eclipse.ocl.xtext.base.services.BaseLinkingService;
import org.eclipse.qvtd.pivot.qvtcore.utilities.QVTcore;
import org.eclipse.qvtd.xtext.qvtbase.tests.LoadTestCase;
@@ -67,46 +62,6 @@ public class QVTcSerializeTests extends LoadTestCase
ocl2.dispose();
}
- protected @NonNull ASResource loadQVTiAS(@NonNull OCL ocl, @NonNull URI inputURI) {
- Resource asResource = ocl.getMetamodelManager().getASResourceSet().getResource(inputURI, true);
- assert asResource != null;
- // List<String> conversionErrors = new ArrayList<String>();
- // RootPackageCS documentCS = Ecore2OCLinEcore.importFromEcore(resourceSet, null, ecoreResource);
- // Resource eResource = documentCS.eResource();
- assertNoResourceErrors("Load failed", asResource);
- // Resource xtextResource = resourceSet.createResource(outputURI, OCLinEcoreCSTPackage.eCONTENT_TYPE);
- // XtextResource xtextResource = (XtextResource) resourceSet.createResource(outputURI);
- // xtextResource.getContents().add(documentCS);
- return (ASResource) asResource;
- }
-
- public static @NonNull XtextResource pivot2cs(@NonNull OCL ocl, @NonNull ResourceSet resourceSet, @NonNull ASResource asResource, @NonNull URI outputURI) throws IOException {
- XtextResource xtextResource = ClassUtil.nonNullState((XtextResource) resourceSet.createResource(outputURI, QVTcoreCSPackage.eCONTENT_TYPE));
- ocl.as2cs(asResource, (CSResource) xtextResource);
- assertNoResourceErrors("Conversion failed", xtextResource);
- //
- // CS save
- //
- URI savedURI = ClassUtil.nonNullState(asResource.getURI());
- asResource.setURI(outputURI.trimFileExtension().trimFileExtension().appendFileExtension(PivotConstants.OCL_AS_FILE_EXTENSION));
- asResource.save(TestsXMLUtil.defaultSavingOptions);
- asResource.setURI(savedURI);
-
- assertNoDiagnosticErrors("Concrete Syntax validation failed", xtextResource);
- try {
- xtextResource.save(TestsXMLUtil.defaultSavingOptions);
- }
- catch (Exception e) {
- e.printStackTrace();
- URI xmiURI = outputURI.appendFileExtension(".xmi");
- Resource xmiResource = resourceSet.createResource(xmiURI);
- xmiResource.getContents().addAll(xtextResource.getContents());
- xmiResource.save(TestsXMLUtil.defaultSavingOptions);
- fail(e.toString());
- }
- return xtextResource;
- }
-
public XtextResource doSerialize(@NonNull URI inputURI, @NonNull String stem, @NonNull URI referenceURI, @Nullable Map<String, Object> options, boolean doCompare, boolean validateSaved) throws Exception {
ResourceSet resourceSet = new ResourceSetImpl();
// getProjectMap().initializeResourceSet(resourceSet);
@@ -123,7 +78,7 @@ public class QVTcSerializeTests extends LoadTestCase
//
// Pivot to CS
//
- XtextResource xtextResource = pivot2cs(ocl, resourceSet, asResource, outputURI);
+ XtextResource xtextResource = pivot2cs(ocl, resourceSet, asResource, outputURI, QVTcoreCSPackage.eCONTENT_TYPE);
resourceSet.getResources().clear();
return xtextResource;
}
diff --git a/tests/org.eclipse.qvtd.xtext.qvtcore.tests/src/org/eclipse/qvtd/xtext/qvtcore/tests/families2persons/Families2PersonsNormalizer.java b/tests/org.eclipse.qvtd.xtext.qvtcore.tests/src/org/eclipse/qvtd/xtext/qvtcore/tests/families2persons/Families2PersonsNormalizer.java
index 278641d5c..35098e616 100644
--- a/tests/org.eclipse.qvtd.xtext.qvtcore.tests/src/org/eclipse/qvtd/xtext/qvtcore/tests/families2persons/Families2PersonsNormalizer.java
+++ b/tests/org.eclipse.qvtd.xtext.qvtcore.tests/src/org/eclipse/qvtd/xtext/qvtcore/tests/families2persons/Families2PersonsNormalizer.java
@@ -4,7 +4,7 @@
* 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
*/
@@ -23,19 +23,19 @@ import org.eclipse.emf.ecore.resource.Resource;
import org.eclipse.jdt.annotation.NonNull;
import org.eclipse.ocl.examples.xtext.tests.XtextTestCase.Normalizer;
import org.eclipse.ocl.pivot.utilities.ClassUtil;
+import org.eclipse.qvtd.xtext.qvtbase.tests.ModelNormalizer;
import org.eclipse.qvtd.xtext.qvtcore.tests.families2persons.Persons.PersonsPackage;
-import org.eclipse.qvtd.xtext.qvtimperative.tests.ModelNormalizer;
/**
* UpperToLowerNormalizer normalises the results of the UpperToLower transformation.
- *
+ *
* Even though everything is ordered in the input/output model, the edges/incoming/outgoing lists cn be independently ordered, and only
* the edges order is preserved in the middle model.
*/
public class Families2PersonsNormalizer implements ModelNormalizer
{
public static final @NonNull Families2PersonsNormalizer INSTANCE = new Families2PersonsNormalizer();
-
+
protected static class PersonComparator implements Comparator<EObject>
{
private final @NonNull EClass femaleClass;
@@ -45,7 +45,7 @@ public class Families2PersonsNormalizer implements ModelNormalizer
this.femaleClass = femaleClass;
this.personFullName = personFullName;
}
-
+
@Override
public int compare(EObject o1, EObject o2) {
if (femaleClass.isInstance(o1)) {
@@ -65,7 +65,7 @@ public class Families2PersonsNormalizer implements ModelNormalizer
}
@Override
- public @NonNull List<Normalizer> normalize(@NonNull Resource resource) {
+ public @NonNull List<@NonNull Normalizer> normalize(@NonNull Resource resource) {
EObject eRoot = resource.getContents().get(0);
EPackage ePackage = eRoot.eClass().getEPackage();
EClass femaleClass = (EClass) ePackage.getEClassifier(PersonsPackage.Literals.FEMALE.getName());
@@ -78,7 +78,7 @@ public class Families2PersonsNormalizer implements ModelNormalizer
assert personFullName != null;
PersonComparator personComparator = new PersonComparator(femaleClass, personFullName);
ECollections.sort(resource.getContents(), personComparator);
- List<Normalizer> normalizers = new ArrayList<Normalizer>();
+ List<@NonNull Normalizer> normalizers = new ArrayList<>();
return normalizers;
}
} \ No newline at end of file
diff --git a/tests/org.eclipse.qvtd.xtext.qvtcore.tests/src/org/eclipse/qvtd/xtext/qvtcore/tests/forward2reverse/Forward2ReverseNormalizer.java b/tests/org.eclipse.qvtd.xtext.qvtcore.tests/src/org/eclipse/qvtd/xtext/qvtcore/tests/forward2reverse/Forward2ReverseNormalizer.java
index 6952d3f4b..0def977be 100644
--- a/tests/org.eclipse.qvtd.xtext.qvtcore.tests/src/org/eclipse/qvtd/xtext/qvtcore/tests/forward2reverse/Forward2ReverseNormalizer.java
+++ b/tests/org.eclipse.qvtd.xtext.qvtcore.tests/src/org/eclipse/qvtd/xtext/qvtcore/tests/forward2reverse/Forward2ReverseNormalizer.java
@@ -26,8 +26,8 @@ import org.eclipse.emf.ecore.resource.Resource;
import org.eclipse.jdt.annotation.NonNull;
import org.eclipse.ocl.examples.xtext.tests.XtextTestCase.Normalizer;
import org.eclipse.ocl.pivot.utilities.ClassUtil;
+import org.eclipse.qvtd.xtext.qvtbase.tests.ModelNormalizer;
import org.eclipse.qvtd.xtext.qvtcore.tests.list2list.doublylinkedlist.DoublylinkedlistPackage;
-import org.eclipse.qvtd.xtext.qvtimperative.tests.ModelNormalizer;
/**
* Forward2ReverseNormalizer normalises the results of the Forward2Reverse transformation.
@@ -80,8 +80,8 @@ public class Forward2ReverseNormalizer implements ModelNormalizer
}
@Override
- public @NonNull List<Normalizer> normalize(@NonNull Resource resource) {
- List<Normalizer> normalizers = new ArrayList<Normalizer>();
+ public @NonNull List<@NonNull Normalizer> normalize(@NonNull Resource resource) {
+ List<@NonNull Normalizer> normalizers = new ArrayList<>();
List<@NonNull EObject> contents = resource.getContents();
if (contents.isEmpty()) {
return normalizers;
diff --git a/tests/org.eclipse.qvtd.xtext.qvtcore.tests/src/org/eclipse/qvtd/xtext/qvtcore/tests/hsv2hsl/HSV2HSLNormalizer.java b/tests/org.eclipse.qvtd.xtext.qvtcore.tests/src/org/eclipse/qvtd/xtext/qvtcore/tests/hsv2hsl/HSV2HSLNormalizer.java
index 3b892f607..65f823dee 100644
--- a/tests/org.eclipse.qvtd.xtext.qvtcore.tests/src/org/eclipse/qvtd/xtext/qvtcore/tests/hsv2hsl/HSV2HSLNormalizer.java
+++ b/tests/org.eclipse.qvtd.xtext.qvtcore.tests/src/org/eclipse/qvtd/xtext/qvtcore/tests/hsv2hsl/HSV2HSLNormalizer.java
@@ -26,8 +26,8 @@ import org.eclipse.emf.ecore.resource.Resource;
import org.eclipse.jdt.annotation.NonNull;
import org.eclipse.ocl.examples.xtext.tests.XtextTestCase.Normalizer;
import org.eclipse.ocl.pivot.utilities.ClassUtil;
+import org.eclipse.qvtd.xtext.qvtbase.tests.ModelNormalizer;
import org.eclipse.qvtd.xtext.qvtcore.tests.hsv2hsl.HSLTree.HSLTreePackage;
-import org.eclipse.qvtd.xtext.qvtimperative.tests.ModelNormalizer;
/**
* FIXME Bug 490497 - this is a workaround for Bug 490172
@@ -55,7 +55,7 @@ public class HSV2HSLNormalizer implements ModelNormalizer
}
@Override
- public @NonNull List<Normalizer> normalize(@NonNull Resource resource) {
+ public @NonNull List<@NonNull Normalizer> normalize(@NonNull Resource resource) {
EObject eRoot = resource.getContents().get(0);
EPackage ePackage = eRoot.eClass().getEPackage();
EClass hslNodeClass = (EClass) ePackage.getEClassifier(HSLTreePackage.Literals.HSL_NODE.getName());
@@ -77,7 +77,7 @@ public class HSV2HSLNormalizer implements ModelNormalizer
EList<@NonNull EObject> children = (EList<@NonNull EObject>) hslNode.eGet(hslNodeChildren);
ECollections.sort(children, personComparator);
}
- List<Normalizer> normalizers = new ArrayList<Normalizer>();
+ List<@NonNull Normalizer> normalizers = new ArrayList<>();
return normalizers;
}
} \ No newline at end of file
diff --git a/tests/org.eclipse.qvtd.xtext.qvtcore.tests/src/org/eclipse/qvtd/xtext/qvtcore/tests/uml2rdbms/SimpleRDBMSNormalizer.java b/tests/org.eclipse.qvtd.xtext.qvtcore.tests/src/org/eclipse/qvtd/xtext/qvtcore/tests/uml2rdbms/SimpleRDBMSNormalizer.java
index 74288689c..65b90b3e4 100644
--- a/tests/org.eclipse.qvtd.xtext.qvtcore.tests/src/org/eclipse/qvtd/xtext/qvtcore/tests/uml2rdbms/SimpleRDBMSNormalizer.java
+++ b/tests/org.eclipse.qvtd.xtext.qvtcore.tests/src/org/eclipse/qvtd/xtext/qvtcore/tests/uml2rdbms/SimpleRDBMSNormalizer.java
@@ -26,12 +26,12 @@ import org.eclipse.emf.ecore.resource.Resource;
import org.eclipse.jdt.annotation.NonNull;
import org.eclipse.ocl.examples.xtext.tests.XtextTestCase.Normalizer;
import org.eclipse.ocl.pivot.utilities.ClassUtil;
-import org.eclipse.qvtd.xtext.qvtimperative.tests.ModelNormalizer;
+import org.eclipse.qvtd.xtext.qvtbase.tests.ModelNormalizer;
public class SimpleRDBMSNormalizer implements ModelNormalizer
{
public static final @NonNull SimpleRDBMSNormalizer INSTANCE = new SimpleRDBMSNormalizer();
-
+
protected static class RModelElementNameComparator implements Comparator<EObject>
{
private final @NonNull EAttribute rmodelElementName;
@@ -39,7 +39,7 @@ public class SimpleRDBMSNormalizer implements ModelNormalizer
public RModelElementNameComparator(@NonNull EAttribute rmodelElementName) {
this.rmodelElementName = rmodelElementName;
}
-
+
@Override
public int compare(EObject o1, EObject o2) {
String n1 = (String) o1.eGet(rmodelElementName);
@@ -72,7 +72,7 @@ public class SimpleRDBMSNormalizer implements ModelNormalizer
ECollections.sort(tables, rmodelElementNameComparator);
}
}
-
+
protected class TableNormalizer implements Normalizer
{
protected final @NonNull EObject table;
@@ -104,7 +104,7 @@ public class SimpleRDBMSNormalizer implements ModelNormalizer
}
@Override
- public @NonNull List<Normalizer> normalize(@NonNull Resource resource) {
+ public @NonNull List<@NonNull Normalizer> normalize(@NonNull Resource resource) {
EObject eRoot = resource.getContents().get(0);
EPackage ePackage = eRoot.eClass().getEPackage();
EClass schemaClass = (EClass) ePackage.getEClassifier("Schema");
@@ -124,7 +124,7 @@ public class SimpleRDBMSNormalizer implements ModelNormalizer
EReference tableForeignKeys = (EReference) tableClass.getEStructuralFeature("foreignKeys");
assert tableForeignKeys != null;
RModelElementNameComparator rmodelElementNameComparator = new RModelElementNameComparator(rmodelElementName);
- List<Normalizer> normalizers = new ArrayList<Normalizer>();
+ List<@NonNull Normalizer> normalizers = new ArrayList<>();
for (TreeIterator<EObject> tit = resource.getAllContents(); tit.hasNext(); ) {
EObject eObject = tit.next();
EClass eClass = eObject.eClass();
diff --git a/tests/org.eclipse.qvtd.xtext.qvtcore.tests/src/org/eclipse/qvtd/xtext/qvtcore/tests/upper2lower/Upper2LowerNormalizer.java b/tests/org.eclipse.qvtd.xtext.qvtcore.tests/src/org/eclipse/qvtd/xtext/qvtcore/tests/upper2lower/Upper2LowerNormalizer.java
index 5baf1d41d..08a6076c6 100644
--- a/tests/org.eclipse.qvtd.xtext.qvtcore.tests/src/org/eclipse/qvtd/xtext/qvtcore/tests/upper2lower/Upper2LowerNormalizer.java
+++ b/tests/org.eclipse.qvtd.xtext.qvtcore.tests/src/org/eclipse/qvtd/xtext/qvtcore/tests/upper2lower/Upper2LowerNormalizer.java
@@ -4,7 +4,7 @@
* 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
*/
@@ -26,19 +26,19 @@ import org.eclipse.emf.ecore.resource.Resource;
import org.eclipse.jdt.annotation.NonNull;
import org.eclipse.ocl.examples.xtext.tests.XtextTestCase.Normalizer;
import org.eclipse.ocl.pivot.utilities.ClassUtil;
+import org.eclipse.qvtd.xtext.qvtbase.tests.ModelNormalizer;
import org.eclipse.qvtd.xtext.qvtcore.tests.upper2lower.simplegraph.SimplegraphPackage;
-import org.eclipse.qvtd.xtext.qvtimperative.tests.ModelNormalizer;
/**
* Upper2LowerNormalizer normalises the results of the UpperToLower transformation.
- *
+ *
* Even though everything is ordered in the input/output model, the edges/incoming/outgoing lists cn be independently ordered, and only
* the edges order is preserved in the middle model.
*/
public class Upper2LowerNormalizer implements ModelNormalizer
{
public static final @NonNull Upper2LowerNormalizer INSTANCE = new Upper2LowerNormalizer();
-
+
protected static class ElementComparator implements Comparator<EObject>
{
private final @NonNull EClass edgeClass;
@@ -52,7 +52,7 @@ public class Upper2LowerNormalizer implements ModelNormalizer
this.edgeTarget = edgeTarget;
this.nodeLabel = nodeLabel;
}
-
+
@Override
public int compare(EObject o1, EObject o2) {
String n1;
@@ -103,7 +103,7 @@ public class Upper2LowerNormalizer implements ModelNormalizer
ECollections.sort(elements, elementComparator);
}
}
-
+
protected class NodeNormalizer implements Normalizer
{
protected final @NonNull EObject node;
@@ -133,7 +133,7 @@ public class Upper2LowerNormalizer implements ModelNormalizer
}
@Override
- public @NonNull List<Normalizer> normalize(@NonNull Resource resource) {
+ public @NonNull List<@NonNull Normalizer> normalize(@NonNull Resource resource) {
EObject eRoot = resource.getContents().get(0);
EPackage ePackage = eRoot.eClass().getEPackage();
EClass graphClass = (EClass) ePackage.getEClassifier(SimplegraphPackage.Literals.GRAPH.getName());
@@ -157,7 +157,7 @@ public class Upper2LowerNormalizer implements ModelNormalizer
EReference edgeTarget = (EReference) edgeClass.getEStructuralFeature(SimplegraphPackage.Literals.EDGE__TARGET.getName());
assert edgeTarget != null;
ElementComparator elementComparator = new ElementComparator(edgeClass, edgeSource, edgeTarget, nodeLabel);
- List<Normalizer> normalizers = new ArrayList<Normalizer>();
+ List<@NonNull Normalizer> normalizers = new ArrayList<>();
for (TreeIterator<EObject> tit = resource.getAllContents(); tit.hasNext(); ) {
EObject eObject = tit.next();
EClass eClass = eObject.eClass();
diff --git a/tests/org.eclipse.qvtd.xtext.qvtimperative.tests/src/org/eclipse/qvtd/xtext/qvtimperative/tests/HSV2HSL/HSV2HSL.qvti b/tests/org.eclipse.qvtd.xtext.qvtimperative.tests/src/org/eclipse/qvtd/xtext/qvtimperative/tests/HSV2HSL/HSV2HSL.qvti
index 078b3cf0a..7aaae8923 100644
--- a/tests/org.eclipse.qvtd.xtext.qvtimperative.tests/src/org/eclipse/qvtd/xtext/qvtimperative/tests/HSV2HSL/HSV2HSL.qvti
+++ b/tests/org.eclipse.qvtd.xtext.qvtimperative.tests/src/org/eclipse/qvtd/xtext/qvtimperative/tests/HSV2HSL/HSV2HSL.qvti
@@ -19,8 +19,8 @@ query hsv2hsl::rgb2hsl(color : HSV2HSL::RGB) : HSLTree::HSL;
query hsv2hsl::rgb2hsv(color : HSV2HSL::RGB) : HSVTree::HSV;
map __root__ in hsv2hsl {
--- for hsvRoot : HSVTree::HSVNode in HSVTree::HSVNode.allInstances() {
- for hsvRoot : HSVTree::HSVNode in hsv.objectsOfKind(HSVTree::HSVNode) {
+ append nodes : HSVTree::HSVNode;
+ for hsvRoot : HSVTree::HSVNode in nodes {
call HSV2MiddleRoot {
hsvRoot iterates hsvRoot;
}
diff --git a/tests/org.eclipse.qvtd.xtext.qvtimperative.tests/src/org/eclipse/qvtd/xtext/qvtimperative/tests/ManualUML2RDBMS/ManualRDBMSNormalizer.java b/tests/org.eclipse.qvtd.xtext.qvtimperative.tests/src/org/eclipse/qvtd/xtext/qvtimperative/tests/ManualUML2RDBMS/ManualRDBMSNormalizer.java
index cc7ffcfb4..60bec45bd 100644
--- a/tests/org.eclipse.qvtd.xtext.qvtimperative.tests/src/org/eclipse/qvtd/xtext/qvtimperative/tests/ManualUML2RDBMS/ManualRDBMSNormalizer.java
+++ b/tests/org.eclipse.qvtd.xtext.qvtimperative.tests/src/org/eclipse/qvtd/xtext/qvtimperative/tests/ManualUML2RDBMS/ManualRDBMSNormalizer.java
@@ -28,12 +28,12 @@ import org.eclipse.emf.ecore.resource.Resource;
import org.eclipse.jdt.annotation.NonNull;
import org.eclipse.ocl.examples.xtext.tests.XtextTestCase.Normalizer;
import org.eclipse.ocl.pivot.utilities.ClassUtil;
-import org.eclipse.qvtd.xtext.qvtimperative.tests.ModelNormalizer;
+import org.eclipse.qvtd.xtext.qvtbase.tests.ModelNormalizer;
public class ManualRDBMSNormalizer implements ModelNormalizer
{
public static final @NonNull ManualRDBMSNormalizer INSTANCE = new ManualRDBMSNormalizer();
-
+
protected static class RModelElementNameComparator implements Comparator<EObject>
{
private final @NonNull EAttribute rmodelElementName;
@@ -41,7 +41,7 @@ public class ManualRDBMSNormalizer implements ModelNormalizer
public RModelElementNameComparator(@NonNull EAttribute rmodelElementName) {
this.rmodelElementName = rmodelElementName;
}
-
+
@Override
public int compare(EObject o1, EObject o2) {
String n1 = (String) o1.eGet(rmodelElementName);
@@ -74,7 +74,7 @@ public class ManualRDBMSNormalizer implements ModelNormalizer
ECollections.sort(tables, rmodelElementNameComparator);
}
}
-
+
protected class TableNormalizer implements Normalizer
{
protected final @NonNull EObject table;
@@ -101,7 +101,7 @@ public class ManualRDBMSNormalizer implements ModelNormalizer
}
@Override
- public @NonNull List<Normalizer> normalize(@NonNull Resource resource) {
+ public @NonNull List<@NonNull Normalizer> normalize(@NonNull Resource resource) {
EObject eRoot = resource.getContents().get(0);
EPackage ePackage = eRoot.eClass().getEPackage();
EClass schemaClass = (EClass) ePackage.getEClassifier(RDBMSPackage.Literals.SCHEMA.getName());
@@ -117,7 +117,7 @@ public class ManualRDBMSNormalizer implements ModelNormalizer
EAttribute rmodelElementName = (EAttribute) tableClass.getEStructuralFeature(RDBMSPackage.Literals.RMODEL_ELEMENT__NAME.getName());
assert rmodelElementName != null;
RModelElementNameComparator rmodelElementNameComparator = new RModelElementNameComparator(rmodelElementName);
- List<Normalizer> normalizers = new ArrayList<Normalizer>();
+ List<@NonNull Normalizer> normalizers = new ArrayList<>();
for (TreeIterator<EObject> tit = resource.getAllContents(); tit.hasNext(); ) {
EObject eObject = tit.next();
EClass eClass = eObject.eClass();
diff --git a/tests/org.eclipse.qvtd.xtext.qvtimperative.tests/src/org/eclipse/qvtd/xtext/qvtimperative/tests/QVTiCompilerTests.java b/tests/org.eclipse.qvtd.xtext.qvtimperative.tests/src/org/eclipse/qvtd/xtext/qvtimperative/tests/QVTiCompilerTests.java
index 6e2035345..4f5579cff 100644
--- a/tests/org.eclipse.qvtd.xtext.qvtimperative.tests/src/org/eclipse/qvtd/xtext/qvtimperative/tests/QVTiCompilerTests.java
+++ b/tests/org.eclipse.qvtd.xtext.qvtimperative.tests/src/org/eclipse/qvtd/xtext/qvtimperative/tests/QVTiCompilerTests.java
@@ -47,6 +47,7 @@ import org.eclipse.qvtd.pivot.qvtimperative.evaluation.QVTiEnvironmentFactory;
import org.eclipse.qvtd.pivot.qvtimperative.evaluation.QVTiTransformationExecutor;
import org.eclipse.qvtd.runtime.evaluation.Transformer;
import org.eclipse.qvtd.xtext.qvtbase.tests.LoadTestCase;
+import org.eclipse.qvtd.xtext.qvtbase.tests.ModelNormalizer;
import org.eclipse.qvtd.xtext.qvtbase.tests.utilities.TestsXMLUtil;
import org.eclipse.qvtd.xtext.qvtimperative.tests.ManualUML2RDBMS.ManualRDBMSNormalizer;
import org.eclipse.qvtd.xtext.qvtimperative.tests.SimpleUML2RDBMS.SimpleRDBMSNormalizer;
diff --git a/tests/org.eclipse.qvtd.xtext.qvtimperative.tests/src/org/eclipse/qvtd/xtext/qvtimperative/tests/QVTiInterpreterTests.java b/tests/org.eclipse.qvtd.xtext.qvtimperative.tests/src/org/eclipse/qvtd/xtext/qvtimperative/tests/QVTiInterpreterTests.java
index fb622af48..529dfabaa 100644
--- a/tests/org.eclipse.qvtd.xtext.qvtimperative.tests/src/org/eclipse/qvtd/xtext/qvtimperative/tests/QVTiInterpreterTests.java
+++ b/tests/org.eclipse.qvtd.xtext.qvtimperative.tests/src/org/eclipse/qvtd/xtext/qvtimperative/tests/QVTiInterpreterTests.java
@@ -51,6 +51,7 @@ import org.eclipse.qvtd.pivot.qvtimperative.evaluation.QVTiIncrementalExecutor;
import org.eclipse.qvtd.pivot.qvtimperative.utilities.QVTimperative;
import org.eclipse.qvtd.pivot.qvtimperative.utilities.QVTimperativeUtil;
import org.eclipse.qvtd.xtext.qvtbase.tests.LoadTestCase;
+import org.eclipse.qvtd.xtext.qvtbase.tests.ModelNormalizer;
import org.eclipse.qvtd.xtext.qvtbase.tests.utilities.TestsXMLUtil;
import org.eclipse.qvtd.xtext.qvtimperative.tests.ManualUML2RDBMS.ManualRDBMSNormalizer;
import org.eclipse.qvtd.xtext.qvtimperative.tests.SimpleUML2RDBMS.SimpleRDBMSNormalizer;
diff --git a/tests/org.eclipse.qvtd.xtext.qvtimperative.tests/src/org/eclipse/qvtd/xtext/qvtimperative/tests/QVTiSerializeTests.java b/tests/org.eclipse.qvtd.xtext.qvtimperative.tests/src/org/eclipse/qvtd/xtext/qvtimperative/tests/QVTiSerializeTests.java
index aa155a961..e09678eaa 100644
--- a/tests/org.eclipse.qvtd.xtext.qvtimperative.tests/src/org/eclipse/qvtd/xtext/qvtimperative/tests/QVTiSerializeTests.java
+++ b/tests/org.eclipse.qvtd.xtext.qvtimperative.tests/src/org/eclipse/qvtd/xtext/qvtimperative/tests/QVTiSerializeTests.java
@@ -10,12 +10,9 @@
*******************************************************************************/
package org.eclipse.qvtd.xtext.qvtimperative.tests;
-import java.io.IOException;
import java.util.Map;
-import org.eclipse.emf.common.util.EList;
import org.eclipse.emf.common.util.URI;
-import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.resource.Resource;
import org.eclipse.emf.ecore.resource.ResourceSet;
import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;
@@ -24,10 +21,7 @@ import org.eclipse.jdt.annotation.Nullable;
import org.eclipse.ocl.examples.xtext.tests.TestUtil;
import org.eclipse.ocl.pivot.Model;
import org.eclipse.ocl.pivot.resource.ASResource;
-import org.eclipse.ocl.pivot.resource.CSResource;
-import org.eclipse.ocl.pivot.utilities.ClassUtil;
import org.eclipse.ocl.pivot.utilities.OCL;
-import org.eclipse.ocl.pivot.utilities.PivotConstants;
import org.eclipse.ocl.xtext.base.services.BaseLinkingService;
import org.eclipse.qvtd.pivot.qvtbase.utilities.QVTbase;
import org.eclipse.qvtd.pivot.qvtimperative.utilities.QVTimperative;
@@ -70,48 +64,6 @@ public class QVTiSerializeTests extends LoadTestCase
ocl2.dispose();
}
- protected ASResource loadQVTiAS(@NonNull OCL ocl, @NonNull URI inputURI) {
- Resource asResource = ocl.getMetamodelManager().getASResourceSet().getResource(inputURI, true);
- assert asResource != null;
- // List<String> conversionErrors = new ArrayList<String>();
- // RootPackageCS documentCS = Ecore2OCLinEcore.importFromEcore(resourceSet, null, ecoreResource);
- // Resource eResource = documentCS.eResource();
- assertNoResourceErrors("Load failed", asResource);
- // Resource xtextResource = resourceSet.createResource(outputURI, OCLinEcoreCSTPackage.eCONTENT_TYPE);
- // XtextResource xtextResource = (XtextResource) resourceSet.createResource(outputURI);
- // xtextResource.getContents().add(documentCS);
- return (ASResource) asResource;
- }
-
- public static @NonNull XtextResource pivot2cs(@NonNull OCL ocl, @NonNull ResourceSet resourceSet, @NonNull ASResource asResource, @NonNull URI outputURI) throws IOException {
- XtextResource xtextResource = ClassUtil.nonNullState((XtextResource) resourceSet.createResource(outputURI, QVTimperativeCSPackage.eCONTENT_TYPE));
- ocl.as2cs(asResource, (CSResource) xtextResource);
- assertNoResourceErrors("Conversion failed", xtextResource);
- //
- // CS save
- //
- URI savedURI = ClassUtil.nonNullState(asResource.getURI());
- asResource.setURI(outputURI.trimFileExtension().trimFileExtension().appendFileExtension(PivotConstants.OCL_AS_FILE_EXTENSION));
- asResource.save(TestsXMLUtil.defaultSavingOptions);
- asResource.setURI(savedURI);
-
- assertNoDiagnosticErrors("Concrete Syntax validation failed", xtextResource);
- try {
- xtextResource.save(TestsXMLUtil.defaultSavingOptions);
- }
- catch (Exception e) {
- e.printStackTrace();
- URI xmiURI = outputURI.appendFileExtension(".xmi");
- Resource xmiResource = resourceSet.createResource(xmiURI);
- @NonNull EList<@NonNull EObject> contents = xtextResource.getContents();
- xmiResource.getContents().addAll(contents);
- xmiResource.save(TestsXMLUtil.defaultSavingOptions);
- fail(e.toString());
- }
- return xtextResource;
- }
-
- @SuppressWarnings("null")
public XtextResource doSerialize(@NonNull URI inputURI, @NonNull String stem, @NonNull URI referenceURI, @Nullable Map<String, Object> options, boolean doCompare, boolean validateSaved) throws Exception {
ResourceSet resourceSet = new ResourceSetImpl();
// getProjectMap().initializeResourceSet(resourceSet);
@@ -128,7 +80,7 @@ public class QVTiSerializeTests extends LoadTestCase
//
// Pivot to CS
//
- XtextResource xtextResource = pivot2cs(ocl, resourceSet, asResource, outputURI);
+ XtextResource xtextResource = pivot2cs(ocl, resourceSet, asResource, outputURI, QVTimperativeCSPackage.eCONTENT_TYPE);
resourceSet.getResources().clear();
return xtextResource;
}
diff --git a/tests/org.eclipse.qvtd.xtext.qvtimperative.tests/src/org/eclipse/qvtd/xtext/qvtimperative/tests/SimpleUML2RDBMS/SimpleRDBMSNormalizer.java b/tests/org.eclipse.qvtd.xtext.qvtimperative.tests/src/org/eclipse/qvtd/xtext/qvtimperative/tests/SimpleUML2RDBMS/SimpleRDBMSNormalizer.java
index 105c11e12..6ab60a2e2 100644
--- a/tests/org.eclipse.qvtd.xtext.qvtimperative.tests/src/org/eclipse/qvtd/xtext/qvtimperative/tests/SimpleUML2RDBMS/SimpleRDBMSNormalizer.java
+++ b/tests/org.eclipse.qvtd.xtext.qvtimperative.tests/src/org/eclipse/qvtd/xtext/qvtimperative/tests/SimpleUML2RDBMS/SimpleRDBMSNormalizer.java
@@ -28,12 +28,12 @@ import org.eclipse.emf.ecore.resource.Resource;
import org.eclipse.jdt.annotation.NonNull;
import org.eclipse.ocl.examples.xtext.tests.XtextTestCase.Normalizer;
import org.eclipse.ocl.pivot.utilities.ClassUtil;
-import org.eclipse.qvtd.xtext.qvtimperative.tests.ModelNormalizer;
+import org.eclipse.qvtd.xtext.qvtbase.tests.ModelNormalizer;
public class SimpleRDBMSNormalizer implements ModelNormalizer
{
public static final @NonNull SimpleRDBMSNormalizer INSTANCE = new SimpleRDBMSNormalizer();
-
+
protected static class RModelElementNameComparator implements Comparator<EObject>
{
private final @NonNull EAttribute rmodelElementName;
@@ -41,7 +41,7 @@ public class SimpleRDBMSNormalizer implements ModelNormalizer
public RModelElementNameComparator(@NonNull EAttribute rmodelElementName) {
this.rmodelElementName = rmodelElementName;
}
-
+
@Override
public int compare(EObject o1, EObject o2) {
String n1 = (String) o1.eGet(rmodelElementName);
@@ -74,7 +74,7 @@ public class SimpleRDBMSNormalizer implements ModelNormalizer
ECollections.sort(tables, rmodelElementNameComparator);
}
}
-
+
protected class TableNormalizer implements Normalizer
{
protected final @NonNull EObject table;
@@ -101,7 +101,7 @@ public class SimpleRDBMSNormalizer implements ModelNormalizer
}
@Override
- public @NonNull List<Normalizer> normalize(@NonNull Resource resource) {
+ public @NonNull List<@NonNull Normalizer> normalize(@NonNull Resource resource) {
EObject eRoot = resource.getContents().get(0);
EPackage ePackage = eRoot.eClass().getEPackage();
EClass schemaClass = (EClass) ePackage.getEClassifier(RDBMSPackage.Literals.SCHEMA.getName());
@@ -117,7 +117,7 @@ public class SimpleRDBMSNormalizer implements ModelNormalizer
EAttribute rmodelElementName = (EAttribute) tableClass.getEStructuralFeature(RDBMSPackage.Literals.RMODEL_ELEMENT__NAME.getName());
assert rmodelElementName != null;
RModelElementNameComparator rmodelElementNameComparator = new RModelElementNameComparator(rmodelElementName);
- List<Normalizer> normalizers = new ArrayList<Normalizer>();
+ List<@NonNull Normalizer> normalizers = new ArrayList<>();
for (TreeIterator<EObject> tit = resource.getAllContents(); tit.hasNext(); ) {
EObject eObject = tit.next();
EClass eClass = eObject.eClass();
diff --git a/tests/org.eclipse.qvtd.xtext.qvtrelation.tests/src/org/eclipse/qvtd/xtext/qvtrelation/tests/QVTrCompilerTests.java b/tests/org.eclipse.qvtd.xtext.qvtrelation.tests/src/org/eclipse/qvtd/xtext/qvtrelation/tests/QVTrCompilerTests.java
index ffcffbf28..a2a9eb3ab 100644
--- a/tests/org.eclipse.qvtd.xtext.qvtrelation.tests/src/org/eclipse/qvtd/xtext/qvtrelation/tests/QVTrCompilerTests.java
+++ b/tests/org.eclipse.qvtd.xtext.qvtrelation.tests/src/org/eclipse/qvtd/xtext/qvtrelation/tests/QVTrCompilerTests.java
@@ -10,39 +10,23 @@
*******************************************************************************/
package org.eclipse.qvtd.xtext.qvtrelation.tests;
-import java.io.File;
import java.io.IOException;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
-import java.util.HashSet;
import java.util.Map;
-import java.util.Set;
-import org.eclipse.emf.codegen.ecore.genmodel.GenModel;
-import org.eclipse.emf.codegen.ecore.genmodel.GenModelPackage;
import org.eclipse.emf.codegen.ecore.genmodel.GenPackage;
import org.eclipse.emf.common.util.URI;
-import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.EPackage;
import org.eclipse.emf.ecore.resource.Resource;
import org.eclipse.emf.ecore.resource.ResourceSet;
-import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;
import org.eclipse.jdt.annotation.NonNull;
import org.eclipse.jdt.annotation.Nullable;
-import org.eclipse.ocl.examples.codegen.dynamic.OCL2JavaFileObject;
-import org.eclipse.ocl.pivot.internal.manager.MetamodelManagerInternal;
import org.eclipse.ocl.pivot.model.OCLstdlib;
-import org.eclipse.ocl.pivot.resource.ASResource;
-import org.eclipse.ocl.pivot.resource.CSResource;
-import org.eclipse.ocl.pivot.resource.ProjectManager;
import org.eclipse.ocl.pivot.utilities.ClassUtil;
-import org.eclipse.ocl.pivot.utilities.OCL;
-import org.eclipse.ocl.pivot.utilities.PivotUtil;
import org.eclipse.ocl.xtext.base.services.BaseLinkingService;
-import org.eclipse.qvtd.codegen.qvti.QVTiCodeGenOptions;
-import org.eclipse.qvtd.codegen.qvti.java.QVTiCodeGenerator;
import org.eclipse.qvtd.compiler.CompilerChain;
import org.eclipse.qvtd.compiler.CompilerChain.Key;
import org.eclipse.qvtd.compiler.QVTrCompilerChain;
@@ -53,32 +37,23 @@ import org.eclipse.qvtd.compiler.internal.qvtp2qvts.Region;
import org.eclipse.qvtd.compiler.internal.qvtp2qvts.RootScheduledRegion;
import org.eclipse.qvtd.compiler.internal.qvts2qvts.merger.EarlyMerger;
import org.eclipse.qvtd.compiler.internal.qvts2qvts.merger.LateConsumerMerger;
-import org.eclipse.qvtd.pivot.qvtbase.Transformation;
-import org.eclipse.qvtd.pivot.qvtbase.utilities.QVTbase;
import org.eclipse.qvtd.pivot.qvtimperative.ImperativeTransformation;
-import org.eclipse.qvtd.pivot.qvtimperative.evaluation.BasicQVTiExecutor;
import org.eclipse.qvtd.pivot.qvtimperative.evaluation.Execution2GraphVisitor;
import org.eclipse.qvtd.pivot.qvtimperative.evaluation.QVTiEnvironmentFactory;
-import org.eclipse.qvtd.pivot.qvtimperative.evaluation.QVTiIncrementalExecutor;
-import org.eclipse.qvtd.pivot.qvtimperative.evaluation.QVTiTransformationExecutor;
-import org.eclipse.qvtd.pivot.qvtimperative.utilities.QVTimperative;
import org.eclipse.qvtd.pivot.qvtimperative.utilities.QVTimperativeUtil;
import org.eclipse.qvtd.runtime.evaluation.Transformer;
+import org.eclipse.qvtd.xtext.qvtbase.tests.AbstractTestQVT;
import org.eclipse.qvtd.xtext.qvtbase.tests.LoadTestCase;
+import org.eclipse.qvtd.xtext.qvtbase.tests.ModelNormalizer;
import org.eclipse.qvtd.xtext.qvtbase.tests.utilities.TestsXMLUtil;
import org.eclipse.qvtd.xtext.qvtcore.tests.QVTcTestUtil;
-import org.eclipse.qvtd.xtext.qvtimperative.tests.ModelNormalizer;
import org.eclipse.qvtd.xtext.qvtimperative.tests.QVTiTestUtil;
-import org.eclipse.qvtd.xtext.qvtimperativecs.QVTimperativeCSPackage;
import org.eclipse.qvtd.xtext.qvtrelation.tests.forward2reverse.Forward2ReverseNormalizer;
import org.eclipse.qvtd.xtext.qvtrelation.tests.hstm2fstm.FlatStateMachineNormalizer;
-import org.eclipse.xtext.resource.XtextResource;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
-import junit.framework.TestCase;
-
/**
* Tests that QVTc files can be compiled and executed.
*/
@@ -89,7 +64,7 @@ public class QVTrCompilerTests extends LoadTestCase
private static URI TESTS_JAVA_SRC_URI = URI.createPlatformResourceURI("/" + PROJECT_NAME +"/test-gen", true);
private static URI TESTS_JAVA_BIN_URI = URI.createPlatformResourceURI("/" + PROJECT_NAME + "/bin", true);
- protected static class MyQVT extends QVTimperative
+ protected static class MyQVT extends AbstractTestQVT
{
protected class InstrumentedCompilerChain extends QVTrCompilerChain
{
@@ -112,21 +87,11 @@ public class QVTrCompilerTests extends LoadTestCase
}
}
- protected final @NonNull String testFolderName;
- protected final @NonNull URI testFolderURI;
- protected final @NonNull URI samplesBaseUri;
- private QVTrCompilerChain compilerChain = null;
- private BasicQVTiExecutor interpretedExecutor = null;
- private QVTiTransformationExecutor generatedExecutor = null;
- private Set<@NonNull String> nsURIs = new HashSet<>();
private Collection<@NonNull GenPackage> usedGenPackages = null;
private final @NonNull Map<@NonNull Class<? extends Region>, @NonNull Integer> regionClass2count = new HashMap<>();
public MyQVT(@NonNull String testFolderName, @NonNull EPackage... eInstances) {
- super(new QVTiEnvironmentFactory(getProjectMap(), null));
- this.testFolderName = testFolderName;
- this.testFolderURI = TESTS_BASE_URI.appendSegment(testFolderName);
- this.samplesBaseUri = testFolderURI.appendSegment("samples");
+ super(TESTS_BASE_URI, PROJECT_NAME, testFolderName);
installEPackages(eInstances);
}
@@ -170,32 +135,7 @@ public class QVTrCompilerTests extends LoadTestCase
QVTrCompilerChain.setOption(options, CompilerChain.CLASS_STEP, CompilerChain.URI_KEY, TESTS_JAVA_BIN_URI);
QVTrCompilerChain.setOption(options, CompilerChain.GENMODEL_STEP, CompilerChain.GENMODEL_USED_GENPACKAGES_KEY, usedGenPackages);
QVTrCompilerChain.setOption(options, CompilerChain.GENMODEL_STEP, CompilerChain.GENMODEL_OPTIONS_KEY, genModelOptions);
- Map<@NonNull Key<? extends Object>, @Nullable Object> schedulerOptions = new HashMap<>();
- // schedulerOptions.put(CompilerChain.SCHEDULER_NO_EARLY_MERGE, Boolean.TRUE);
- // schedulerOptions.put(CompilerChain.SCHEDULER_NO_LATE_CONSUMER_MERGE, Boolean.TRUE);
- QVTrCompilerChain.setOption(options, CompilerChain.QVTS_STEP, CompilerChain.SCHEDULER_OPTIONS_KEY, schedulerOptions);
- compilerChain = new InstrumentedCompilerChain(getEnvironmentFactory(), testFolderURI.appendSegment(testFileName), options);
- ImperativeTransformation asTransformation = compilerChain.compile(outputName);
- URI txURI = asTransformation.eResource().getURI();
- if (txURI != null) {
- URI inputURI = txURI;
- URI serializedURI = txURI.trimFileExtension().appendFileExtension("serialized.qvti");
- doSerialize(inputURI, serializedURI);
- }
- Class<? extends Transformer> txClass = compilerChain.generate(asTransformation, genModelFiles);
- createGeneratedExecutor(txClass);
- return txClass;
- }
-
- public void checkOutput(@NonNull Resource outputResource, @NonNull String expectedFile, @Nullable ModelNormalizer normalizer) throws IOException, InterruptedException {
- URI referenceModelURI = samplesBaseUri.appendSegment(expectedFile);
- Resource referenceResource = outputResource.getResourceSet().getResource(referenceModelURI, true);
- assert referenceResource != null;
- if (normalizer != null) {
- normalizer.normalize(referenceResource);
- normalizer.normalize(outputResource);
- }
- assertSameModel(referenceResource, outputResource);
+ return doBuild(testFileName, outputName, options, genModelFiles);
}
public @NonNull ImperativeTransformation compileTransformation(@NonNull String testFileName, @NonNull String outputName, @NonNull String basePrefix, @NonNull String middleNsURI) throws Exception {
@@ -211,105 +151,13 @@ public class QVTrCompilerTests extends LoadTestCase
QVTrCompilerChain.setOption(options, CompilerChain.TRACE_STEP, CompilerChain.TRACE_OPTIONS_KEY, traceOptions);
QVTrCompilerChain.setOption(options, CompilerChain.GENMODEL_STEP, CompilerChain.GENMODEL_USED_GENPACKAGES_KEY, usedGenPackages);
QVTrCompilerChain.setOption(options, CompilerChain.GENMODEL_STEP, CompilerChain.GENMODEL_OPTIONS_KEY, genModelOptions);
- URI prefixURI = testFolderURI.appendSegment(testFileName);
- compilerChain = new QVTrCompilerChain(getEnvironmentFactory(), prefixURI, options);
- ImperativeTransformation transformation = compilerChain.compile(outputName);
- URI txURI = transformation.eResource().getURI();
- if (txURI != null) {
- URI inputURI = txURI;
- URI serializedURI = txURI.trimFileExtension().appendFileExtension("serialized.qvti");
- doSerialize(inputURI, serializedURI);
- }
- return transformation;
- }
-
- public @NonNull Class<? extends Transformer> createGeneratedClass(@NonNull Transformation asTransformation, @NonNull String @NonNull... genModelFiles) throws Exception {
- ResourceSet resourceSet = getResourceSet();
- resourceSet.getPackageRegistry().put(GenModelPackage.eNS_URI, GenModelPackage.eINSTANCE);
- URI primaryGenModelURI = getURI(CompilerChain.GENMODEL_STEP, CompilerChain.URI_KEY);
- loadGenModel(primaryGenModelURI);
- for (String genModelFile : genModelFiles) {
- URI genModelURI = URI.createURI(genModelFile).resolve(testFolderURI);
- loadGenModel(genModelURI);
- }
- QVTiCodeGenerator cg = new QVTiCodeGenerator(getEnvironmentFactory(), asTransformation);
- QVTiCodeGenOptions options = cg.getOptions();
- options.setUseNullAnnotations(true);
- // options.setPackagePrefix("cg");
- cg.generateClassFile();
- cg.saveSourceFile("../" + PROJECT_NAME + "/test-gen/");
- File explicitClassPath = new File("../" + PROJECT_NAME + "/bin");
- String qualifiedClassName = cg.getQualifiedName();
- String javaCodeSource = cg.generateClassFile();
- OCL2JavaFileObject.saveClass(ClassUtil.nonNullState(explicitClassPath.toString()), qualifiedClassName, javaCodeSource);
- @SuppressWarnings("unchecked")
- Class<? extends Transformer> txClass = (Class<? extends Transformer>) OCL2JavaFileObject.loadExplicitClass(explicitClassPath, qualifiedClassName);
- if (txClass == null) {
- TestCase.fail("Failed to compile transformation");
- throw new UnsupportedOperationException();
- }
- return txClass;
- }
-
- public void createGeneratedExecutor(@NonNull Transformation asTransformation, @NonNull String @NonNull... genModelFiles) throws Exception {
- Class<? extends Transformer> txClass = createGeneratedClass(asTransformation, genModelFiles);
- createGeneratedExecutor(txClass);
- }
-
- public QVTiTransformationExecutor createGeneratedExecutor(@NonNull Class<? extends Transformer> txClass) throws Exception {
- return generatedExecutor = new QVTiTransformationExecutor(getEnvironmentFactory(), txClass);
- }
-
- public @NonNull BasicQVTiExecutor createInterpretedExecutor(@NonNull ImperativeTransformation asTransformation) throws Exception {
- interpretedExecutor = new QVTiIncrementalExecutor(getEnvironmentFactory(), asTransformation, QVTiIncrementalExecutor.Mode.LAZY);
- return interpretedExecutor;
- }
-
- public void createModel(@NonNull String modelName, @NonNull String modelFile) {
- URI modelURI = samplesBaseUri.appendSegment(modelFile);
- interpretedExecutor.createModel(modelName, modelURI, null);
- }
-
- @Override
- public synchronized void dispose() {
- super.dispose();
- if (interpretedExecutor != null) {
- interpretedExecutor.dispose();
- }
- if (compilerChain != null) {
- compilerChain.dispose();
- }
- /**
- * Remove the eInstances from the EPackage.Registry.INSTANCE so that global registrations from the calling test
- * do not confuse subsequent tests that may want to use dynamic models.
- */
- for (String nsURI : nsURIs) {
- EPackage.Registry.INSTANCE.remove(nsURI);
- }
- }
-
- public Transformer executeTransformation() throws Exception {
- if (interpretedExecutor != null) {
- interpretedExecutor.execute();
- interpretedExecutor.saveModels(TestsXMLUtil.defaultSavingOptions);
- return null;
- }
- else {
- Transformer transformer = generatedExecutor.getTransformer();
- transformer.run();
- return transformer;
- }
+ return doCompile(testFileName, outputName, options);
}
@Override
- public @NonNull QVTiEnvironmentFactory getEnvironmentFactory() {
- return super.getEnvironmentFactory();
- }
-
- public @NonNull Map<Object, Object> getSaveOptions() {
- Map<Object, Object> saveOptions = new HashMap<>(TestsXMLUtil.defaultSavingOptions);
- saveOptions.put(ASResource.OPTION_NORMALIZE_CONTENTS, Boolean.TRUE);
- return saveOptions;
+ protected @NonNull QVTrCompilerChain createCompilerChain(@NonNull URI prefixURI,
+ @NonNull Map<@NonNull String, @Nullable Map<CompilerChain.@NonNull Key<Object>, @Nullable Object>> options) {
+ return new InstrumentedCompilerChain(getEnvironmentFactory(), prefixURI, options);
}
public @NonNull URI getURI(@NonNull String genmodelStep, @NonNull Key<URI> uriKey) {
@@ -323,21 +171,6 @@ public class QVTrCompilerTests extends LoadTestCase
getResourceSet().getPackageRegistry().put(middleEPackage.getNsURI(), middleEPackage);
}
- /**
- * Explicitly install the eInstances that would normally make it into the ProjectMap from extension point registrations.
- * Test models are not registered via extension point so we have to do this manually.
- */
- public void installEPackages(EPackage... eInstances) {
- ResourceSetImpl resourceSet = (ResourceSetImpl) getResourceSet();
- for (EPackage eInstance : eInstances) {
- String nsURI = eInstance.getNsURI();
- if (nsURI != null) {
- nsURIs.add(nsURI);
- }
- resourceSet.getURIResourceMap().put(testFolderURI.appendSegment(eInstance.getName()+".ecore"), eInstance.eResource());
- }
- }
-
private void instrumentRegion(@NonNull Region parentRegion) {
Class<? extends @NonNull Region> regionClass = parentRegion.getClass();
Integer count = regionClass2count.get(regionClass);
@@ -347,40 +180,16 @@ public class QVTrCompilerTests extends LoadTestCase
}
}
- private void loadGenModel(@NonNull URI genModelURI) {
- ResourceSet resourceSet = getResourceSet();
- MetamodelManagerInternal metamodelManager = getMetamodelManager();
- Resource csGenResource = resourceSet.getResource(genModelURI, true);
- for (EObject eObject : csGenResource.getContents()) {
- if (eObject instanceof GenModel) {
- GenModel genModel = (GenModel)eObject;
- genModel.reconcile();
- metamodelManager.addGenModel(genModel);
- }
- }
- }
-
- public void loadInput(@NonNull String modelName, @NonNull String modelFile) {
- URI modelURI = samplesBaseUri.appendSegment(modelFile);
- if (interpretedExecutor != null) {
- interpretedExecutor.loadModel(modelName, modelURI);
- }
- else {
- // Resource inputResource = getResourceSet().getResource(modelURI, true);
- ResourceSet resourceSet = environmentFactory.getMetamodelManager().getASResourceSet(); // FIXME get package registrations in exteranl RespurcSet
- PivotUtil.initializeLoadOptionsToSupportSelfReferences(resourceSet);
- Resource inputResource = resourceSet.getResource(modelURI, true);
- generatedExecutor.getTransformer().addRootObjects(modelName, ClassUtil.nonNullState(inputResource.getContents()));
+ @Override
+ protected void loadGenModels(@NonNull String @NonNull... genModelFiles) {
+ URI primaryGenModelURI = getURI(CompilerChain.GENMODEL_STEP, CompilerChain.URI_KEY);
+ loadGenModel(primaryGenModelURI);
+ for (String genModelFile : genModelFiles) {
+ URI genModelURI = URI.createURI(genModelFile).resolve(testFolderURI);
+ loadGenModel(genModelURI);
}
}
- public void removeRegisteredPackage(@NonNull String ePackageClassName) throws NoSuchFieldException, IllegalAccessException, ClassNotFoundException {
- Class<?> ePackageClass = Class.forName(ePackageClassName);
- Field eNsURIField = ePackageClass.getField("eNS_URI");
- String nsURI = String.valueOf(eNsURIField.get(null));
- EPackage.Registry.INSTANCE.remove(nsURI);
- }
-
public @NonNull Resource saveOutput(@NonNull String modelName, @NonNull String modelFile, @Nullable String expectedFile, @Nullable ModelNormalizer normalizer) throws IOException, InterruptedException {
URI modelURI = samplesBaseUri.appendSegment(modelFile);
ResourceSet resourceSet = /*getResourceSet()*/environmentFactory.getMetamodelManager().getASResourceSet();
@@ -401,77 +210,6 @@ public class QVTrCompilerTests extends LoadTestCase
}
}
- // FIXME move following clones to a Util class
- protected static @NonNull XtextResource pivot2cs(@NonNull OCL ocl, @NonNull ResourceSet resourceSet, @NonNull ASResource asResource, @NonNull URI outputURI) throws IOException {
- XtextResource xtextResource = ClassUtil.nonNullState((XtextResource) resourceSet.createResource(outputURI, QVTimperativeCSPackage.eCONTENT_TYPE));
- ocl.as2cs(asResource, (CSResource) xtextResource);
- assertNoResourceErrors("Conversion failed", xtextResource);
- assertNoDiagnosticErrors("Concrete Syntax validation failed", xtextResource);
- try {
- xtextResource.save(TestsXMLUtil.defaultSavingOptions);
- }
- catch (Exception e) {
- e.printStackTrace();
- URI xmiURI = outputURI.appendFileExtension(".xmi");
- Resource xmiResource = resourceSet.createResource(xmiURI);
- xmiResource.getContents().addAll(ClassUtil.nullFree(xtextResource.getContents()));
- xmiResource.save(TestsXMLUtil.defaultSavingOptions);
- fail(e.toString());
- }
- return xtextResource;
- }
-
- protected static XtextResource doSerialize(@NonNull URI inputURI, @NonNull URI serializedURI) throws IOException {
- ResourceSet resourceSet = new ResourceSetImpl();
- //
- // Load QVTiAS
- //
- OCL ocl = QVTbase.newInstance(OCL.NO_PROJECTS);
- try {
- ASResource asResource = loadQVTiAS(ocl, inputURI);
- assertNoResourceErrors("Normalisation failed", asResource);
- assertNoUnresolvedProxies("Normalisation invalid", asResource);
- assertNoValidationErrors("Normalisation invalid", asResource);
- //
- // Pivot to CS
- //
- XtextResource xtextResource = pivot2cs(ocl, resourceSet, asResource, serializedURI);
- resourceSet.getResources().clear();
-
- QVTimperative qvti = QVTimperative.newInstance(ProjectManager.NO_PROJECTS, null);
- try {
- Resource asResource2 = QVTimperativeUtil.loadTransformation(qvti.getEnvironmentFactory(), serializedURI, false).eResource();
- assertNoResourceErrors("Load failed", asResource2);
- assertNoUnresolvedProxies("Load invalid", asResource2);
- assertNoValidationErrors("Load invalid", asResource2);
- }
- finally {
- qvti.dispose();
- qvti = null;
- }
-
-
- return xtextResource;
- }
- finally {
- ocl.dispose();
- ocl = null;
- }
- }
-
- protected static @NonNull ASResource loadQVTiAS(@NonNull OCL ocl, @NonNull URI inputURI) {
- Resource asResource = ocl.getMetamodelManager().getASResourceSet().getResource(inputURI, true);
- assert asResource != null;
- // List<String> conversionErrors = new ArrayList<String>();
- // RootPackageCS documentCS = Ecore2OCLinEcore.importFromEcore(resourceSet, null, ecoreResource);
- // Resource eResource = documentCS.eResource();
- assertNoResourceErrors("Load failed", asResource);
- // Resource xtextResource = resourceSet.createResource(outputURI, OCLinEcoreCSTPackage.eCONTENT_TYPE);
- // XtextResource xtextResource = (XtextResource) resourceSet.createResource(outputURI);
- // xtextResource.getContents().add(documentCS);
- return (ASResource) asResource;
- }
-
/* (non-Javadoc)
* @see org.eclipse.qvtd.xtext.qvtbase.tests.LoadTestCase#setUp()
*/
diff --git a/tests/org.eclipse.qvtd.xtext.qvtrelation.tests/src/org/eclipse/qvtd/xtext/qvtrelation/tests/forward2reverse/Forward2ReverseNormalizer.java b/tests/org.eclipse.qvtd.xtext.qvtrelation.tests/src/org/eclipse/qvtd/xtext/qvtrelation/tests/forward2reverse/Forward2ReverseNormalizer.java
index c213e37fc..60e982060 100644
--- a/tests/org.eclipse.qvtd.xtext.qvtrelation.tests/src/org/eclipse/qvtd/xtext/qvtrelation/tests/forward2reverse/Forward2ReverseNormalizer.java
+++ b/tests/org.eclipse.qvtd.xtext.qvtrelation.tests/src/org/eclipse/qvtd/xtext/qvtrelation/tests/forward2reverse/Forward2ReverseNormalizer.java
@@ -26,7 +26,7 @@ import org.eclipse.emf.ecore.resource.Resource;
import org.eclipse.jdt.annotation.NonNull;
import org.eclipse.ocl.examples.xtext.tests.XtextTestCase.Normalizer;
import org.eclipse.ocl.pivot.utilities.ClassUtil;
-import org.eclipse.qvtd.xtext.qvtimperative.tests.ModelNormalizer;
+import org.eclipse.qvtd.xtext.qvtbase.tests.ModelNormalizer;
/**
* Forward2ReverseNormalizer normalises the results of the Forward2Reverse transformation.
@@ -79,8 +79,8 @@ public class Forward2ReverseNormalizer implements ModelNormalizer
}
@Override
- public @NonNull List<Normalizer> normalize(@NonNull Resource resource) {
- List<Normalizer> normalizers = new ArrayList<Normalizer>();
+ public @NonNull List<@NonNull Normalizer> normalize(@NonNull Resource resource) {
+ List<@NonNull Normalizer> normalizers = new ArrayList<>();
List<@NonNull EObject> contents = resource.getContents();
if (contents.isEmpty()) {
return normalizers;
diff --git a/tests/org.eclipse.qvtd.xtext.qvtrelation.tests/src/org/eclipse/qvtd/xtext/qvtrelation/tests/hstm2fstm/FlatStateMachineNormalizer.java b/tests/org.eclipse.qvtd.xtext.qvtrelation.tests/src/org/eclipse/qvtd/xtext/qvtrelation/tests/hstm2fstm/FlatStateMachineNormalizer.java
index 8d579eded..8a92b04cb 100644
--- a/tests/org.eclipse.qvtd.xtext.qvtrelation.tests/src/org/eclipse/qvtd/xtext/qvtrelation/tests/hstm2fstm/FlatStateMachineNormalizer.java
+++ b/tests/org.eclipse.qvtd.xtext.qvtrelation.tests/src/org/eclipse/qvtd/xtext/qvtrelation/tests/hstm2fstm/FlatStateMachineNormalizer.java
@@ -28,7 +28,7 @@ import org.eclipse.jdt.annotation.NonNull;
import org.eclipse.ocl.examples.xtext.tests.XtextTestCase.Normalizer;
import org.eclipse.ocl.pivot.utilities.ClassUtil;
import org.eclipse.ocl.pivot.utilities.TreeIterable;
-import org.eclipse.qvtd.xtext.qvtimperative.tests.ModelNormalizer;
+import org.eclipse.qvtd.xtext.qvtbase.tests.ModelNormalizer;
/**
* UpperToLowerNormalizer normalises the results of the UpperToLower transformation.
@@ -239,7 +239,7 @@ public class FlatStateMachineNormalizer implements ModelNormalizer
protected final @NonNull Map<@NonNull EClass, @NonNull AbstractNormalizer> eClass2normalizer = new HashMap<@NonNull EClass, @NonNull AbstractNormalizer>();
@Override
- public @NonNull List<Normalizer> normalize(@NonNull Resource resource) {
+ public @NonNull List<@NonNull Normalizer> normalize(@NonNull Resource resource) {
EObject eRoot = resource.getContents().get(0);
EPackage ePackage = eRoot.eClass().getEPackage();
EClass stateClass = (EClass) ClassUtil.nonNullState(ePackage.getEClassifier("State"));
@@ -277,7 +277,7 @@ public class FlatStateMachineNormalizer implements ModelNormalizer
normalizer.normalize(eObject);
}
ECollections.sort(resource.getContents(), stateMachineComparator);
- List<Normalizer> normalizers = new ArrayList<Normalizer>();
+ List<@NonNull Normalizer> normalizers = new ArrayList<>();
return normalizers;
}
} \ No newline at end of file
diff --git a/tests/org.eclipse.qvtd.xtext.qvtrelation.tests/src/org/eclipse/qvtd/xtext/qvtrelation/tests/rel2core/PivotNormalizer.java b/tests/org.eclipse.qvtd.xtext.qvtrelation.tests/src/org/eclipse/qvtd/xtext/qvtrelation/tests/rel2core/PivotNormalizer.java
index b0f135403..e0b38d33c 100644
--- a/tests/org.eclipse.qvtd.xtext.qvtrelation.tests/src/org/eclipse/qvtd/xtext/qvtrelation/tests/rel2core/PivotNormalizer.java
+++ b/tests/org.eclipse.qvtd.xtext.qvtrelation.tests/src/org/eclipse/qvtd/xtext/qvtrelation/tests/rel2core/PivotNormalizer.java
@@ -26,16 +26,16 @@ import org.eclipse.ocl.pivot.NamedElement;
import org.eclipse.ocl.pivot.utilities.ClassUtil;
import org.eclipse.ocl.pivot.utilities.NameUtil;
import org.eclipse.ocl.pivot.utilities.Nameable;
-import org.eclipse.qvtd.xtext.qvtimperative.tests.ModelNormalizer;
+import org.eclipse.qvtd.xtext.qvtbase.tests.ModelNormalizer;
public class PivotNormalizer implements ModelNormalizer
{
public static final @NonNull PivotNormalizer INSTANCE = new PivotNormalizer();
public static final class ToStringComparator implements Comparator<Nameable>
- {
+ {
public static final @NonNull ToStringComparator INSTANCE = new ToStringComparator();
-
+
@Override
public int compare(Nameable o1, Nameable o2) {
String n1 = String.valueOf(o1);
@@ -104,8 +104,8 @@ public class PivotNormalizer implements ModelNormalizer
}
@Override
- public @NonNull List<Normalizer> normalize(@NonNull Resource resource) {
- List<Normalizer> normalizers = new ArrayList<Normalizer>();
+ public @NonNull List<@NonNull Normalizer> normalize(@NonNull Resource resource) {
+ List<@NonNull Normalizer> normalizers = new ArrayList<>();
for (TreeIterator<EObject> tit = resource.getAllContents(); tit.hasNext(); ) {
EObject eObject = tit.next();
if (eObject instanceof Model) {
@@ -119,8 +119,8 @@ public class PivotNormalizer implements ModelNormalizer
normalizers.add(new ClassNormalizer((org.eclipse.ocl.pivot.Class)eObject));
}
}
-// EList<NamedElement> contents = (EList<NamedElement>)(Object)resource.getContents();
-// ECollections.sort(contents, ToStringComparator.INSTANCE);
+ // EList<NamedElement> contents = (EList<NamedElement>)(Object)resource.getContents();
+ // ECollections.sort(contents, ToStringComparator.INSTANCE);
for (Normalizer normalizer : normalizers) {
normalizer.normalize();
}

Back to the top