diff options
author | Ed Willink | 2016-04-28 19:05:29 +0000 |
---|---|---|
committer | Ed Willink | 2016-04-28 20:32:05 +0000 |
commit | 2fba0c329ce1b0eb268a8de3341af1c9855fff3f (patch) | |
tree | d199d71d4b37d25c2976d8a9e7a695437d4f55a8 | |
parent | 753d9ffe5a43be82430c97a4d8379184829fa357 (diff) | |
download | org.eclipse.qvtd-2fba0c329ce1b0eb268a8de3341af1c9855fff3f.tar.gz org.eclipse.qvtd-2fba0c329ce1b0eb268a8de3341af1c9855fff3f.tar.xz org.eclipse.qvtd-2fba0c329ce1b0eb268a8de3341af1c9855fff3f.zip |
[486722] Fix usage of oclAsType
-rw-r--r-- | plugins/org.eclipse.qvtd.pivot.qvtcorebase/src/org/eclipse/qvtd/pivot/qvtcorebase/analysis/AbstractDomainUsageAnalysis.java | 19 |
1 files changed, 17 insertions, 2 deletions
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 9e7177d87..aa0b99f03 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 @@ -615,11 +615,26 @@ public abstract class AbstractDomainUsageAnalysis extends AbstractExtendingQVTco // || (operationId == getRootAnalysis().getOclAnyNotEqualsOperationId())) { if ("=".equals(operationName) // FIXME BUG 487252 rationalize the derived operationIds || "<>".equals(operationName)) { - DomainUsage leftUsage = visit(object.getOwnedSource()); DomainUsage rightUsage = visit(object.getOwnedArguments().get(0)); - intersection(leftUsage, rightUsage); + intersection(sourceUsage, rightUsage); return getRootAnalysis().getPrimitiveUsage(); } + if ("oclAsType".equals(operationName) && !sourceUsage.isPrimitive()) { // FIXME fudge for Adolfo's suspect EObjects + TemplateParameter templateParameter = operation.getType().isTemplateParameter(); + if (templateParameter != null) { + List<Parameter> ownedParameters = operation.getOwnedParameters(); + int iMax = Math.min(ownedParameters.size(), object.getOwnedArguments().size()); + for (int i = 0; i < iMax; i++) { + Parameter parameter = ownedParameters.get(i); + if (parameter.isIsTypeof() && (parameter.getType() == templateParameter)) { + OCLExpression argument = object.getOwnedArguments().get(i); + DomainUsage argumentUsage = visit(argument); + intersection(sourceUsage, argumentUsage); + } + } + } + return sourceUsage; + } TemplateParameter templateParameter = operation.getType().isTemplateParameter(); if (templateParameter != null) { // Handle e.g oclAsType() List<Parameter> ownedParameters = operation.getOwnedParameters(); |