Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEd Willink2016-01-11 12:49:55 +0000
committerEd Willink2016-01-12 13:56:16 +0000
commit13ec534a6bf8dc8e4b1cce9bcc74f4788a845eea (patch)
tree6b780d136226220082ff0d03a6ae198ddbb4d37a
parent78431c9c7904149bfc9b0eec39fbf95aa54cbac7 (diff)
downloadorg.eclipse.qvtd-13ec534a6bf8dc8e4b1cce9bcc74f4788a845eea.tar.gz
org.eclipse.qvtd-13ec534a6bf8dc8e4b1cce9bcc74f4788a845eea.tar.xz
org.eclipse.qvtd-13ec534a6bf8dc8e4b1cce9bcc74f4788a845eea.zip
[485165] Add more scheduler debug options
-rw-r--r--plugins/org.eclipse.qvtd.compiler/.options10
-rw-r--r--plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/scheduler/OperationRegion.java5
-rw-r--r--plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/scheduler/ScheduledRegion.java79
-rw-r--r--plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/scheduler/Scheduler.java5
-rw-r--r--tests/org.eclipse.qvtd.cs2as.compiler.tests/src/org/eclipse/qvtd/cs2as/compiler/tests/OCL2QVTiTestCases.java6
5 files changed, 102 insertions, 3 deletions
diff --git a/plugins/org.eclipse.qvtd.compiler/.options b/plugins/org.eclipse.qvtd.compiler/.options
index d6449fdb6..101149c54 100644
--- a/plugins/org.eclipse.qvtd.compiler/.options
+++ b/plugins/org.eclipse.qvtd.compiler/.options
@@ -2,6 +2,16 @@
# 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
+org.eclipse.qvtd.compiler/qvtp2qvts/dump/consumedProperties=false
+# Turn on dump of the realized node for each produced class
+org.eclipse.qvtd.compiler/qvtp2qvts/dump/class2realizedNodes=false
+# Turn on dump of the domain usage for each input model
+org.eclipse.qvtd.compiler/qvtp2qvts/dump/inputModel2domainUsage=false
+# Turn on dump of the possible containing properties for each class
+org.eclipse.qvtd.compiler/qvtp2qvts/dump/property2consumingClass=false
# Turn on tracing of the region depth computation
org.eclipse.qvtd.compiler/qvtp2qvts/regionDepth=false
# Turn on tracing of the region connection locality computation
diff --git a/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/scheduler/OperationRegion.java b/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/scheduler/OperationRegion.java
index 1d86652ea..30c1db323 100644
--- a/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/scheduler/OperationRegion.java
+++ b/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/scheduler/OperationRegion.java
@@ -36,7 +36,6 @@ import org.eclipse.qvtd.compiler.internal.scheduler.DependencyAnalyzer.Dependenc
import org.eclipse.qvtd.compiler.internal.scheduler.DependencyAnalyzer.NavigationDependencyStep;
import org.eclipse.qvtd.pivot.qvtbase.TypedModel;
import org.eclipse.qvtd.pivot.qvtcorebase.analysis.DomainUsage;
-import org.eclipse.qvtd.pivot.schedule.ClassDatum;
import org.eclipse.qvtd.pivot.schedule.utilities.GraphStringBuilder;
import com.google.common.collect.Iterables;
@@ -90,7 +89,7 @@ public class OperationRegion extends AbstractMappingRegion
DependencyStep classStep = steps.get(0);
DomainUsage stepUsage = classStep.getUsage();
if (stepUsage.isEnforceable() && !stepUsage.isCheckable()) {
- System.out.println("!checkable && enforceable: " + steps);
+// System.out.println("!checkable && enforceable: " + steps);
org.eclipse.ocl.pivot.Class stepType = steps.get(0).getElementalType();
TypedModel typedModel = stepUsage.getTypedModel();
assert typedModel != null;
@@ -135,7 +134,7 @@ public class OperationRegion extends AbstractMappingRegion
}
}
else {
- System.out.println("checkable || !enforceable: " + steps);
+// System.out.println("checkable || !enforceable: " + steps);
}
}
}
diff --git a/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/scheduler/ScheduledRegion.java b/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/scheduler/ScheduledRegion.java
index 35b734ab6..b0b9e5e2e 100644
--- a/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/scheduler/ScheduledRegion.java
+++ b/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/scheduler/ScheduledRegion.java
@@ -18,6 +18,8 @@ import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
+import java.util.function.BinaryOperator;
+import java.util.stream.Stream;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.jdt.annotation.NonNull;
@@ -126,6 +128,10 @@ public class ScheduledRegion extends AbstractRegion
}
return true;
}
+
+ public static @NonNull BinaryOperator<@NonNull String> stringJoin(@NonNull String delimiter) {
+ return (a, b) -> String.valueOf(a) + delimiter + String.valueOf(b);
+ }
private final @NonNull String name;
protected final @NonNull CompleteModel completeModel;
@@ -1048,6 +1054,7 @@ public class ScheduledRegion extends AbstractRegion
addRegion(rootContainmentRegion);
@SuppressWarnings("null")@NonNull Set<ClassDatumAnalysis> consumedClassDatumAnalyses = consumedClassDatumAnalysis2headNodes.keySet(); // FIXME all consumed classes
for (@SuppressWarnings("null")@NonNull ClassDatumAnalysis consumedClassDatumAnalysis : consumedClassDatumAnalyses) {
+// System.out.println("ScheduledRegion.createRootContainmentRegion: " + consumedClassDatumAnalysis);
boolean canBeAtRoot = !consumedClassDatumAnalysis.getDomainUsage().isEnforceable();
if (consumedClassDatumAnalysis.getClassDatum().getType() instanceof DataType) {
canBeAtRoot = false;
@@ -1086,22 +1093,37 @@ public class ScheduledRegion extends AbstractRegion
// Identify the input models.
//
computeInputModels();
+ if (Scheduler.DUMP_INPUT_MODEL_TO_DOMAIN_USAGE.isActive()) {
+ Scheduler.DUMP_INPUT_MODEL_TO_DOMAIN_USAGE.println(dumpInputModels().reduce("", stringJoin("\n\t")));
+ }
//
// Identify all the containment relationships in the input models.
//
computeContainedClassDatumAnalysis2compositeProperties();
+ if (Scheduler.DUMP_CLASS_TO_CONTAINING_PROPERTIES.isActive()) {
+ Scheduler.DUMP_CLASS_TO_CONTAINING_PROPERTIES.println(dumpClass2ContainingProperties().reduce("", stringJoin("\n\t")));
+ }
//
// Identify all classes that are produced by mappings.
//
computeProducedClassDatumAnalysis2realizedNodes();
+ if (Scheduler.DUMP_CLASS_TO_REALIZED_NODES.isActive()) {
+ Scheduler.DUMP_CLASS_TO_REALIZED_NODES.println(dumpClass2ProducingNode().reduce("", stringJoin("\n\t")));
+ }
//
// Identify all classes that are consumed as independent inputs of mappings.
//
computeConsumedConsumedClassDatumAnalysis2headNodes();
+ if (Scheduler.DUMP_CLASS_TO_CONSUMING_NODES.isActive()) {
+ Scheduler.DUMP_CLASS_TO_CONSUMING_NODES.println(dumpClass2consumingNode().reduce("", stringJoin("\n\t")));
+ }
//
// Identify all classes that are transitively consumed as containers of consumed classes.
//
computeConsumedCompositeProperty2introducedClassDatumAnalyses();
+ if (Scheduler.DUMP_PROPERTY_TO_CONSUMING_CLASSES.isActive()) {
+ Scheduler.DUMP_PROPERTY_TO_CONSUMING_CLASSES.println(dumpClass2ConsumingProperty().reduce("", stringJoin("\n\t")));
+ }
//
// Create containment regions to traverse all in-use compositions to introduce all consumed classes.
//
@@ -1404,6 +1426,63 @@ public class ScheduledRegion extends AbstractRegion
}
} */
+ public Stream<String> dumpClass2consumingNode() {
+ Stream<String> entries = consumedClassDatumAnalysis2headNodes.keySet().stream().map(
+ k -> {
+ List<Node> list = consumedClassDatumAnalysis2headNodes.get(k);
+ return String.valueOf(k) + " : " + list.stream().map(
+ p -> p.getDisplayName()
+ ).sorted().reduce("", stringJoin("\n\t\t"));
+ }
+ );
+ return entries.sorted();
+ }
+
+ public Stream<String> dumpClass2ConsumingProperty() {
+ Stream<String> entries = consumedCompositeProperty2introducedClassDatumAnalyses.keySet().stream().map(
+ k -> {
+ Set<ClassDatumAnalysis> set = consumedCompositeProperty2introducedClassDatumAnalyses.get(k);
+ return String.valueOf(k) + " : " +
+ set.stream().map(
+ p -> p.toString()
+ ).sorted().reduce("", stringJoin("\n\t\t"));
+ }
+ );
+ return entries.sorted();
+ }
+
+ public Stream<String> dumpClass2ContainingProperties() {
+ Stream<String> entries = containedClassDatumAnalysis2compositeProperties.keySet().stream().map(
+ k -> {
+ Set<Property> set = containedClassDatumAnalysis2compositeProperties.get(k);
+ return String.valueOf(k) + " " + k.getClass().getSimpleName() + "@" + Integer.toHexString(System.identityHashCode(k)) + " : " + set.stream().map(
+ p -> String.valueOf(p)).sorted().reduce("", stringJoin("\n\t\t")
+ );
+ }
+ );
+ return entries.sorted();
+ }
+
+ public Stream<String> dumpClass2ProducingNode() {
+ Stream<String> entries = producedClassDatumAnalysis2realizedNodes.keySet().stream().map(
+ k -> {
+ List<Node> list = producedClassDatumAnalysis2realizedNodes.get(k);
+ return String.valueOf(k) + " : " +
+ list.stream().map(
+ p -> p.getDisplayName()
+ ).sorted().reduce("", stringJoin("\n\t\t")
+ );
+ }
+ );
+ return entries.sorted();
+ }
+
+ public Stream<String> dumpInputModels() {
+ Stream<String> entries = inputModels.keySet().stream().map(
+ k -> String.valueOf(k) + " : " + String.valueOf(inputModels.get(k)));
+ return entries.sorted();
+ }
+
public @NonNull Iterable<Region> getCallableRegions() {
List<Region> callableRegions = new ArrayList<Region>();
for (@SuppressWarnings("null")@NonNull Region region : getRegions()) {
diff --git a/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/scheduler/Scheduler.java b/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/scheduler/Scheduler.java
index fdfab726c..70610257b 100644
--- a/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/scheduler/Scheduler.java
+++ b/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/scheduler/Scheduler.java
@@ -47,6 +47,11 @@ import org.eclipse.qvtd.pivot.schedule.utilities.DependencyUtil;
public class Scheduler extends SchedulerConstants
{
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");
+ public static final @NonNull TracingOption DUMP_INPUT_MODEL_TO_DOMAIN_USAGE = new TracingOption(CompilerConstants.PLUGIN_ID, "qvtp2qvts/dump/inputModel2domainUsage");
+ public static final @NonNull TracingOption DUMP_PROPERTY_TO_CONSUMING_CLASSES = new TracingOption(CompilerConstants.PLUGIN_ID, "qvtp2qvts/dump/property2consumingClass");
public static final @NonNull TracingOption EDGE_ORDER = new TracingOption(CompilerConstants.PLUGIN_ID, "qvtp2qvts/edgeOrder");
public static final @NonNull TracingOption REGION_DEPTH = new TracingOption(CompilerConstants.PLUGIN_ID, "qvtp2qvts/regionDepth");
public static final @NonNull TracingOption REGION_LOCALITY = new TracingOption(CompilerConstants.PLUGIN_ID, "qvtp2qvts/regionLocality");
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 f6f3c109c..19cbbaea2 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
@@ -50,6 +50,7 @@ import org.eclipse.qvtd.compiler.internal.etl.EtlTask;
import org.eclipse.qvtd.compiler.internal.etl.MtcBroker;
import org.eclipse.qvtd.compiler.internal.etl.PivotModel;
import org.eclipse.qvtd.compiler.internal.etl.QvtMtcExecutionException;
+import org.eclipse.qvtd.compiler.internal.scheduler.Scheduler;
import org.eclipse.qvtd.cs2as.compiler.CS2ASJavaCompilerParameters;
import org.eclipse.qvtd.cs2as.compiler.internal.CS2ASJavaCompilerImpl;
import org.eclipse.qvtd.cs2as.compiler.internal.CS2ASJavaCompilerParametersImpl;
@@ -484,6 +485,11 @@ public class OCL2QVTiTestCases extends LoadTestCase {
@Test
public void testNewExample2_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);

Back to the top