Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEd Willink2016-04-28 09:55:31 +0000
committerEd Willink2016-04-28 20:31:55 +0000
commit5329de8b11eed039ba89135f56f01edbd8715db2 (patch)
tree3ff67cf051ffd495503aa878bd3a04ef40a7ec0b
parent2705c8416e40c97ab955e6177696edaf48dcabad (diff)
downloadorg.eclipse.qvtd-5329de8b11eed039ba89135f56f01edbd8715db2.tar.gz
org.eclipse.qvtd-5329de8b11eed039ba89135f56f01edbd8715db2.tar.xz
org.eclipse.qvtd-5329de8b11eed039ba89135f56f01edbd8715db2.zip
[unrelated] Improve diagnosis of ambiguous usage
-rw-r--r--plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/etl/scheduling/QVTp2QVTg.java2
-rw-r--r--plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/schedule2qvti/BasicRegion2Mapping.java16
-rw-r--r--plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/scheduler/AbstractNode.java4
-rw-r--r--plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/scheduler/ClassDatumAnalysis.java6
-rw-r--r--plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/scheduler/ExpressionAnalyzer.java2
-rw-r--r--plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/scheduler/Nodes.java2
-rw-r--r--plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/scheduler/OperationRegion.java4
-rw-r--r--plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/scheduler/RootScheduledRegion.java5
-rw-r--r--plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/scheduler/SchedulerConstants.java2
-rw-r--r--plugins/org.eclipse.qvtd.pivot.qvtcorebase/src/org/eclipse/qvtd/pivot/qvtcorebase/analysis/DomainUsage.java21
-rw-r--r--plugins/org.eclipse.qvtd.pivot.qvtcorebase/src/org/eclipse/qvtd/pivot/qvtcorebase/analysis/RootDomainUsageAnalysis.java13
-rw-r--r--plugins/org.eclipse.qvtd.pivot.qvtimperative/src/org/eclipse/qvtd/pivot/qvtimperative/evaluation/QVTiTransformationAnalysis.java6
12 files changed, 55 insertions, 28 deletions
diff --git a/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/etl/scheduling/QVTp2QVTg.java b/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/etl/scheduling/QVTp2QVTg.java
index c77b7086e..28172c1fa 100644
--- a/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/etl/scheduling/QVTp2QVTg.java
+++ b/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/etl/scheduling/QVTp2QVTg.java
@@ -399,7 +399,7 @@ public class QVTp2QVTg {
}
valueUsage = domainUsageAnalysis.intersection(propertyUsage, valueUsage);
}
- TypedModel oppositeTypedModel = valueUsage.getTypedModel();
+ TypedModel oppositeTypedModel = valueUsage.getTypedModel(propAssign);
if (oppositeTypedModel == null) {
throw new IllegalStateException("No left/right DomainUsage commonality for \"" + propAssign + "\"");
}
diff --git a/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/schedule2qvti/BasicRegion2Mapping.java b/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/schedule2qvti/BasicRegion2Mapping.java
index dd0562e08..6b5be5317 100644
--- a/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/schedule2qvti/BasicRegion2Mapping.java
+++ b/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/schedule2qvti/BasicRegion2Mapping.java
@@ -303,9 +303,7 @@ public class BasicRegion2Mapping extends AbstractRegion2Mapping
}
else if (edgeRole.isPredicated()) {
OCLExpression source = create(edge.getSource());
- if (source != null) {
- return PivotUtil.createNavigationCallExp(source, ((NavigationEdge)edge).getProperty());
- }
+ return PivotUtil.createNavigationCallExp(source, ((NavigationEdge)edge).getProperty());
}
}
}
@@ -324,9 +322,9 @@ public class BasicRegion2Mapping extends AbstractRegion2Mapping
return false;
}
- public boolean isConditional(@NonNull Node node) {
- return conditionalNodes.contains(node);
- }
+// public boolean isConditional(@NonNull Node node) {
+// return conditionalNodes.contains(node);
+// }
@Override
public @NonNull OCLExpression visitCollectionLiteralExp(@NonNull CollectionLiteralExp pCollectionLiteralExp) {
@@ -1312,7 +1310,7 @@ public class BasicRegion2Mapping extends AbstractRegion2Mapping
private void createRealizedVariables() {
for (@NonNull Node node : region.getRealizedVariableNodes()) {
ClassDatumAnalysis classDatumAnalysis = node.getClassDatumAnalysis();
- BottomPattern bottomPattern = getArea(classDatumAnalysis.getDomainUsage()).getBottomPattern();
+ BottomPattern bottomPattern = getArea(classDatumAnalysis).getBottomPattern();
RealizedVariable realizedVariable = QVTimperativeUtil.createRealizedVariable(getSafeName(node), classDatumAnalysis.getCompleteClass().getPrimaryClass());
bottomPattern.getRealizedVariable().add(realizedVariable);
Variable oldVariable = node2variable.put(node, realizedVariable);
@@ -1453,8 +1451,8 @@ public class BasicRegion2Mapping extends AbstractRegion2Mapping
return recursiveDepth;
} */
- private @NonNull Area getArea(@NonNull DomainUsage domainUsage) {
- TypedModel qvtpTypedModel = domainUsage.getTypedModel();
+ private @NonNull Area getArea(@NonNull ClassDatumAnalysis classDatumAnalysis) {
+ TypedModel qvtpTypedModel = classDatumAnalysis.getTypedModel();
ImperativeDomain coreDomain = typedModel2domain.get(qvtpTypedModel);
if (coreDomain != null) {
return coreDomain;
diff --git a/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/scheduler/AbstractNode.java b/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/scheduler/AbstractNode.java
index c9a8bf875..9317e1403 100644
--- a/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/scheduler/AbstractNode.java
+++ b/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/scheduler/AbstractNode.java
@@ -635,7 +635,7 @@ public abstract class AbstractNode implements Node
DomainUsage.Internal newDomainUsage = (Internal) newClassDatumAnalysis.getDomainUsage();
int refinedBitMask = oldDomainUsage.getMask() & newDomainUsage.getMask();
DomainUsage refinedDomainUsage = domainAnalysis.getConstantUsage(refinedBitMask);
- TypedModel refinedTypedModel = refinedDomainUsage.getTypedModel();
+ TypedModel refinedTypedModel = refinedDomainUsage.getTypedModel(oldCompleteClass);
assert refinedTypedModel != null;
classDatumAnalysis = getSchedulerConstants().getClassDatumAnalysis(oldCompleteClass.getPrimaryClass(), refinedTypedModel);
return true;
@@ -646,7 +646,7 @@ public abstract class AbstractNode implements Node
DomainUsage.Internal newDomainUsage = (Internal) newClassDatumAnalysis.getDomainUsage();
int refinedBitMask = oldDomainUsage.getMask() & newDomainUsage.getMask();
DomainUsage refinedDomainUsage = domainAnalysis.getConstantUsage(refinedBitMask);
- TypedModel refinedTypedModel = refinedDomainUsage.getTypedModel();
+ TypedModel refinedTypedModel = refinedDomainUsage.getTypedModel(newCompleteClass);
assert refinedTypedModel != null;
classDatumAnalysis = getSchedulerConstants().getClassDatumAnalysis(newCompleteClass.getPrimaryClass(), refinedTypedModel);
return true;
diff --git a/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/scheduler/ClassDatumAnalysis.java b/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/scheduler/ClassDatumAnalysis.java
index ca5c5ba3c..a23c0c221 100644
--- a/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/scheduler/ClassDatumAnalysis.java
+++ b/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/scheduler/ClassDatumAnalysis.java
@@ -139,7 +139,7 @@ public class ClassDatumAnalysis
Type asClass = classDatum.getType();
assert asClass != null;
CompleteClass completeClass = environmentFactory.getCompleteModel().getCompleteClass(asClass);
- for (@SuppressWarnings("null")@NonNull Property property : completeClass.getProperties((FeatureFilter)null)) {
+ for (@NonNull Property property : completeClass.getProperties((FeatureFilter)null)) {
Property oppositeProperty = property.getOpposite();
if ((oppositeProperty != null) && oppositeProperty.isIsMany() && !oppositeProperty.isIsDerived()) {
Type childrenType = oppositeProperty.getType();
@@ -189,8 +189,8 @@ public class ClassDatumAnalysis
List<@NonNull ClassDatumAnalysis> superClassDatumAnalyses2 = superClassDatumAnalyses;
if (superClassDatumAnalyses2 == null) {
superClassDatumAnalyses = superClassDatumAnalyses2 = new ArrayList<@NonNull ClassDatumAnalysis>();
- for (@SuppressWarnings("null")@NonNull CompleteClass completeSuperClass : completeClass.getSuperCompleteClasses()) {
- superClassDatumAnalyses2.add(schedulerConstants.getClassDatumAnalysis(completeSuperClass.getPrimaryClass(), ClassUtil.nonNullState(domainUsage.getTypedModel())));
+ for (@NonNull CompleteClass completeSuperClass : completeClass.getSuperCompleteClasses()) {
+ superClassDatumAnalyses2.add(schedulerConstants.getClassDatumAnalysis(completeSuperClass.getPrimaryClass(), ClassUtil.nonNullState(domainUsage.getTypedModel(completeClass))));
}
}
return superClassDatumAnalyses2;
diff --git a/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/scheduler/ExpressionAnalyzer.java b/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/scheduler/ExpressionAnalyzer.java
index 24a52d101..c97057415 100644
--- a/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/scheduler/ExpressionAnalyzer.java
+++ b/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/scheduler/ExpressionAnalyzer.java
@@ -726,7 +726,7 @@ public class ExpressionAnalyzer extends AbstractExtendingQVTimperativeVisitor<@N
DomainUsage domainUsage = scheduler.getDomainUsage(typeExp);
Type referredType = typeExp.getReferredType();
assert referredType != null;
- TypedModel typedModel = domainUsage.getTypedModel();
+ TypedModel typedModel = domainUsage.getTypedModel(typeExp);
assert typedModel != null;
ClassDatumAnalysis classDatumAnalysis = scheduler.getClassDatumAnalysis((org.eclipse.ocl.pivot.Class)referredType, typedModel);
String typeName = PrettyPrinter.printType(classDatumAnalysis.getCompleteClass());
diff --git a/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/scheduler/Nodes.java b/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/scheduler/Nodes.java
index cd197862d..7a0250973 100644
--- a/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/scheduler/Nodes.java
+++ b/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/scheduler/Nodes.java
@@ -993,7 +993,7 @@ public class Nodes
SchedulerConstants schedulerConstants = region.getSchedulerConstants();
org.eclipse.ocl.pivot.Class booleanType = schedulerConstants.getStandardLibrary().getBooleanType();
DomainUsage primitiveUsage = schedulerConstants.getDomainAnalysis().getPrimitiveUsage();
- ClassDatumAnalysis classDatumAnalysis = schedulerConstants.getClassDatumAnalysis(booleanType, ClassUtil.nonNullState(primitiveUsage.getTypedModel()));
+ ClassDatumAnalysis classDatumAnalysis = schedulerConstants.getClassDatumAnalysis(booleanType, ClassUtil.nonNullState(primitiveUsage.getTypedModel(null)));
return createSimpleNode(region, "«true»", classDatumAnalysis);
}
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 93bed1e4f..c9e423b44 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
@@ -93,7 +93,7 @@ public class OperationRegion extends AbstractRegion implements SimpleRegion
if (stepUsage.isOutput() && !stepUsage.isInput()) {
// System.out.println("!checkable && enforceable: " + steps);
org.eclipse.ocl.pivot.Class stepType = steps.get(0).getElementalType();
- TypedModel typedModel = stepUsage.getTypedModel();
+ TypedModel typedModel = stepUsage.getTypedModel(classStep.getElement());
assert typedModel != null;
ClassDatumAnalysis classDatumAnalysis = schedulerConstants.getClassDatumAnalysis(stepType, typedModel);
if (!(classDatumAnalysis.getCompleteClass().getPrimaryClass() instanceof DataType)) {
@@ -166,7 +166,7 @@ public class OperationRegion extends AbstractRegion implements SimpleRegion
SchedulerConstants schedulerConstants = getSchedulerConstants();
org.eclipse.ocl.pivot.Class type = (org.eclipse.ocl.pivot.Class)expression.getType();
assert type != null;
- TypedModel typedModel = schedulerConstants.getDomainUsage(expression).getTypedModel();
+ TypedModel typedModel = schedulerConstants.getDomainUsage(expression).getTypedModel(expression);
assert typedModel != null;
ClassDatumAnalysis classDatumAnalysis = schedulerConstants.getClassDatumAnalysis(type, typedModel);
SimpleNode parameterNode = Nodes.PARAMETER.createSimpleNode(this, name, classDatumAnalysis);
diff --git a/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/scheduler/RootScheduledRegion.java b/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/scheduler/RootScheduledRegion.java
index fef1c2836..91b873643 100644
--- a/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/scheduler/RootScheduledRegion.java
+++ b/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/scheduler/RootScheduledRegion.java
@@ -80,7 +80,7 @@ public class RootScheduledRegion extends AbstractScheduledRegion
/**
* The input models that may introduce model elements for transformation.
*/
- private final @NonNull HashMap<@NonNull Model, @NonNull DomainUsage> inputModels = new HashMap<@NonNull Model, @NonNull DomainUsage>();
+ private final @NonNull Map<@NonNull Model, @NonNull DomainUsage> inputModels = new HashMap<@NonNull Model, @NonNull DomainUsage>();
/**
* Mapping from each input class to the composite properties that may contain the class or its subclasses.
@@ -387,6 +387,7 @@ public class RootScheduledRegion extends AbstractScheduledRegion
List<org.eclipse.ocl.pivot.@NonNull Package> allPackagesList = new ArrayList<org.eclipse.ocl.pivot.@NonNull Package>();
for (@NonNull Model asModel : inputModels.keySet()) {
DomainUsage domainUsage = inputModels.get(asModel);
+ assert domainUsage != null;
for (org.eclipse.ocl.pivot.@NonNull Package asPackage : ClassUtil.nullFree(asModel.getOwnedPackages())) {
if (allPackagesSet.put(asPackage, domainUsage) == null) {
allPackagesList.add(asPackage);
@@ -437,7 +438,7 @@ public class RootScheduledRegion extends AbstractScheduledRegion
private void computeContainedClassDatumAnalysis2compositeProperties3(@NonNull Property asProperty, @NonNull DomainUsage domainUsage) {
Type asType = QVTbaseUtil.getElementalType(ClassUtil.nonNullState(asProperty.getType()));
if (asType instanceof org.eclipse.ocl.pivot.Class) {
- ClassDatumAnalysis classDatumAnalysis = getSchedulerConstants().getClassDatumAnalysis((Class) asType, ClassUtil.nonNullState(domainUsage.getTypedModel()));
+ ClassDatumAnalysis classDatumAnalysis = getSchedulerConstants().getClassDatumAnalysis((Class) asType, ClassUtil.nonNullState(domainUsage.getTypedModel(null)));
Set<@NonNull Property> compositeProperties = containedClassDatumAnalysis2compositeProperties.get(classDatumAnalysis);
if (compositeProperties == null) {
compositeProperties = new HashSet<@NonNull Property>();
diff --git a/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/scheduler/SchedulerConstants.java b/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/scheduler/SchedulerConstants.java
index 604ca040c..b02e5619a 100644
--- a/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/scheduler/SchedulerConstants.java
+++ b/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/scheduler/SchedulerConstants.java
@@ -233,7 +233,7 @@ public abstract class SchedulerConstants
else {
DomainUsage domainUsage = getDomainUsage(asTypedElement);
assert domainUsage != null;
- typedModel = domainUsage.getTypedModel();
+ typedModel = domainUsage.getTypedModel(asTypedElement);
assert typedModel != null;
}
return qvtp2qvtg.getClassDatum(typedModel, asType);
diff --git a/plugins/org.eclipse.qvtd.pivot.qvtcorebase/src/org/eclipse/qvtd/pivot/qvtcorebase/analysis/DomainUsage.java b/plugins/org.eclipse.qvtd.pivot.qvtcorebase/src/org/eclipse/qvtd/pivot/qvtcorebase/analysis/DomainUsage.java
index fb8d6ced5..8f62049b9 100644
--- a/plugins/org.eclipse.qvtd.pivot.qvtcorebase/src/org/eclipse/qvtd/pivot/qvtcorebase/analysis/DomainUsage.java
+++ b/plugins/org.eclipse.qvtd.pivot.qvtcorebase/src/org/eclipse/qvtd/pivot/qvtcorebase/analysis/DomainUsage.java
@@ -13,6 +13,7 @@ package org.eclipse.qvtd.pivot.qvtcorebase.analysis;
import org.eclipse.jdt.annotation.NonNull;
import org.eclipse.jdt.annotation.Nullable;
import org.eclipse.ocl.pivot.Element;
+import org.eclipse.ocl.pivot.NamedElement;
import org.eclipse.qvtd.pivot.qvtbase.TypedModel;
/**
@@ -48,8 +49,19 @@ public interface DomainUsage
/**
* Return the TypedModel for this usage, null for none, non-null for one, Exception for more than one.
* Note that a primitive TypedModel may be returned for DataType usage; it has no container.
+ *
+ * @deprecated specify a context
*/
+ @Deprecated
@Nullable TypedModel getTypedModel() throws IllegalStateException;
+
+ /**
+ * Return the TypedModel for this usage, null for none, non-null for one, Exception for more than one.
+ * Note that a primitive TypedModel may be returned for DataType usage; it has no container.
+ *
+ * Any ambiguous usgae is diagnosed with respect to the optional context.
+ */
+ @Nullable TypedModel getTypedModel(@Nullable Element context) throws IllegalStateException;
/**
* Return all the TypedModels for this usage. Note that a primitive TypedModel may be returned for DataType usage; it has no container.
@@ -76,12 +88,12 @@ public interface DomainUsage
boolean isEnforceable();
/**
- * Return true if this usage includes usage in an input domain, a domain the is fully not-enforceable transformation-wide.
+ * Return true if this usage includes usage in an input domain, a domain that is fully not-enforceable transformation-wide.
*/
boolean isInput();
/**
- * Return true if this usage includes usage in the middle domain, a domain the is partially enforceable transformation-wide.
+ * Return true if this usage includes usage in the middle domain, a domain that is partially enforceable transformation-wide.
*/
boolean isMiddle();
@@ -89,6 +101,11 @@ public interface DomainUsage
* Return true if this usage includes usage in an output domain, a domain that is fully enforceable transformation-wide.
*/
boolean isOutput();
+
+ /**
+ * Return true if this usage includes usage in a primitive domain, a domain that is just used.
+ */
+ boolean isPrimitive();
public interface Internal extends DomainUsage, Comparable<DomainUsage.Internal>
{
diff --git a/plugins/org.eclipse.qvtd.pivot.qvtcorebase/src/org/eclipse/qvtd/pivot/qvtcorebase/analysis/RootDomainUsageAnalysis.java b/plugins/org.eclipse.qvtd.pivot.qvtcorebase/src/org/eclipse/qvtd/pivot/qvtcorebase/analysis/RootDomainUsageAnalysis.java
index 3237f5c36..c024af97d 100644
--- a/plugins/org.eclipse.qvtd.pivot.qvtcorebase/src/org/eclipse/qvtd/pivot/qvtcorebase/analysis/RootDomainUsageAnalysis.java
+++ b/plugins/org.eclipse.qvtd.pivot.qvtcorebase/src/org/eclipse/qvtd/pivot/qvtcorebase/analysis/RootDomainUsageAnalysis.java
@@ -40,6 +40,7 @@ import org.eclipse.ocl.pivot.ids.OperationId;
import org.eclipse.ocl.pivot.internal.complete.StandardLibraryInternal;
import org.eclipse.ocl.pivot.utilities.ClassUtil;
import org.eclipse.ocl.pivot.utilities.EnvironmentFactory;
+import org.eclipse.ocl.pivot.utilities.LabelUtil;
import org.eclipse.ocl.pivot.utilities.NameUtil;
import org.eclipse.ocl.pivot.utilities.PivotUtil;
import org.eclipse.qvtd.pivot.qvtbase.Domain;
@@ -77,6 +78,11 @@ public class RootDomainUsageAnalysis extends AbstractDomainUsageAnalysis impleme
@Override
public @Nullable TypedModel getTypedModel() throws IllegalStateException {
+ return getTypedModel(null);
+ }
+
+ @Override
+ public @Nullable TypedModel getTypedModel(@Nullable Element context) throws IllegalStateException {
int residue = bitMask;
for (int i = 0; residue != 0; i++) {
int bit = 1 << i;
@@ -85,7 +91,7 @@ public class RootDomainUsageAnalysis extends AbstractDomainUsageAnalysis impleme
if (residue == 0) {
return RootDomainUsageAnalysis.this.getTypedModel(i);
}
- System.err.println("Ambiguous TypedModel: " + this);
+ System.err.println("Ambiguous TypedModel: " + this + " for " + LabelUtil.getLabel(context));
// throw new IllegalStateException("Ambiguous TypedModel: " + this);
return RootDomainUsageAnalysis.this.getTypedModel(i);
}
@@ -132,6 +138,11 @@ public class RootDomainUsageAnalysis extends AbstractDomainUsageAnalysis impleme
return (bitMask & outputUsage.bitMask) != 0;
}
+ @Override
+ public boolean isPrimitive() {
+ return (bitMask & PRIMITIVE_USAGE_BIT_MASK) != 0;
+ }
+
protected String toString(@NonNull String prefix) {
StringBuilder s = new StringBuilder();
s.append(prefix);
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 0e3aa53e4..ecf09469e 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
@@ -569,7 +569,7 @@ public class QVTiTransformationAnalysis
OCLExpression asSource = asNavigationCallExp.getOwnedSource();
DomainUsage domainUsage = getDomainUsageAnalysis().basicGetUsage(asSource);
if (domainUsage != null) {
- TypedModel typedModel = domainUsage.getTypedModel();
+ TypedModel typedModel = domainUsage.getTypedModel(asSource);
if (typedModel != null) {
Area area = QVTcoreBaseUtil.getArea(asMapping, typedModel);
if ((area instanceof ImperativeArea) && ((ImperativeArea)area).getCheckedProperties().contains(asProperty)) {
@@ -580,7 +580,7 @@ public class QVTiTransformationAnalysis
Property asOppositeProperty = asProperty.getOpposite();
domainUsage = getDomainUsageAnalysis().basicGetUsage(asProperty.getType());
if (domainUsage != null) {
- TypedModel typedModel = domainUsage.getTypedModel();
+ TypedModel typedModel = domainUsage.getTypedModel(asProperty);
if (typedModel != null) {
Area area = QVTcoreBaseUtil.getArea(asMapping, typedModel);
if ((area instanceof ImperativeArea) && ((ImperativeArea)area).getCheckedProperties().contains(asOppositeProperty)) {
@@ -605,7 +605,7 @@ public class QVTiTransformationAnalysis
OCLExpression asSource = asPropertyAssignment.getSlotExpression();
DomainUsage domainUsage = getDomainUsageAnalysis().basicGetUsage(asSource);
if (domainUsage != null) {
- TypedModel typedModel = domainUsage.getTypedModel();
+ TypedModel typedModel = domainUsage.getTypedModel(asSource);
if (typedModel != null) {
Area area = null;
for (Domain domain : asMapping.getDomain()) {

Back to the top