[498400] Preserve Class/DataType distinction for PredicatedInternalNode
diff --git a/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvtp2qvts/ExpressionAnalyzer.java b/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvtp2qvts/ExpressionAnalyzer.java
index 69ebd41..464ade8 100644
--- a/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvtp2qvts/ExpressionAnalyzer.java
+++ b/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvtp2qvts/ExpressionAnalyzer.java
@@ -353,8 +353,8 @@
return Nodes.createPredicatedInternalClassNode(parentNode, navigationAssignment);
}
- protected @NonNull Node createPredicatedClassNode(@NonNull String name, @NonNull ClassDatumAnalysis classDatumAnalysis) {
- return Nodes.createPredicatedInternalClassNode(context, name, classDatumAnalysis);
+ protected @NonNull Node createPredicatedInternalNode(@NonNull String name, @NonNull ClassDatumAnalysis classDatumAnalysis) {
+ return Nodes.createPredicatedInternalNode(context, name, classDatumAnalysis);
}
protected @NonNull Node createRealizedDataTypeNode(@NonNull Node sourceNode, @NonNull Property source2targetProperty) {
@@ -541,7 +541,7 @@
Node extraTargetNode = extraEdge.getTarget();
String name = extraTargetNode.getName();
ClassDatumAnalysis classDatumAnalysis = extraTargetNode.getClassDatumAnalysis();
- Node instantiatedTargetNode = createPredicatedClassNode(name, classDatumAnalysis);
+ Node instantiatedTargetNode = createPredicatedInternalNode(name, classDatumAnalysis);
createNavigationEdge(instantiatedNode, extraEdge.getProperty(), instantiatedTargetNode);
instantiate(instantiatedTargetNode, extraTargetNode);
}
diff --git a/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvtp2qvts/Nodes.java b/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvtp2qvts/Nodes.java
index be8554d..272d8ef 100644
--- a/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvtp2qvts/Nodes.java
+++ b/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvtp2qvts/Nodes.java
@@ -627,12 +627,21 @@
}
// FIXME Can this be merged into PatternNodeRole ??
- private static final class PredicatedInternalNodeRole extends AbstractSimpleNodeRole
+ private static final class PredicatedInternalNodeRole extends AbstractTypedNodeRole
{
- public static final @NonNull PredicatedInternalNodeRole PREDICATED_INTERNAL_CLASS = new PredicatedInternalNodeRole();
+ private static final @NonNull PredicatedInternalNodeRole PREDICATED_INTERNAL_CLASS = new PredicatedInternalNodeRole(ClassableEnum.CLASS);
+ private static final @NonNull PredicatedInternalNodeRole PREDICATED_INTERNAL_DATATYPE = new PredicatedInternalNodeRole(ClassableEnum.DATATYPE);
- private PredicatedInternalNodeRole() {
- super(Role.Phase.PREDICATED);
+ public static @NonNull PredicatedInternalNodeRole getPredicatedInternalNodeRole(@NonNull ClassableEnum classable) {
+ switch (classable) {
+ case CLASS: return PREDICATED_INTERNAL_CLASS;
+ case DATATYPE: return PREDICATED_INTERNAL_DATATYPE;
+ }
+ throw new UnsupportedOperationException();
+ }
+
+ private PredicatedInternalNodeRole(@NonNull ClassableEnum classable) {
+ super(Role.Phase.PREDICATED, classable);
}
@Override
@@ -831,8 +840,10 @@
return PredicatedInternalNodeRole.PREDICATED_INTERNAL_CLASS.createNode(parentNode.getRegion(), name, classDatumAnalysis);
}
- public static @NonNull Node createPredicatedInternalClassNode(@NonNull Region region, @NonNull String name, @NonNull ClassDatumAnalysis classDatumAnalysis) {
- return PredicatedInternalNodeRole.PREDICATED_INTERNAL_CLASS.createNode(region, name, classDatumAnalysis);
+ public static @NonNull Node createPredicatedInternalNode(@NonNull Region region, @NonNull String name, @NonNull ClassDatumAnalysis classDatumAnalysis) {
+ ClassableEnum classable = asClassable(classDatumAnalysis.getClassDatum().getType());
+ PredicatedInternalNodeRole predicatedInternalNodeRole = PredicatedInternalNodeRole.getPredicatedInternalNodeRole(classable);
+ return predicatedInternalNodeRole.createNode(region, name, classDatumAnalysis);
}
public static @NonNull TypedNode createRealizedDataTypeNode(@NonNull Node sourceNode, @NonNull Property source2targetProperty) {