diff options
author | Ed Willink | 2016-06-30 12:28:18 +0000 |
---|---|---|
committer | Ed Willink | 2016-06-30 12:32:42 +0000 |
commit | bd122f55834417a23c4456ccdcb71ae3609755d1 (patch) | |
tree | e83f9b7b6cff9d3064350ab81d83da2695c47074 | |
parent | 7ff46055ef2c5a0be7a6616d249486dc579f1528 (diff) | |
download | org.eclipse.qvtd-bd122f55834417a23c4456ccdcb71ae3609755d1.tar.gz org.eclipse.qvtd-bd122f55834417a23c4456ccdcb71ae3609755d1.tar.xz org.eclipse.qvtd-bd122f55834417a23c4456ccdcb71ae3609755d1.zip |
[496420] Localize debug options
4 files changed, 287 insertions, 260 deletions
diff --git a/plugins/org.eclipse.qvtd.compiler/.options b/plugins/org.eclipse.qvtd.compiler/.options index fe762a99a..10e654a0f 100644 --- a/plugins/org.eclipse.qvtd.compiler/.options +++ b/plugins/org.eclipse.qvtd.compiler/.options @@ -1,5 +1,20 @@ # Debugging options for the org.eclipse.ocl.examples.codegen plug-in +# Turn on tracing of the operation dependency analysis blocking an incomplete operation analysis +org.eclipse.qvtd.compiler/qvtp2qvts/dependency/block=false +# Turn on tracing of the operation dependency analysis creating a new operation analysis +org.eclipse.qvtd.compiler/qvtp2qvts/dependency/create=false +# Turn on tracing of the operation dependency analysis failing to complete an operation analysis +org.eclipse.qvtd.compiler/qvtp2qvts/dependency/fail=false +# Turn on tracing of the operation dependency analysis successfully completing an operation analysis +org.eclipse.qvtd.compiler/qvtp2qvts/dependency/finish=false +# Turn on tracing of the operation dependency analysis operation returns +org.eclipse.qvtd.compiler/qvtp2qvts/dependency/return=false +# Turn on tracing of the operation dependency analysis (re)starting an operation analysis +org.eclipse.qvtd.compiler/qvtp2qvts/dependency/start=false +# Turn on tracing of the operation dependency analysis unblocking an operation analysis for a retry +org.eclipse.qvtd.compiler/qvtp2qvts/dependency/unblock=false + # Turn on tracing of partitioining org.eclipse.qvtd.compiler/qvtm2qvtp/partitioining=false # Turn on tracing of connection creation @@ -8,8 +23,6 @@ org.eclipse.qvtd.compiler/qvtp2qvts/connectionCreation=false org.eclipse.qvtd.compiler/qvtp2qvts/connectionRouting=false # Turn on generation of debug graphs org.eclipse.qvtd.compiler/qvtp2qvts/debugGraphs=false -# Turn on tracing of the operation dependency analysis -org.eclipse.qvtd.compiler/qvtp2qvts/dependencyAnalysis=false # Turn on dump of the consuming node for each class org.eclipse.qvtd.compiler/qvtp2qvts/dump/class2consumingNodes=false # Turn on dump of the consumed properties analysis diff --git a/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvtp2qvts/DependencyAnalyzer.java b/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvtp2qvts/DependencyAnalyzer.java index ad8705c2e..d41751827 100644 --- a/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvtp2qvts/DependencyAnalyzer.java +++ b/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvtp2qvts/DependencyAnalyzer.java @@ -62,6 +62,8 @@ import org.eclipse.ocl.pivot.utilities.EnvironmentFactory; import org.eclipse.ocl.pivot.utilities.MetamodelManager; import org.eclipse.ocl.pivot.utilities.ParserException; import org.eclipse.ocl.pivot.utilities.PivotUtil; +import org.eclipse.ocl.pivot.utilities.TracingOption; +import org.eclipse.qvtd.compiler.CompilerConstants; import org.eclipse.qvtd.pivot.qvtbase.Function; import org.eclipse.qvtd.pivot.qvtbase.Transformation; import org.eclipse.qvtd.pivot.qvtbase.utilities.QVTbaseUtil; @@ -73,8 +75,15 @@ import org.eclipse.qvtd.pivot.qvtimperative.util.AbstractExtendingQVTimperativeV public class DependencyAnalyzer { -// private static final @SuppressWarnings("null")@NonNull Set<@NonNull List<@NonNull DependencyStep>> EMPTY_ELEMENTS = Collections.emptySet(); - + // private static final @SuppressWarnings("null")@NonNull Set<@NonNull List<@NonNull DependencyStep>> EMPTY_ELEMENTS = Collections.emptySet(); + public static final @NonNull TracingOption BLOCK = new TracingOption(CompilerConstants.PLUGIN_ID, "dependency/block"); + public static final @NonNull TracingOption CREATE = new TracingOption(CompilerConstants.PLUGIN_ID, "dependency/create"); + public static final @NonNull TracingOption FAIL = new TracingOption(CompilerConstants.PLUGIN_ID, "dependency/fail"); + public static final @NonNull TracingOption FINISH = new TracingOption(CompilerConstants.PLUGIN_ID, "dependency/finish"); + public static final @NonNull TracingOption RETURN = new TracingOption(CompilerConstants.PLUGIN_ID, "dependency/return"); + public static final @NonNull TracingOption START = new TracingOption(CompilerConstants.PLUGIN_ID, "dependency/start"); + public static final @NonNull TracingOption UNBLOCK = new TracingOption(CompilerConstants.PLUGIN_ID, "dependency/unblock"); + @SuppressWarnings("serial") protected static class BlockedAnalysisException extends RuntimeException { @@ -98,7 +107,7 @@ public class DependencyAnalyzer protected DependencyStepFactory(@NonNull DomainUsage usage) { this.usage = usage; } - + public @NonNull ClassDependencyStep createClassDependencyStep(org.eclipse.ocl.pivot.@NonNull Class type, @NonNull Element element) { ClassDependencyStep dependencyStep = class2step.get(type); if (dependencyStep == null) { @@ -107,7 +116,7 @@ public class DependencyAnalyzer } return dependencyStep; } - + public @NonNull NavigationDependencyStep createPropertyDependencyStep(@NonNull NavigationCallExp navigationCallExp) { Property property = PivotUtil.getReferredProperty(navigationCallExp); assert property != null; @@ -123,7 +132,7 @@ public class DependencyAnalyzer return usage; } } - + protected abstract static class DependencyStep { protected final @NonNull DomainUsage usage; @@ -146,11 +155,11 @@ public class DependencyAnalyzer return usage; } } - + protected static class ClassDependencyStep extends DependencyStep { private final org.eclipse.ocl.pivot.@NonNull Class type; - + public ClassDependencyStep(@NonNull DomainUsage usage, org.eclipse.ocl.pivot.@NonNull Class type, @NonNull Element element) { super(usage, element); this.type = type; @@ -172,11 +181,11 @@ public class DependencyAnalyzer return usage + " «" + type.eClass().getName() + "»" + type.toString(); } } - + protected static class NavigationDependencyStep extends DependencyStep { protected final @NonNull Property property; - + public NavigationDependencyStep(@NonNull DomainUsage usage, @NonNull Property property, @NonNull NavigationCallExp element) { super(usage, element); this.property = property; @@ -206,23 +215,23 @@ public class DependencyAnalyzer return property; } -// @Override -// public org.eclipse.ocl.pivot.@NonNull Class getType() { -// Type type = property.getType(); -// assert type != null; -// return (org.eclipse.ocl.pivot.Class) type; -// } + // @Override + // public org.eclipse.ocl.pivot.@NonNull Class getType() { + // Type type = property.getType(); + // assert type != null; + // return (org.eclipse.ocl.pivot.Class) type; + // } @Override public String toString() { return usage + " «" + property.eClass().getName() + "»" + property.toString(); } } - + protected static class UnknownDependencyStep extends DependencyStep { private final org.eclipse.ocl.pivot.@NonNull Class type; - + public UnknownDependencyStep(@NonNull DomainUsage usage, org.eclipse.ocl.pivot.@NonNull Class type, @NonNull Element element) { super(usage, element); this.type = type; @@ -244,7 +253,7 @@ public class DependencyAnalyzer return usage + " ??«" + type.eClass().getName() + "»" + type.toString(); } } - + protected static class DependencyPaths { protected final @NonNull DependencyAnalyzer dependencyAnalyzer; @@ -313,7 +322,7 @@ public class DependencyAnalyzer } return dependencyAnalyzer.createDependencyPaths(newReturnPaths, newHiddenPaths); } - + public @NonNull DependencyPaths append(@NonNull NavigationDependencyStep propertyDependencyStep) { Set<@NonNull List<@NonNull DependencyStep>> oldReturnPaths = returnPaths; if (oldReturnPaths == null) { @@ -450,8 +459,8 @@ public class DependencyAnalyzer protected class DependencyAnalyzerVisitor extends AbstractExtendingQVTimperativeVisitor<@NonNull DependencyPaths, @Nullable Object> { private final @Nullable DependencyAnalyzerVisitor parent; - private final @NonNull Map<@NonNull VariableDeclaration, @NonNull DependencyPaths> variable2dependencies = new HashMap<@NonNull VariableDeclaration, @NonNull DependencyPaths>(); - + private final @NonNull Map<@NonNull VariableDeclaration, @NonNull DependencyPaths> variable2dependencies = new HashMap<@NonNull VariableDeclaration, @NonNull DependencyPaths>(); + protected DependencyAnalyzerVisitor(@Nullable DependencyAnalyzerVisitor parent) { super(null); this.parent = parent; @@ -460,13 +469,13 @@ public class DependencyAnalyzer private void addVariable(@NonNull VariableDeclaration variable, @NonNull DependencyPaths value) { variable2dependencies.put(variable, value); } - + public @NonNull DependencyPaths analyze(/*@NonNull*/ Visitable element) { DependencyPaths accept = element.accept(this); assert accept != null; return accept; } - + protected @NonNull DependencyPaths getVariable(@NonNull VariableDeclaration variable) { DependencyPaths result = variable2dependencies.get(variable); if (result != null) { @@ -514,7 +523,7 @@ public class DependencyAnalyzer } @Override - public @NonNull DependencyPaths visitLetExp(@NonNull LetExp letExp) { + public @NonNull DependencyPaths visitLetExp(@NonNull LetExp letExp) { Variable ownedVariable = letExp.getOwnedVariable(); DependencyPaths result = analyze(ownedVariable.getOwnedInit()); DependencyAnalyzerVisitor nestedAnalyzer = new DependencyAnalyzerVisitor(this); @@ -570,19 +579,19 @@ public class DependencyAnalyzer return executeOperationCall(operationCallExp, argumentPaths); } OperationId operationId = referredOperation.getOperationId(); -// if (operationId == scheduler.getOclAnyOclAsTypeId()) { -// return analyzeOperationCallExp_oclAsType(sourceNode, operationCallExp); -// } + // if (operationId == scheduler.getOclAnyOclAsTypeId()) { + // return analyzeOperationCallExp_oclAsType(sourceNode, operationCallExp); + // } if (PivotUtil.isSameOperation(operationId, scheduler.getOclElementOclContainerId())) { return executeOperationCallExp_oclContainer(operationCallExp, argumentPaths); } -// if (PivotUtil.isSameOperation(operationId, scheduler.getCollectionSelectByKindId())) { -// return executeOperationCallExp_collectionSelectByKind(operationCallExp, argumentPaths); -// } -// else if (PivotUtil.isSameOperation(operationId, scheduler.getOclAnyOclIsKindOfId())) { -// return analyzeOperationCallExp_oclIsKindOf(sourceNode, operationCallExp); -// } -// else { + // if (PivotUtil.isSameOperation(operationId, scheduler.getCollectionSelectByKindId())) { + // return executeOperationCallExp_collectionSelectByKind(operationCallExp, argumentPaths); + // } + // else if (PivotUtil.isSameOperation(operationId, scheduler.getOclAnyOclIsKindOfId())) { + // return analyzeOperationCallExp_oclIsKindOf(sourceNode, operationCallExp); + // } + // else { org.eclipse.ocl.pivot.Class returnType = ClassUtil.nonNullState((org.eclipse.ocl.pivot.Class) operationCallExp.getType()); DependencyStep step = createClassDependencyStep(returnType, operationCallExp); DependencyPaths result = createDependencyPaths(step); @@ -592,7 +601,7 @@ public class DependencyAnalyzer return result; } -/* private @NonNull DependencyPaths executeOperationCallExp_collectionSelectByKind(@NonNull OperationCallExp operationCallExp, + /* private @NonNull DependencyPaths executeOperationCallExp_collectionSelectByKind(@NonNull OperationCallExp operationCallExp, @NonNull List<@NonNull DependencyPaths> argumentPaths) { OCLExpression oclExpression = operationCallExp.getOwnedArguments().get(0); Type typeValue = oclExpression.getTypeValue(); @@ -691,20 +700,20 @@ public class DependencyAnalyzer * Analyses that this analysis blocks */ private Set<@NonNull OperationAnalysis> invokingAnalyses = null; - + public OperationAnalysis(@NonNull Operation operation, @NonNull List<@NonNull DependencyPaths> sourceAndArgumentPaths) { this.operation = operation; this.sourceAndArgumentPaths = sourceAndArgumentPaths; - Scheduler.DEPENDENCY_ANALYSIS.println("Create " + this); + CREATE.println("Create " + this); } - + private void addFailedAnalysis(@NonNull OperationAnalysis failedAnalysis) { if (failedAnalyses == null) { failedAnalyses = new HashSet<@NonNull OperationAnalysis>(); } failedAnalyses.add(failedAnalysis); } - + private void addInvokingAnalysis(@NonNull OperationAnalysis invokingAnalysis) { if (invokingAnalyses == null) { invokingAnalyses = new HashSet<@NonNull OperationAnalysis>(); @@ -716,7 +725,7 @@ public class DependencyAnalyzer if (result != null) { return result; } - Scheduler.DEPENDENCY_ANALYSIS.println("Start " + this); + START.println("Start " + this); try { DependencyAnalyzerVisitor visitor = new DependencyAnalyzerVisitor(null); LanguageExpression bodyExpression; @@ -750,13 +759,13 @@ public class DependencyAnalyzer } invokingAnalyses.clear(); } - Scheduler.DEPENDENCY_ANALYSIS.println("Finish " + this); + FINISH.println("Finish " + this); return result; } catch (ParserException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (BlockedAnalysisException e) { - Scheduler.DEPENDENCY_ANALYSIS.println("Fail " + this); + FAIL.println("Fail " + this); for (@NonNull OperationAnalysis analysis : e.getFailedAnalyses()) { block(this, analysis); } @@ -774,14 +783,14 @@ public class DependencyAnalyzer invokingAnalyses.remove(invokingAnalysis); invokingAnalysis.removeFailedAnalysis(this); } -// invokingAnalyses.clear(); + // invokingAnalyses.clear(); } if (failedAnalyses != null) { for (@NonNull OperationAnalysis failedAnalysis : new ArrayList<@NonNull OperationAnalysis>(failedAnalyses)) { failedAnalyses.remove(failedAnalysis); failedAnalysis.removeInvokingAnalysis(this); } -// failedAnalyses.clear(); + // failedAnalyses.clear(); } unblock(this); checkAll(); @@ -791,12 +800,12 @@ public class DependencyAnalyzer if ((failedAnalyses != null) && !failedAnalyses.isEmpty()) { assert DependencyAnalyzer.this.blockedAnalyses.contains(this) : "should be blocked " + this; for (@NonNull OperationAnalysis blockingAnalysis : failedAnalyses) { -// assert DependencyAnalyzer.this.blockedAnalyses.contains(blockingAnalysis); + // assert DependencyAnalyzer.this.blockedAnalyses.contains(blockingAnalysis); assert blockingAnalysis.invokingAnalyses.contains(this); } } if (invokingAnalyses != null) { -// assert DependencyAnalyzer.this.blockedAnalyses.contains(this); + // assert DependencyAnalyzer.this.blockedAnalyses.contains(this); for (@NonNull OperationAnalysis blockedAnalysis : invokingAnalyses) { assert DependencyAnalyzer.this.blockedAnalyses.contains(blockedAnalysis); assert blockedAnalysis.failedAnalyses.contains(this); @@ -807,7 +816,7 @@ public class DependencyAnalyzer public @Nullable DependencyPaths getResult() { return result; } - + private void removeFailedAnalysis(@NonNull OperationAnalysis operationAnalysis) { assert failedAnalyses != null; boolean wasRemoved = failedAnalyses.remove(operationAnalysis); @@ -829,7 +838,7 @@ public class DependencyAnalyzer return operation.toString() + " <= " + sourceAndArgumentPaths; } } - + private final @NonNull MetamodelManager metamodelManager; protected final @NonNull RootDomainUsageAnalysis domainUsageAnalysis; protected final @NonNull SchedulerConstants scheduler; @@ -840,7 +849,7 @@ public class DependencyAnalyzer private final @NonNull FinalAnalysis finalAnalysis; private final @NonNull Set<@NonNull OperationAnalysis> blockedAnalyses = new HashSet<@NonNull OperationAnalysis>(); private final @NonNull Deque<@NonNull OperationAnalysis> unblockedAnalyses = new LinkedList<@NonNull OperationAnalysis>(); - + public DependencyAnalyzer(@NonNull SchedulerConstants scheduler) { EnvironmentFactory environmentFactory = scheduler.getEnvironmentFactory(); this.metamodelManager = environmentFactory.getMetamodelManager(); @@ -866,7 +875,7 @@ public class DependencyAnalyzer } } while (blockedAnalyses.size() > 0) { -// System.out.println("blocked"); + // System.out.println("blocked"); Map<String, @NonNull OperationAnalysis> map = new HashMap<String, @NonNull OperationAnalysis>(); for (OperationAnalysis analysis : blockedAnalyses) { map.put(analysis.toString(), analysis); @@ -878,17 +887,17 @@ public class DependencyAnalyzer for (String key : keys) { OperationAnalysis operationAnalysis = map.get(key); assert operationAnalysis != null; -// System.out.println(" " + operationAnalysis); -// for (OperationAnalysis blockingAnalysis : operationAnalysis.failedAnalyses) { -// System.out.println(" " + blockingAnalysis); -// } + // System.out.println(" " + operationAnalysis); + // for (OperationAnalysis blockingAnalysis : operationAnalysis.failedAnalyses) { + // System.out.println(" " + blockingAnalysis); + // } operationAnalysis.check(); if ((operationAnalysis.invokingAnalyses != null) && (operationAnalysis.invokingAnalyses.size() > mostBlockedCount)) { mostBlocked = operationAnalysis; - mostBlockedCount = operationAnalysis.invokingAnalyses.size(); + mostBlockedCount = operationAnalysis.invokingAnalyses.size(); } } -// System.out.println("Most blocked " + mostBlockedCount + " : " + mostBlocked); + // System.out.println("Most blocked " + mostBlockedCount + " : " + mostBlocked); assert mostBlocked != null; mostBlocked.assignUnknownResult(); while (unblockedAnalyses.size() > 0) { @@ -898,7 +907,7 @@ public class DependencyAnalyzer } } Map<@NonNull String, @NonNull OperationAnalysis> map2 = new HashMap<@NonNull String, @NonNull OperationAnalysis>(); -// System.out.println("not blocked"); + // System.out.println("not blocked"); for (@NonNull Map<@NonNull List<@NonNull DependencyPaths>, @NonNull OperationAnalysis> values : operation2result.values()) { for (@NonNull OperationAnalysis analysis : values.values()) { if (!blockedAnalyses.contains(analysis)) { @@ -911,17 +920,17 @@ public class DependencyAnalyzer for (@NonNull String key : keys2) { OperationAnalysis operationAnalysis = map2.get(key); assert operationAnalysis != null; -// System.out.println(" " + operationAnalysis); -// if (operationAnalysis.failedAnalyses != null) { -// for (OperationAnalysis failedAnalysis : operationAnalysis.failedAnalyses) { -// System.out.println(" " + failedAnalysis); -// } -// } + // System.out.println(" " + operationAnalysis); + // if (operationAnalysis.failedAnalyses != null) { + // for (OperationAnalysis failedAnalysis : operationAnalysis.failedAnalyses) { + // System.out.println(" " + failedAnalysis); + // } + // } operationAnalysis.check(); } return analyze(visitor, element); } - + public @NonNull DependencyPaths analyze(/*@NonNull*/ Element element, @NonNull VariableDeclaration selfVariable, @Nullable DependencyPaths selfPath) { assert element != null; @@ -933,8 +942,8 @@ public class DependencyAnalyzer visitor.addVariable(selfVariable, selfPath); return analyze(visitor, element); } - -/* private DependencyPaths analyzeOperationCall(@NonNull Operation operation, @NonNull List<DependencyPaths> sourceAndArgumentPaths) { + + /* private DependencyPaths analyzeOperationCall(@NonNull Operation operation, @NonNull List<DependencyPaths> sourceAndArgumentPaths) { OperationId operationId = operation.getOperationId(); Scheduler.DEPENDENCY_ANALYSIS.println(++debugDepth + " Call " + operationId);// + " for " + sourceAndArgumentPaths); Map<List<DependencyPaths>, OperationAnalysis> args2result = operation2result.get(operationId); @@ -972,18 +981,18 @@ public class DependencyAnalyzer } */ protected void block(@NonNull OperationAnalysis invokingAnalysis, @NonNull OperationAnalysis failedAnalysis) { - Scheduler.DEPENDENCY_ANALYSIS.println("Block " + invokingAnalysis); // + "\n from " + failedAnalysis); + BLOCK.println("Block " + invokingAnalysis); // + "\n from " + failedAnalysis); blockedAnalyses.add(invokingAnalysis); invokingAnalysis.addFailedAnalysis(failedAnalysis); failedAnalysis.addInvokingAnalysis(invokingAnalysis); } - + private void checkAll() { for (OperationAnalysis operationAnalysis : blockedAnalyses) { operationAnalysis.check(); } } - + protected @NonNull ClassDependencyStep createClassDependencyStep(org.eclipse.ocl.pivot.@NonNull Class type, @NonNull Element element) { while (type instanceof CollectionType) { type = ClassUtil.nonNullState((org.eclipse.ocl.pivot.Class) ((CollectionType)type).getElementType()); @@ -1017,7 +1026,7 @@ public class DependencyAnalyzer DependencyStepFactory factory = getDependencyStepFactory(usage); return factory.createPropertyDependencyStep(navigationCallExp); } - + /** * Attempt to execute all applicable overloads of operationCallExp with a given concatenation of known source and argument paths. * Throws a BlockedAnalysisException if any overload is blocked pending execution of some other operation. @@ -1088,11 +1097,11 @@ public class DependencyAnalyzer assert usage != null; return usage; } - + protected void unblock(@NonNull OperationAnalysis operationAnalysis) { - Scheduler.DEPENDENCY_ANALYSIS.println("Unblock " + operationAnalysis); + UNBLOCK.println("Unblock " + operationAnalysis); @SuppressWarnings("unused")boolean wasRemoved = blockedAnalyses.remove(operationAnalysis); -// assert wasRemoved; -- multiple unblocking occur when introducing UnknownDependencySteps + // assert wasRemoved; -- multiple unblocking occur when introducing UnknownDependencySteps unblockedAnalyses.addLast(operationAnalysis); } }
\ No newline at end of file diff --git a/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvtp2qvts/Scheduler.java b/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvtp2qvts/Scheduler.java index 03642777e..d063732ff 100644 --- a/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvtp2qvts/Scheduler.java +++ b/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvtp2qvts/Scheduler.java @@ -44,7 +44,6 @@ public class Scheduler extends SchedulerConstants public static final @NonNull TracingOption CONNECTION_CREATION = new TracingOption(CompilerConstants.PLUGIN_ID, "qvtp2qvts/connectionCreation"); public static final @NonNull TracingOption CONNECTION_ROUTING = new TracingOption(CompilerConstants.PLUGIN_ID, "qvtp2qvts/connectionRouting"); public static final @NonNull TracingOption DEBUG_GRAPHS = new TracingOption(CompilerConstants.PLUGIN_ID, "qvtp2qvts/debugGraphs"); - public static final @NonNull TracingOption DEPENDENCY_ANALYSIS = new TracingOption(CompilerConstants.PLUGIN_ID, "qvtp2qvts/dependencyAnalysis"); public static final @NonNull TracingOption DUMP_CLASS_TO_CONSUMING_NODES = new TracingOption(CompilerConstants.PLUGIN_ID, "qvtp2qvts/dump/class2consumingNodes"); public static final @NonNull TracingOption DUMP_CLASS_TO_CONTAINING_PROPERTIES = new TracingOption(CompilerConstants.PLUGIN_ID, "qvtp2qvts/dump/class2containingProperty"); public static final @NonNull TracingOption DUMP_CLASS_TO_REALIZED_NODES = new TracingOption(CompilerConstants.PLUGIN_ID, "qvtp2qvts/dump/class2realizedNodes"); diff --git a/tests/org.eclipse.qvtd.cs2as.compiler.tests/src/org/eclipse/qvtd/cs2as/compiler/tests/OCL2QVTiTestCases.java b/tests/org.eclipse.qvtd.cs2as.compiler.tests/src/org/eclipse/qvtd/cs2as/compiler/tests/OCL2QVTiTestCases.java index dce7e9fb2..08c2d0d8a 100644 --- a/tests/org.eclipse.qvtd.cs2as.compiler.tests/src/org/eclipse/qvtd/cs2as/compiler/tests/OCL2QVTiTestCases.java +++ b/tests/org.eclipse.qvtd.cs2as.compiler.tests/src/org/eclipse/qvtd/cs2as/compiler/tests/OCL2QVTiTestCases.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: * Adolfo Sanchez-Barbudo Herrera (University of York) - initial API and implementation *******************************************************************************/ @@ -37,6 +37,7 @@ import org.eclipse.ocl.pivot.utilities.ClassUtil; import org.eclipse.ocl.pivot.utilities.OCL; import org.eclipse.ocl.xtext.completeocl.CompleteOCLStandaloneSetup; import org.eclipse.qvtd.compiler.CompilerChain.Key; +import org.eclipse.qvtd.compiler.internal.qvtp2qvts.DependencyAnalyzer; import org.eclipse.qvtd.cs2as.compiler.CS2ASJavaCompilerParameters; import org.eclipse.qvtd.cs2as.compiler.internal.CS2ASJavaCompilerImpl; import org.eclipse.qvtd.cs2as.compiler.internal.CS2ASJavaCompilerParametersImpl; @@ -76,24 +77,24 @@ import example4.kiamacs.KiamacsPackage; */ public class OCL2QVTiTestCases extends LoadTestCase { -// private static final boolean CREATE_GRAPHML = false; // Note. You need Epsilon with Bug 458724 fix to have output graphml models serialised + // private static final boolean CREATE_GRAPHML = false; // Note. You need Epsilon with Bug 458724 fix to have output graphml models serialised private static final @NonNull String TESTS_GEN_PATH = "../org.eclipse.qvtd.cs2as.compiler.tests/tests-gen/"; private static final @NonNull String TESTS_PACKAGE_NAME = "cg"; -// private static final @NonNull String DEBUG_SEGMENT = "debug"; + // private static final @NonNull String DEBUG_SEGMENT = "debug"; private static @NonNull URI TESTS_BASE_URI = URI.createPlatformResourceURI("org.eclipse.qvtd.cs2as.compiler.tests/src/org/eclipse/qvtd/cs2as/compiler/tests/models", true); - + protected static class MyQVT extends QVTimperative { protected final @NonNull String testName; protected final @NonNull URI baseURI; -// protected final @NonNull URI samplesBaseUri; + // protected final @NonNull URI samplesBaseUri; private Set<@NonNull String> nsURIs = new HashSet<@NonNull String>(); - + public MyQVT(@NonNull String testName) { super(new QVTiEnvironmentFactory(getProjectMap(), null)); this.testName = testName; this.baseURI = TESTS_BASE_URI.appendSegment(testName); -// this.samplesBaseUri = baseURI.appendSegment("samples"); + // this.samplesBaseUri = baseURI.appendSegment("samples"); } @Override @@ -107,7 +108,7 @@ public class OCL2QVTiTestCases extends LoadTestCase { EPackage.Registry.INSTANCE.remove(nsURI); } } - + // // Execute the transformation with the interpreter // @@ -115,12 +116,12 @@ public class OCL2QVTiTestCases extends LoadTestCase { TransformationExecutor evaluator = new QVTiTransformationExecutor(getEnvironmentFactory(), txClass); Transformer tx = evaluator.getTransformer(); URI samplesBaseUri = baseURI.appendSegment("samples"); - URI csModelURI = samplesBaseUri.appendSegment(String.format("%s_input.xmi", modelName)); - URI asModelURI = samplesBaseUri.appendSegment(String.format("%s_output_CG.xmi", modelName)); - URI expectedAsModelURI = samplesBaseUri.appendSegment(String.format("%s_output_ref.xmi", modelName)); - saveEmptyModel(asModelURI); + URI csModelURI = samplesBaseUri.appendSegment(String.format("%s_input.xmi", modelName)); + URI asModelURI = samplesBaseUri.appendSegment(String.format("%s_output_CG.xmi", modelName)); + URI expectedAsModelURI = samplesBaseUri.appendSegment(String.format("%s_output_ref.xmi", modelName)); + saveEmptyModel(asModelURI); - ResourceSet rSet = getResourceSet(); + ResourceSet rSet = getResourceSet(); Resource inputResource = rSet.getResource(csModelURI, true); tx.addRootObjects(OCL2QVTp.LEFT_MODEL_TYPE_NAME, ClassUtil.nonNullState(inputResource.getContents())); assertTrue(tx.run()); @@ -148,19 +149,19 @@ public class OCL2QVTiTestCases extends LoadTestCase { BasicQVTiExecutor testEvaluator = new QVTiIncrementalExecutor(getEnvironmentFactory(), tx, QVTiIncrementalExecutor.Mode.LAZY); //testEvaluator.saveTransformation(null); - testEvaluator.loadModel(OCL2QVTp.LEFT_MODEL_TYPE_NAME, csModelURI); - testEvaluator.createModel(OCL2QVTp.RIGHT_MODEL_TYPE_NAME, asModelURI, null); - boolean success = testEvaluator.execute(); - testEvaluator.saveModels(TestsXMLUtil.defaultSavingOptions); - testEvaluator.dispose(); - assertTrue(success); - ResourceSet rSet = getResourceSet(); - Resource expected = rSet.getResource(expectedAsModelURI, true); - Resource actual = rSet.getResource(asModelURI, true); - assert (expected != null) && (actual != null); + testEvaluator.loadModel(OCL2QVTp.LEFT_MODEL_TYPE_NAME, csModelURI); + testEvaluator.createModel(OCL2QVTp.RIGHT_MODEL_TYPE_NAME, asModelURI, null); + boolean success = testEvaluator.execute(); + testEvaluator.saveModels(TestsXMLUtil.defaultSavingOptions); + testEvaluator.dispose(); + assertTrue(success); + ResourceSet rSet = getResourceSet(); + Resource expected = rSet.getResource(expectedAsModelURI, true); + Resource actual = rSet.getResource(asModelURI, true); + assert (expected != null) && (actual != null); assertSameModel(expected, actual); } - + protected @NonNull Transformation executeNewOCL2QVTi_CompilerChain (@NonNull String oclDoc, String... extendedOclDocs) throws IOException { URI mainOclDocURI = baseURI.appendSegment(oclDoc); URI[] oclDocURIs = new URI[extendedOclDocs.length]; @@ -175,9 +176,9 @@ public class OCL2QVTiTestCases extends LoadTestCase { URI serializedURI = txURI.trimFileExtension().appendFileExtension("serialized.qvti"); doSerialize(inputURI, serializedURI); } - return qvtiTransf; + return qvtiTransf; } - + protected void loadEcoreFile(String ecoreFileName, EPackage ePackage) { URI fileURI = baseURI.appendSegment(ecoreFileName); @@ -197,7 +198,7 @@ public class OCL2QVTiTestCases extends LoadTestCase { } } } - + protected void loadGenModels(String... genModelNames) { if (genModelNames != null) { for (String genModelName : genModelNames) { @@ -218,10 +219,11 @@ public class OCL2QVTiTestCases extends LoadTestCase { Resource r = rSet.createResource(modelURI); r.save(TestsXMLUtil.defaultSavingOptions); } - + protected @NonNull Map<@NonNull String, @Nullable Map<@NonNull Key<Object>, @Nullable Object>> createTestCasesCompilerOptions() { Map<@NonNull String, @Nullable Map<@NonNull Key<Object>, @Nullable Object>> options = new HashMap<@NonNull String, @Nullable Map<@NonNull Key<Object>, @Nullable Object>>(); OCL2QVTiCompilerChain.setOption(options, OCL2QVTiCompilerChain.DEFAULT_STEP, OCL2QVTiCompilerChain.SAVE_OPTIONS_KEY, TestsXMLUtil.defaultSavingOptions); + OCL2QVTiCompilerChain.setOption(options, OCL2QVTiCompilerChain.DEFAULT_STEP, OCL2QVTiCompilerChain.DEBUG_KEY, true); // TODO problem when validating OCL2QVTiCompilerChain.setOption(options, OCL2QVTiCompilerChain.DEFAULT_STEP, OCL2QVTiCompilerChain.VALIDATE_KEY, true); return options; } @@ -233,12 +235,12 @@ public class OCL2QVTiTestCases extends LoadTestCase { public OCL2QVTiCompilerTester(@NonNull URI baseURI, @NonNull String oclDocName, @NonNull QVTimperative metaModelManager) { super(metaModelManager, null, baseURI.appendSegment(oclDocName)); } - + // For testing purpose -// @Override -// protected Resource ocl2qvtp(URI oclDocURI) throws IOException { -// return super.ocl2qvtp(oclDocURI); -// } + // @Override + // protected Resource ocl2qvtp(URI oclDocURI) throws IOException { + // return super.ocl2qvtp(oclDocURI); + // } } @Override @@ -262,34 +264,34 @@ public class OCL2QVTiTestCases extends LoadTestCase { myQVT.loadGenModels("SourceMM1.genmodel", "TargetMM1.genmodel"); Transformation qvtiTransf = myQVT.executeNewOCL2QVTi_CompilerChain("Source2Target.ocl"); CS2ASJavaCompilerParameters cgParams = new CS2ASJavaCompilerParametersImpl( - "example1.target.lookup.util.TargetLookupSolver", - "example1.target.lookup.util.TargetLookupResult", - TESTS_GEN_PATH, TESTS_PACKAGE_NAME); + "example1.target.lookup.util.TargetLookupSolver", + "example1.target.lookup.util.TargetLookupResult", + TESTS_GEN_PATH, TESTS_PACKAGE_NAME); Class<? extends Transformer> txClass = new CS2ASJavaCompilerImpl().compileTransformation(myQVT, qvtiTransf, cgParams); myQVT.executeModelsTX_CG(txClass, "model1"); myQVT.executeModelsTX_CG(txClass, "model2"); myQVT.executeModelsTX_CG(txClass, "model3"); myQVT.dispose(); } - + @Test public void testExample1_Interpreted() throws Exception { testCaseAppender.uninstall(); // Silence Log failures warning that *.ocl has *.ecore rather than http:// references MyQVT myQVT = new MyQVT("example1"); myQVT.loadGenModels("SourceMM1.genmodel", "TargetMM1.genmodel"); - + Transformation qvtiTransf = myQVT.executeNewOCL2QVTi_CompilerChain("Source2Target.ocl"); URI txURI = qvtiTransf.eResource().getURI(); - + myQVT.dispose(); myQVT = new MyQVT("example1"); myQVT.loadEcoreFile("SourceMM1.ecore", SourcePackage.eINSTANCE); myQVT.loadEcoreFile("TargetMM1.ecore", TargetPackage.eINSTANCE); Transformation tx = getTransformation(myQVT.getMetamodelManager().getASResourceSet(), txURI); -// myQVT.getEnvironmentFactory().setEvaluationTracingEnabled(true); - myQVT.executeModelsTX_Interpreted(tx, "model1"); - myQVT.executeModelsTX_Interpreted(tx, "model2"); - myQVT.executeModelsTX_Interpreted(tx, "model3"); + // myQVT.getEnvironmentFactory().setEvaluationTracingEnabled(true); + myQVT.executeModelsTX_Interpreted(tx, "model1"); + myQVT.executeModelsTX_Interpreted(tx, "model2"); + myQVT.executeModelsTX_Interpreted(tx, "model3"); myQVT.dispose(); } @@ -306,24 +308,24 @@ public class OCL2QVTiTestCases extends LoadTestCase { assertValidQVTiModel(qvtpFileURI); myQVT.dispose(); } - + @Test public void testExample2_CG() throws Exception { -// Scheduler.EDGE_ORDER.setState(true); -// Scheduler.REGION_DEPTH.setState(true); -// Scheduler.REGION_ORDER.setState(true); -// Scheduler.REGION_TRAVERSAL.setState(true); -// QVTs2QVTiVisitor.POLLED_PROPERTIES.setState(true); -// Scheduler.DEPENDENCY_ANALYSIS.setState(true); -// AbstractTransformer.INVOCATIONS.setState(true); + // Scheduler.EDGE_ORDER.setState(true); + // Scheduler.REGION_DEPTH.setState(true); + // Scheduler.REGION_ORDER.setState(true); + // Scheduler.REGION_TRAVERSAL.setState(true); + // QVTs2QVTiVisitor.POLLED_PROPERTIES.setState(true); + // Scheduler.DEPENDENCY_ANALYSIS.setState(true); + // AbstractTransformer.INVOCATIONS.setState(true); MyQVT myQVT = new MyQVT("example2"); myQVT.loadGenModels("ClassesCS.genmodel", "Classes.genmodel"); Transformation qvtiTransf = myQVT.executeNewOCL2QVTi_CompilerChain("classescs2as.ocl"); CS2ASJavaCompilerParameters cgParams = new CS2ASJavaCompilerParametersImpl( - "example2.classes.lookup.util.ClassesLookupSolver", - "example2.classes.lookup.util.ClassesLookupResult", - TESTS_GEN_PATH, TESTS_PACKAGE_NAME); + "example2.classes.lookup.util.ClassesLookupSolver", + "example2.classes.lookup.util.ClassesLookupResult", + TESTS_GEN_PATH, TESTS_PACKAGE_NAME); Class<? extends Transformer> txClass = new CS2ASJavaCompilerImpl().compileTransformation(myQVT, qvtiTransf, cgParams); myQVT.executeModelsTX_CG(txClass, "model1"); myQVT.executeModelsTX_CG(txClass, "model2"); @@ -334,106 +336,110 @@ public class OCL2QVTiTestCases extends LoadTestCase { myQVT.executeModelsTX_CG(txClass, "model7"); myQVT.dispose(); } - + @Test public void testExample2_Interpreted() throws Exception { + // DependencyAnalyzer.START.setState(true); + // DependencyAnalyzer.FAIL.setState(true); + // DependencyAnalyzer.FINISH.setState(true); + DependencyAnalyzer.RETURN.setState(true); testCaseAppender.uninstall(); // Silence Log failures warning that *.ocl has *.ecore rather than http:// references MyQVT myQVT = new MyQVT("example2"); myQVT.loadGenModels("ClassesCS.genmodel", "Classes.genmodel"); - + Transformation qvtiTransf = myQVT.executeNewOCL2QVTi_CompilerChain("classescs2as.ocl"); URI txURI = qvtiTransf.eResource().getURI(); - + myQVT.dispose(); myQVT = new MyQVT("example2"); myQVT.loadEcoreFile("ClassesCS.ecore", ClassescsPackage.eINSTANCE); myQVT.loadEcoreFile("Classes.ecore", ClassesPackage.eINSTANCE); Transformation tx = getTransformation(myQVT.getMetamodelManager().getASResourceSet(), txURI); -// myQVT.getEnvironmentFactory().setEvaluationTracingEnabled(true); - myQVT.executeModelsTX_Interpreted(tx, "model1"); - myQVT.executeModelsTX_Interpreted(tx, "model2"); - myQVT.executeModelsTX_Interpreted(tx, "model3"); -// myQVT.executeModelsTX_Interpreted(tx, "model4"); -// myQVT.executeModelsTX_Interpreted(tx, "model5"); -// myQVT.executeModelsTX_Interpreted(tx, "model6"); -// myQVT.executeModelsTX_Interpreted(tx, "model7"); + // myQVT.getEnvironmentFactory().setEvaluationTracingEnabled(true); + myQVT.executeModelsTX_Interpreted(tx, "model1"); + myQVT.executeModelsTX_Interpreted(tx, "model2"); + myQVT.executeModelsTX_Interpreted(tx, "model3"); + // myQVT.executeModelsTX_Interpreted(tx, "model4"); + // myQVT.executeModelsTX_Interpreted(tx, "model5"); + // myQVT.executeModelsTX_Interpreted(tx, "model6"); + // myQVT.executeModelsTX_Interpreted(tx, "model7"); myQVT.dispose(); } @Test public void testExample2_V2_CG() throws Exception { -// Scheduler.DUMP_CLASS_TO_CONSUMING_NODES.setState(true); -// Scheduler.DUMP_CLASS_TO_CONTAINING_PROPERTIES.setState(true); -// Scheduler.DUMP_CLASS_TO_REALIZED_NODES.setState(true); -// Scheduler.DUMP_INPUT_MODEL_TO_DOMAIN_USAGE.setState(true); -// Scheduler.DUMP_PROPERTY_TO_CONSUMING_CLASSES.setState(true); -// Scheduler.EDGE_ORDER.setState(true); -// Scheduler.REGION_DEPTH.setState(true); -// Scheduler.REGION_ORDER.setState(true); -// Scheduler.REGION_TRAVERSAL.setState(true); -// QVTs2QVTiVisitor.POLLED_PROPERTIES.setState(true); -// Scheduler.DEPENDENCY_ANALYSIS.setState(true); -// AbstractTransformer.INVOCATIONS.setState(true); + // Scheduler.DUMP_CLASS_TO_CONSUMING_NODES.setState(true); + // Scheduler.DUMP_CLASS_TO_CONTAINING_PROPERTIES.setState(true); + // Scheduler.DUMP_CLASS_TO_REALIZED_NODES.setState(true); + // Scheduler.DUMP_INPUT_MODEL_TO_DOMAIN_USAGE.setState(true); + // Scheduler.DUMP_PROPERTY_TO_CONSUMING_CLASSES.setState(true); + // Scheduler.EDGE_ORDER.setState(true); + // Scheduler.REGION_DEPTH.setState(true); + // Scheduler.REGION_ORDER.setState(true); + // Scheduler.REGION_TRAVERSAL.setState(true); + // QVTs2QVTiVisitor.POLLED_PROPERTIES.setState(true); + DependencyAnalyzer.FINISH.setState(true); + // AbstractTransformer.INVOCATIONS.setState(true); MyQVT myQVT = new MyQVT("example2"); OCLstdlibPackage.eINSTANCE.getName(); myQVT.loadGenModels("ClassesCS.genmodel", "Classes.genmodel"); Transformation qvtiTransf = myQVT.executeNewOCL2QVTi_CompilerChain("classescs2asV2.ocl"); CS2ASJavaCompilerParameters cgParams = new CS2ASJavaCompilerParametersImpl( - "example2.classes.lookup.util.ClassesLookupSolver", - "example2.classes.lookup.util.ClassesLookupResult", - TESTS_GEN_PATH, TESTS_PACKAGE_NAME); + "example2.classes.lookup.util.ClassesLookupSolver", + "example2.classes.lookup.util.ClassesLookupResult", + TESTS_GEN_PATH, TESTS_PACKAGE_NAME); Class<? extends Transformer> txClass = new CS2ASJavaCompilerImpl().compileTransformation(myQVT, qvtiTransf, cgParams); - + myQVT.dispose(); myQVT = new MyQVT("example2"); myQVT.loadEcoreFile("ClassesCS.ecore", ClassescsPackage.eINSTANCE); myQVT.loadEcoreFile("Classes.ecore", ClassesPackage.eINSTANCE); - + myQVT.executeModelsTX_CG(txClass, "model1V2"); myQVT.executeModelsTX_CG(txClass, "model2V2"); myQVT.executeModelsTX_CG(txClass, "model3V2"); myQVT.executeModelsTX_CG(txClass, "model4V2"); myQVT.dispose(); } - + @Test public void testExample2_V2_Interpreted() throws Exception { testCaseAppender.uninstall(); // Silence Log failures warning that *.ocl has *.ecore rather than http:// references MyQVT myQVT = new MyQVT("example2"); myQVT.loadGenModels("ClassesCS.genmodel", "Classes.genmodel"); - + Transformation qvtiTransf = myQVT.executeNewOCL2QVTi_CompilerChain("classescs2asV2.ocl"); URI txURI = qvtiTransf.eResource().getURI(); - + myQVT.dispose(); myQVT = new MyQVT("example2"); OCLstdlibPackage.eINSTANCE.getName(); myQVT.loadEcoreFile("ClassesCS.ecore", ClassescsPackage.eINSTANCE); myQVT.loadEcoreFile("Classes.ecore", ClassesPackage.eINSTANCE); Transformation tx = getTransformation(myQVT.getMetamodelManager().getASResourceSet(), txURI); - myQVT.executeModelsTX_Interpreted(tx, "model1V2"); - myQVT.executeModelsTX_Interpreted(tx, "model2V2"); - myQVT.executeModelsTX_Interpreted(tx, "model3V2"); - myQVT.executeModelsTX_Interpreted(tx, "model4V2"); + myQVT.executeModelsTX_Interpreted(tx, "model1V2"); + myQVT.executeModelsTX_Interpreted(tx, "model2V2"); + myQVT.executeModelsTX_Interpreted(tx, "model3V2"); + myQVT.executeModelsTX_Interpreted(tx, "model4V2"); myQVT.dispose(); } - -// Note supported anymore -// @Test -// public void testExample2_OCL2QVTp_MiddleModel() throws Exception { -// MyQVT myQVT = new MyQVT("example2"); -// URI baseURI = TESTS_BASE_URI.appendSegment("example2"); -// URI oclDocURI = baseURI.appendSegment("classescs2as.ocl.oclas"); -// URI qvtpFileURI = baseURI.appendSegment("classescs2as.qvtp.qvtcas"); -// URI tracesMMURI = baseURI.appendSegment("classescs2as.ecore.oclas"); -// -// OCL2QVTiBrokerTester mtc = new OCL2QVTiBrokerTester(baseURI, "classescs2as.ocl", myQVT, false); -// mtc.runOCL2QVTp_MiddleModel(oclDocURI, qvtpFileURI, tracesMMURI); -// // Test the QVTp transformation can be loaded -// assertValidQVTiModel(qvtpFileURI); -// myQVT.dispose(); -// } - + + // Note supported anymore + // @Test + // public void testExample2_OCL2QVTp_MiddleModel() throws Exception { + // MyQVT myQVT = new MyQVT("example2"); + // URI baseURI = TESTS_BASE_URI.appendSegment("example2"); + // URI oclDocURI = baseURI.appendSegment("classescs2as.ocl.oclas"); + // URI qvtpFileURI = baseURI.appendSegment("classescs2as.qvtp.qvtcas"); + // URI tracesMMURI = baseURI.appendSegment("classescs2as.ecore.oclas"); + // + // OCL2QVTiBrokerTester mtc = new OCL2QVTiBrokerTester(baseURI, "classescs2as.ocl", myQVT, false); + // mtc.runOCL2QVTp_MiddleModel(oclDocURI, qvtpFileURI, tracesMMURI); + // // Test the QVTp transformation can be loaded + // assertValidQVTiModel(qvtpFileURI); + // myQVT.dispose(); + // } + @Test public void testExample2_OCL2QVTp_MiddleFolded() throws Exception { MyQVT myQVT = new MyQVT("example2"); @@ -450,88 +456,88 @@ public class OCL2QVTiTestCases extends LoadTestCase { @Test public void testExample3_CG() throws Exception { -// Scheduler.CONNECTION_CREATION.setState(true); -// Scheduler.CONNECTION_ROUTING.setState(true); -// Scheduler.DEBUG_GRAPHS.setState(true); -// Scheduler.EDGE_ORDER.setState(true); -// Scheduler.REGION_CYCLES.setState(true); -// Scheduler.REGION_DEPTH.setState(true); -// Scheduler.REGION_ORDER.setState(true); -// Scheduler.REGION_STACK.setState(true); + // Scheduler.CONNECTION_CREATION.setState(true); + // Scheduler.CONNECTION_ROUTING.setState(true); + // Scheduler.DEBUG_GRAPHS.setState(true); + // Scheduler.EDGE_ORDER.setState(true); + // Scheduler.REGION_CYCLES.setState(true); + // Scheduler.REGION_DEPTH.setState(true); + // Scheduler.REGION_ORDER.setState(true); + // Scheduler.REGION_STACK.setState(true); MyQVT myQVT = new MyQVT("example3"); myQVT.loadGenModels("KiamaAS.genmodel", "KiamaCS.genmodel"); Transformation qvtiTransf = myQVT.executeNewOCL2QVTi_CompilerChain("KiamaRewrite.ocl"); CS2ASJavaCompilerParameters cgParams = new CS2ASJavaCompilerParametersImpl("","", - TESTS_GEN_PATH, TESTS_PACKAGE_NAME); + TESTS_GEN_PATH, TESTS_PACKAGE_NAME); Class<? extends Transformer> txClass = new CS2ASJavaCompilerImpl().compileTransformation(myQVT, qvtiTransf, cgParams); -// myQVT.getEnvironmentFactory().setEvaluationTracingEnabled(true); -// FIXME BUG 484278 model0 has an invalid model TopCS.node[1] has a null value. -// executeModelsTX_CG(myQVT, txClass, testBaseURI, "model0"); + // myQVT.getEnvironmentFactory().setEvaluationTracingEnabled(true); + // FIXME BUG 484278 model0 has an invalid model TopCS.node[1] has a null value. + // executeModelsTX_CG(myQVT, txClass, testBaseURI, "model0"); myQVT.executeModelsTX_CG(txClass, "model1"); myQVT.dispose(); } - + @Test public void testExample3_Interpreted() throws Exception { MyQVT myQVT = new MyQVT("example3"); myQVT.loadGenModels("KiamaAS.genmodel", "KiamaCS.genmodel"); Transformation tx = myQVT.executeNewOCL2QVTi_CompilerChain("KiamaRewrite.ocl"); - myQVT.executeModelsTX_Interpreted(tx, "model1"); + myQVT.executeModelsTX_Interpreted(tx, "model1"); myQVT.dispose(); - } - + } + @Test public void testExample4_CG() throws Exception { -// CommonSubexpressionEliminator.CSE_BUILD.setState(true); -// CommonSubexpressionEliminator.CSE_PLACES.setState(true); -// CommonSubexpressionEliminator.CSE_PRUNE.setState(true); -// CommonSubexpressionEliminator.CSE_PULL_UP.setState(true); -// CommonSubexpressionEliminator.CSE_PUSH_UP.setState(true); -// CommonSubexpressionEliminator.CSE_REWRITE.setState(true); -// Scheduler.EDGE_ORDER.setState(true); -// Scheduler.REGION_DEPTH.setState(true); -// Scheduler.REGION_ORDER.setState(true); -// Scheduler.REGION_TRAVERSAL.setState(true); -// QVTs2QVTiVisitor.POLLED_PROPERTIES.setState(true); -// AbstractTransformer.EXCEPTIONS.setState(true); -// AbstractTransformer.INVOCATIONS.setState(true); + // CommonSubexpressionEliminator.CSE_BUILD.setState(true); + // CommonSubexpressionEliminator.CSE_PLACES.setState(true); + // CommonSubexpressionEliminator.CSE_PRUNE.setState(true); + // CommonSubexpressionEliminator.CSE_PULL_UP.setState(true); + // CommonSubexpressionEliminator.CSE_PUSH_UP.setState(true); + // CommonSubexpressionEliminator.CSE_REWRITE.setState(true); + // Scheduler.EDGE_ORDER.setState(true); + // Scheduler.REGION_DEPTH.setState(true); + // Scheduler.REGION_ORDER.setState(true); + // Scheduler.REGION_TRAVERSAL.setState(true); + // QVTs2QVTiVisitor.POLLED_PROPERTIES.setState(true); + // AbstractTransformer.EXCEPTIONS.setState(true); + // AbstractTransformer.INVOCATIONS.setState(true); MyQVT myQVT = new MyQVT("example4"); myQVT.loadGenModels("SimplerKiamaAS.genmodel", "SimplerKiamaCS.genmodel"); Transformation qvtiTransf = myQVT.executeNewOCL2QVTi_CompilerChain("SimplerKiama.ocl"); CS2ASJavaCompilerParameters cgParams = new CS2ASJavaCompilerParametersImpl("","", - TESTS_GEN_PATH, TESTS_PACKAGE_NAME); + TESTS_GEN_PATH, TESTS_PACKAGE_NAME); Class<? extends Transformer> txClass = new CS2ASJavaCompilerImpl().compileTransformation(myQVT, qvtiTransf, cgParams); -// myQVT.getEnvironmentFactory().setEvaluationTracingEnabled(true); -// FIXME BUG 484278 model0 has an invalid model TopCS.node[1] has a null value. -// executeModelsTX_CG(myQVT, txClass, testBaseURI, "model0"); + // myQVT.getEnvironmentFactory().setEvaluationTracingEnabled(true); + // FIXME BUG 484278 model0 has an invalid model TopCS.node[1] has a null value. + // executeModelsTX_CG(myQVT, txClass, testBaseURI, "model0"); myQVT.executeModelsTX_CG(txClass, "model1"); myQVT.executeModelsTX_CG(txClass, "model2"); myQVT.executeModelsTX_CG(txClass, "model3"); myQVT.dispose(); } - + @Test public void testExample4_Interpreted() throws Exception { MyQVT myQVT = new MyQVT("example4"); myQVT.loadGenModels("SimplerKiamaAS.genmodel", "SimplerKiamaCS.genmodel"); Transformation qvtiTransf = myQVT.executeNewOCL2QVTi_CompilerChain("SimplerKiama.ocl"); URI txURI = qvtiTransf.eResource().getURI(); - + myQVT.dispose(); myQVT = new MyQVT("example4"); myQVT.loadEcoreFile("SimplerKiamaCS.ecore", KiamacsPackage.eINSTANCE); myQVT.loadEcoreFile("SimplerKiamaAS.ecore", KiamaasPackage.eINSTANCE); - + Transformation tx = getTransformation(myQVT.getMetamodelManager().getASResourceSet(), txURI); -// myQVT.getEnvironmentFactory().setEvaluationTracingEnabled(true); -// FIXME BUG 484278 model0 has an invalid model TopCS.node[1] has a null value. -// executeModelsTX_Interpreted(myQVT, qvtiTransf, baseURI, "model0"); - myQVT.executeModelsTX_Interpreted(tx, "model1"); - myQVT.executeModelsTX_Interpreted(tx, "model2"); - myQVT.executeModelsTX_Interpreted(tx, "model3"); + // myQVT.getEnvironmentFactory().setEvaluationTracingEnabled(true); + // FIXME BUG 484278 model0 has an invalid model TopCS.node[1] has a null value. + // executeModelsTX_Interpreted(myQVT, qvtiTransf, baseURI, "model0"); + myQVT.executeModelsTX_Interpreted(tx, "model1"); + myQVT.executeModelsTX_Interpreted(tx, "model2"); + myQVT.executeModelsTX_Interpreted(tx, "model3"); myQVT.dispose(); } - + @Test public void testExample5_CG() throws Exception { MyQVT myQVT = new MyQVT("example5"); @@ -539,43 +545,43 @@ public class OCL2QVTiTestCases extends LoadTestCase { Transformation qvtiTransf = myQVT.executeNewOCL2QVTi_CompilerChain("Source2TargetBase.ocl"); CS2ASJavaCompilerParameters cgParams = new CS2ASJavaCompilerParametersImpl( - "", - "", - TESTS_GEN_PATH, TESTS_PACKAGE_NAME); + "", + "", + TESTS_GEN_PATH, TESTS_PACKAGE_NAME); Class<? extends Transformer> txClass = new CS2ASJavaCompilerImpl() - .compileTransformation(myQVT, qvtiTransf, cgParams); - + .compileTransformation(myQVT, qvtiTransf, cgParams); + // Execute CGed transformation myQVT.executeModelsTX_CG(txClass, "model1"); - + myQVT.dispose(); myQVT = new MyQVT("example5"); - myQVT.loadGenModels("SourceBaseMM.genmodel", "TargetBaseMM.genmodel", - "SourceDerivedMM.genmodel", "TargetDerivedMM.genmodel"); - - qvtiTransf = myQVT.executeNewOCL2QVTi_CompilerChain("Source2TargetDerived.ocl", + myQVT.loadGenModels("SourceBaseMM.genmodel", "TargetBaseMM.genmodel", + "SourceDerivedMM.genmodel", "TargetDerivedMM.genmodel"); + + qvtiTransf = myQVT.executeNewOCL2QVTi_CompilerChain("Source2TargetDerived.ocl", "Source2TargetBase.ocl"); txClass = new CS2ASJavaCompilerImpl() .compileTransformation(myQVT, qvtiTransf, cgParams); - + // Execute CGed transformation myQVT.executeModelsTX_CG(txClass, "model2"); myQVT.dispose(); } - + @Test public void testExample5_Interpreted() throws Exception { MyQVT myQVT = new MyQVT("example5"); myQVT.loadGenModels("SourceBaseMM.genmodel", "TargetBaseMM.genmodel"); Transformation tx = myQVT.executeNewOCL2QVTi_CompilerChain("Source2TargetBase.ocl"); - myQVT.executeModelsTX_Interpreted(tx, "model1"); - + myQVT.executeModelsTX_Interpreted(tx, "model1"); + myQVT.dispose(); myQVT = new MyQVT("example5"); - myQVT.loadGenModels("SourceBaseMM.genmodel", "TargetBaseMM.genmodel", - "SourceDerivedMM.genmodel", "TargetDerivedMM.genmodel"); - tx = myQVT.executeNewOCL2QVTi_CompilerChain("Source2TargetDerived.ocl", + myQVT.loadGenModels("SourceBaseMM.genmodel", "TargetBaseMM.genmodel", + "SourceDerivedMM.genmodel", "TargetDerivedMM.genmodel"); + tx = myQVT.executeNewOCL2QVTi_CompilerChain("Source2TargetDerived.ocl", "Source2TargetBase.ocl"); myQVT.executeModelsTX_Interpreted(tx, "model2"); myQVT.dispose(); @@ -588,20 +594,20 @@ public class OCL2QVTiTestCases extends LoadTestCase { // MetaModelManager.initializeASResourceSet(asResourceSet); assertValidModel(asURI, asResourceSet); } - */ + */ protected static void assertValidModel(URI asURI, ResourceSet rSet) { Resource resource = rSet.getResource(asURI, true); - EcoreUtil.resolveAll(resource); + EcoreUtil.resolveAll(resource); String rUriString = resource.getURI().toString(); assertNoUnresolvedProxies("Validating a resource: " + rUriString, resource); - assertNoResourceErrors("Loading a resource" + rUriString, resource); - //assertNoValidationErrors("Loading a resource" + rUriString, resource); + assertNoResourceErrors("Loading a resource" + rUriString, resource); + //assertNoValidationErrors("Loading a resource" + rUriString, resource); } protected static void assertValidQVTiModel(@NonNull URI asURI) { - + // We don't generate QVTi models anymore. Perhaps do a QVTc validation if there is a QVTcore.ocl file } @@ -620,15 +626,15 @@ public class OCL2QVTiTestCases extends LoadTestCase { } } throw new IllegalStateException("No transformation"); - } - + } + // 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); + assertNoResourceErrors("Conversion failed", xtextResource); assertNoDiagnosticErrors("Concrete Syntax validation failed", xtextResource); - try { + try { xtextResource.save(TestsXMLUtil.defaultSavingOptions); } catch (Exception e) { @@ -646,7 +652,7 @@ public class OCL2QVTiTestCases extends LoadTestCase { ResourceSet resourceSet = new ResourceSetImpl(); // // Load QVTcAS - // + // OCL ocl = QVTbase.newInstance(OCL.NO_PROJECTS); ocl.getEnvironmentFactory().setSeverity(PivotTables.STR_Variable_c_c_CompatibleInitialiserType, StatusCodes.Severity.IGNORE); try { @@ -656,7 +662,7 @@ public class OCL2QVTiTestCases extends LoadTestCase { assertNoValidationErrors("Normalisation invalid", asResource); // // Pivot to CS - // + // XtextResource xtextResource = pivot2cs(ocl, resourceSet, asResource, serializedURI); resourceSet.getResources().clear(); return xtextResource; @@ -671,16 +677,16 @@ public class OCL2QVTiTestCases extends LoadTestCase { 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(); + // 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); + // Resource xtextResource = resourceSet.createResource(outputURI, OCLinEcoreCSTPackage.eCONTENT_TYPE); + // XtextResource xtextResource = (XtextResource) resourceSet.createResource(outputURI); + // xtextResource.getContents().add(documentCS); return (ASResource) asResource; } - + } |