[unrelated] root of where invocation is not realized.
diff --git a/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvtb2qvts/AbstractTransformationAnalysis.java b/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvtb2qvts/AbstractTransformationAnalysis.java
index 78f9d36..a554943 100644
--- a/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvtb2qvts/AbstractTransformationAnalysis.java
+++ b/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvtb2qvts/AbstractTransformationAnalysis.java
@@ -147,6 +147,9 @@
*/
public void analyzeSourceModel() {
for (@NonNull RuleAnalysis ruleAnalysis : rule2ruleAnalysis.values()) {
+ ruleAnalysis.analyzeInvocations();
+ }
+ for (@NonNull RuleAnalysis ruleAnalysis : rule2ruleAnalysis.values()) {
ruleAnalysis.analyzeSourceModel();
}
}
diff --git a/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvtb2qvts/RuleAnalysis.java b/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvtb2qvts/RuleAnalysis.java
index 7a135e6..4d94a71 100644
--- a/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvtb2qvts/RuleAnalysis.java
+++ b/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvtb2qvts/RuleAnalysis.java
@@ -78,6 +78,8 @@
// assert !rule.isIsAbstract() == scheduleManager.getScheduleModel().getOwnedMappingRegions().contains(ruleRegion);
}
+ public void analyzeInvocations() {}
+
public abstract void analyzeMappingRegion();
public void analyzeSourceModel() {}
diff --git a/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvtr2qvts/NonTopWhereBeforeWhenInvocationAnalysis.java b/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvtr2qvts/NonTopWhereBeforeWhenInvocationAnalysis.java
index 95eaff4..645ba0e 100644
--- a/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvtr2qvts/NonTopWhereBeforeWhenInvocationAnalysis.java
+++ b/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvtr2qvts/NonTopWhereBeforeWhenInvocationAnalysis.java
@@ -35,7 +35,7 @@
@Override
protected @NonNull Node createInvocationNode(@NonNull Node invokingTraceNode) {
- QVTrelationNameGenerator nameGenerator = (QVTrelationNameGenerator)scheduleManager.getNameGenerator(); // FIXME unique names
+ QVTrelationNameGenerator nameGenerator = scheduleManager.getNameGenerator(); // FIXME unique names
Relation invokedRelation = invokedRelationAnalysis.getRule();
String name = nameGenerator.createWhereInvocationPropertyName(invokedRelation);
ClassDatum classDatum = getInvokedClassDatum();
diff --git a/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvtr2qvts/NonTopWhereOnlyInvocationAnalysis.java b/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvtr2qvts/NonTopWhereOnlyInvocationAnalysis.java
index 1a83209..1278409 100644
--- a/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvtr2qvts/NonTopWhereOnlyInvocationAnalysis.java
+++ b/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvtr2qvts/NonTopWhereOnlyInvocationAnalysis.java
@@ -35,7 +35,7 @@
@Override
protected @NonNull Node createInvocationNode(@NonNull Node invokingTraceNode) {
- QVTrelationNameGenerator nameGenerator = (QVTrelationNameGenerator)scheduleManager.getNameGenerator(); // FIXME unique names
+ QVTrelationNameGenerator nameGenerator = scheduleManager.getNameGenerator(); // FIXME unique names
Relation invokedRelation = invokedRelationAnalysis.getRule();
String name = nameGenerator.createWhereInvocationPropertyName(invokedRelation);
ClassDatum classDatum = getInvokedClassDatum();
diff --git a/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvtr2qvts/RelationAnalysis.java b/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvtr2qvts/RelationAnalysis.java
index f133a2a..d66828d 100644
--- a/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvtr2qvts/RelationAnalysis.java
+++ b/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvtr2qvts/RelationAnalysis.java
@@ -278,7 +278,8 @@
}
}
- protected void analyzeInvocations() {
+ @Override
+ public void analyzeInvocations() {
for (@NonNull EObject eObject : new TreeIterable(rule, false)) {
if (eObject instanceof RelationCallExp) {
RelationCallExp relationInvocation = (RelationCallExp) eObject;
@@ -419,7 +420,10 @@
protected void analyzeRealizedOutputVariables(@NonNull RelationDomain relationDomain, @NonNull Set<@NonNull VariableDeclaration> realizedOutputVariables) {
for (@NonNull DomainPattern domainPattern : QVTrelationUtil.getOwnedPatterns(relationDomain)) {
TemplateExp templateExpression = QVTrelationUtil.getOwnedTemplateExpression(domainPattern);
- for (@NonNull EObject eObject : new TreeIterable(templateExpression, true)) {
+ boolean isTopLevel = ((Relation)rule).isIsTopLevel();
+ boolean isWhenInvoked = (incomingWhenInvocationAnalyses != null) && !incomingWhenInvocationAnalyses.isEmpty();
+ boolean rootIsRealized = isTopLevel || isWhenInvoked;
+ for (@NonNull EObject eObject : new TreeIterable(templateExpression, rootIsRealized)) {
if (eObject instanceof TemplateExp) {
TemplateExp templateExp = (TemplateExp)eObject;
TemplateVariable templateVariable = (TemplateVariable) QVTrelationUtil.getBindsTo(templateExp);
@@ -434,7 +438,6 @@
Relation relation = getRule();
baseRelationAnalysis = getScheduleManager().getRuleAnalysis(QVTrelationUtil.getBaseRelation(relation));
variable2templateExp = analyzeVariable2TemplateExp();
- analyzeInvocations();
Set<@NonNull VariableDeclaration> topWhenedOutputVariables2 = topWhenedOutputVariables = new HashSet<>();
Set<@NonNull VariableDeclaration> nonTopWhenedOutputVariables2 = nonTopWhenedOutputVariables = new HashSet<>();
analyzeWhenedOutputVariables(topWhenedOutputVariables2, nonTopWhenedOutputVariables2);