Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEd Willink2016-04-28 19:05:29 +0000
committerEd Willink2016-04-28 20:32:05 +0000
commit2fba0c329ce1b0eb268a8de3341af1c9855fff3f (patch)
treed199d71d4b37d25c2976d8a9e7a695437d4f55a8
parent753d9ffe5a43be82430c97a4d8379184829fa357 (diff)
downloadorg.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.java19
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();

Back to the top