Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEd Willink2016-02-04 13:56:28 +0000
committerEd Willink2016-02-04 17:32:27 +0000
commitee23f67f6d6976c29532b887b1854eb8278eb396 (patch)
tree50a6b9a12c3c9add2e9bf08eb39d96196b472c62
parenteeb30ab0b394f5df9850bc6bd8ec7373747d4ca6 (diff)
downloadorg.eclipse.qvtd-ee23f67f6d6976c29532b887b1854eb8278eb396.tar.gz
org.eclipse.qvtd-ee23f67f6d6976c29532b887b1854eb8278eb396.tar.xz
org.eclipse.qvtd-ee23f67f6d6976c29532b887b1854eb8278eb396.zip
[ocl2qvtp] PropertyAssignment intersects left/right usage
-rw-r--r--plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/etl/scheduling/QVTp2QVTg.java20
-rw-r--r--plugins/org.eclipse.qvtd.pivot.qvtcorebase/src/org/eclipse/qvtd/pivot/qvtcorebase/analysis/AbstractDomainUsageAnalysis.java2
2 files changed, 20 insertions, 2 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 3bcac726a..0101bc286 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
@@ -12,6 +12,7 @@ import java.util.Set;
import org.eclipse.emf.common.util.TreeIterator;
import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EcorePackage;
import org.eclipse.emf.ecore.resource.Resource;
import org.eclipse.jdt.annotation.NonNull;
import org.eclipse.jdt.annotation.Nullable;
@@ -368,7 +369,24 @@ public class QVTp2QVTg {
if (oppositeProp != null) {
OCLExpression value = propAssign.getValue();
assert value != null;
- TypedModel oppositeTypedModel = getTypedModel(value);
+ DomainUsage valueUsage = getUsage(value);
+ if (valueUsage == null) {
+ getUsage(value);
+ throw new IllegalStateException("No DomainUsage for " + value);
+ }
+ Type propertyType = targetProp.getType();
+ if ((propertyType != null) && (propertyType.getESObject() != EcorePackage.Literals.EOBJECT)) { // FIXME Legacy fix tolerating undeclared import of EObject
+ DomainUsage propertyUsage = getUsage(propertyType);
+ if (propertyUsage == null) {
+ getUsage(propertyType);
+ throw new IllegalStateException("No DomainUsage for " + propertyType);
+ }
+ valueUsage = domainUsageAnalysis.intersection(propertyUsage, valueUsage);
+ }
+ TypedModel oppositeTypedModel = valueUsage.getTypedModel();
+ if (oppositeTypedModel == null) {
+ throw new IllegalStateException("No left/right DomainUsage commonality for \"" + propAssign + "\"");
+ }
PropertyDatum oppositeDatum = getPropertyDatum(oppositeTypedModel, ClassUtil.nonNullState(getElementClass(targetProp)), oppositeProp);
targetDatum.setOpposite(oppositeDatum);
result.add(oppositeDatum);
diff --git a/plugins/org.eclipse.qvtd.pivot.qvtcorebase/src/org/eclipse/qvtd/pivot/qvtcorebase/analysis/AbstractDomainUsageAnalysis.java b/plugins/org.eclipse.qvtd.pivot.qvtcorebase/src/org/eclipse/qvtd/pivot/qvtcorebase/analysis/AbstractDomainUsageAnalysis.java
index f4367575d..de6851721 100644
--- a/plugins/org.eclipse.qvtd.pivot.qvtcorebase/src/org/eclipse/qvtd/pivot/qvtcorebase/analysis/AbstractDomainUsageAnalysis.java
+++ b/plugins/org.eclipse.qvtd.pivot.qvtcorebase/src/org/eclipse/qvtd/pivot/qvtcorebase/analysis/AbstractDomainUsageAnalysis.java
@@ -161,7 +161,7 @@ public abstract class AbstractDomainUsageAnalysis extends AbstractExtendingQVTco
return ClassUtil.nonNullState(element2usage.get(element));
}
- protected @NonNull DomainUsage intersection(@NonNull DomainUsage firstUsage, @NonNull DomainUsage secondUsage) {
+ public @NonNull DomainUsage intersection(@NonNull DomainUsage firstUsage, @NonNull DomainUsage secondUsage) {
int firstMask = ((DomainUsage.Internal)firstUsage).getMask();
int secondMask = ((DomainUsage.Internal)secondUsage).getMask();
if (firstMask == secondMask) {

Back to the top