Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--plugins/org.eclipse.m2m.qvt.oml/src/org/eclipse/m2m/internal/qvt/oml/ast/parser/QvtOperationalVisitorCS.java14
-rw-r--r--tests/org.eclipse.m2m.tests.qvt.oml/parserTestData/models/bug432786/bug432786.qvto17
-rw-r--r--tests/org.eclipse.m2m.tests.qvt.oml/src/org/eclipse/m2m/tests/qvt/oml/transform/TransformTests.java1
3 files changed, 26 insertions, 6 deletions
diff --git a/plugins/org.eclipse.m2m.qvt.oml/src/org/eclipse/m2m/internal/qvt/oml/ast/parser/QvtOperationalVisitorCS.java b/plugins/org.eclipse.m2m.qvt.oml/src/org/eclipse/m2m/internal/qvt/oml/ast/parser/QvtOperationalVisitorCS.java
index f7167cca2..8a92cca2a 100644
--- a/plugins/org.eclipse.m2m.qvt.oml/src/org/eclipse/m2m/internal/qvt/oml/ast/parser/QvtOperationalVisitorCS.java
+++ b/plugins/org.eclipse.m2m.qvt.oml/src/org/eclipse/m2m/internal/qvt/oml/ast/parser/QvtOperationalVisitorCS.java
@@ -4737,7 +4737,7 @@ public class QvtOperationalVisitorCS
}
private org.eclipse.ocl.ecore.OCLExpression visitResolveExpCS(ResolveExpCS resolveExpCS, QvtOperationalEnv env) {
- ResolveExp resolveExp = populateResolveExp(resolveExpCS, env, ExpressionsFactory.eINSTANCE.createResolveExp());
+ ResolveExp resolveExp = populateResolveExp(resolveExpCS, env, ExpressionsFactory.eINSTANCE.createResolveExp(), null);
// if (resolveExp.getSource() == null) {
// env.reportError(NLS.bind(ValidationMessages.ResolveExpMustHaveASource, new Object[] { }), resolveExpCS);
// }
@@ -4783,9 +4783,11 @@ public class QvtOperationalVisitorCS
String mappingFQName = (eClassifier == null) ? "" : eClassifier.getName() + EmfUtil.PATH_SEPARATOR; //$NON-NLS-1$
mappingFQName += mappingName;
+ EClassifier mappingResultType = null;
if (mappingOperations.size() == 1) {
env.registerResolveInExp(resolveInExp, eClassifier, mappingName);
+ mappingResultType = mappingOperations.get(0).getEType();
} else {
if (mappingOperations.size() == 0) {
env.reportError(NLS.bind(ValidationMessages.QvtOperationalVisitorCS_ResolveInMappingNotFound, new Object[] {
@@ -4797,12 +4799,11 @@ public class QvtOperationalVisitorCS
}
}
- ResolveExp result = populateResolveExp(resolveInExpCS, env, resolveInExp);
+ ResolveExp result = populateResolveExp(resolveInExpCS, env, resolveInExp, mappingResultType);
// DeprecatedImplicitSourceCallHelper.validateCallExp(resolveInExpCS, result, env);
if (mappingOperations.size() == 1 && resolveInExp.getTarget() != null) {
EClassifier targetVariableType = resolveInExp.getTarget().getType();
- EClassifier mappingResultType = mappingOperations.get(0).getEType();
if(!TypeUtil.compatibleTypeMatch(env, mappingResultType, targetVariableType)) {
env.reportWarning(
@@ -4819,7 +4820,7 @@ public class QvtOperationalVisitorCS
return result;
}
- private ResolveExp populateResolveExp(ResolveExpCS resolveExpCS, QvtOperationalEnv env, ResolveExp resolveExp) {
+ private ResolveExp populateResolveExp(ResolveExpCS resolveExpCS, QvtOperationalEnv env, ResolveExp resolveExp, EClassifier mappingResultType) {
// AST binding
if(myCompilerOptions.isGenerateCompletionData()) {
ASTBindingHelper.createCST2ASTBinding(resolveExpCS, resolveExp, env);
@@ -4892,10 +4893,11 @@ public class QvtOperationalVisitorCS
}
}
} else {
+ EClassifier resultType = mappingResultType == null ? env.getOCLStandardLibrary().getOclAny() : mappingResultType;
if (resolveExp.isOne()) {
- resolveExp.setType(env.getOCLStandardLibrary().getOclAny());
+ resolveExp.setType(resultType);
} else {
- EClassifier resolveType = (EClassifier) env.getOCLFactory().createSequenceType(env.getOCLStandardLibrary().getOclAny());
+ EClassifier resolveType = (EClassifier) env.getOCLFactory().createSequenceType(resultType);
resolveExp.setType(TypeUtil.resolveType(env, resolveType));
}
}
diff --git a/tests/org.eclipse.m2m.tests.qvt.oml/parserTestData/models/bug432786/bug432786.qvto b/tests/org.eclipse.m2m.tests.qvt.oml/parserTestData/models/bug432786/bug432786.qvto
new file mode 100644
index 000000000..d5291d2f9
--- /dev/null
+++ b/tests/org.eclipse.m2m.tests.qvt.oml/parserTestData/models/bug432786/bug432786.qvto
@@ -0,0 +1,17 @@
+modeltype ecore uses "http://www.eclipse.org/emf/2002/Ecore";
+transformation bug432786;
+
+main() {
+ var p1 : EClassifier = resolveoneIn(m1);
+ assert fatal (p1 = null);
+
+ var obj = map m1();
+ var p2 : ENamedElement = resolveoneIn(m1);
+ assert fatal (p2 = obj);
+}
+
+mapping m1() : EClassifier {
+ init {
+ result := object EClass{};
+ }
+}
diff --git a/tests/org.eclipse.m2m.tests.qvt.oml/src/org/eclipse/m2m/tests/qvt/oml/transform/TransformTests.java b/tests/org.eclipse.m2m.tests.qvt.oml/src/org/eclipse/m2m/tests/qvt/oml/transform/TransformTests.java
index 8231d1dd1..83756666a 100644
--- a/tests/org.eclipse.m2m.tests.qvt.oml/src/org/eclipse/m2m/tests/qvt/oml/transform/TransformTests.java
+++ b/tests/org.eclipse.m2m.tests.qvt.oml/src/org/eclipse/m2m/tests/qvt/oml/transform/TransformTests.java
@@ -388,6 +388,7 @@ public class TransformTests {
}),
new FileToFileData("bug427237a"), //$NON-NLS-1$
new FilesToFilesData("bug425069"), //$NON-NLS-1$
+ new FilesToFilesData("bug432786"), //$NON-NLS-1$
};
}

Back to the top