Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorsboyko2014-04-12 10:48:23 +0000
committersboyko2014-04-12 10:48:23 +0000
commit1926f144d37da167c53201133c9b9160a1822aa6 (patch)
tree7018b4d878fb2529cc0d8d9bde4324afc509f2cc
parentf04863fc257195f61d85e575be134c4a47e075ae (diff)
downloadorg.eclipse.qvto-1926f144d37da167c53201133c9b9160a1822aa6.tar.gz
org.eclipse.qvto-1926f144d37da167c53201133c9b9160a1822aa6.tar.xz
org.eclipse.qvto-1926f144d37da167c53201133c9b9160a1822aa6.zip
[425634] - Show error on invalid target variable type inside
ResolveInExp
-rw-r--r--plugins/org.eclipse.m2m.qvt.oml/src/org/eclipse/m2m/internal/qvt/oml/ast/parser/QvtOperationalVisitorCS.java25
-rw-r--r--plugins/org.eclipse.m2m.qvt.oml/src/org/eclipse/m2m/internal/qvt/oml/ast/parser/ValidationMessages.java3
-rw-r--r--plugins/org.eclipse.m2m.qvt.oml/src/org/eclipse/m2m/internal/qvt/oml/ast/parser/ValidationMessages.properties3
-rw-r--r--tests/org.eclipse.m2m.tests.qvt.oml/parserTestData/sources/bug425634/bug425634.qvto17
-rw-r--r--tests/org.eclipse.m2m.tests.qvt.oml/parserTestData/sources/implicitCallSrc/implicitCallSrc.qvto4
-rw-r--r--tests/org.eclipse.m2m.tests.qvt.oml/src/org/eclipse/m2m/tests/qvt/oml/ParserTests.java3
6 files changed, 47 insertions, 8 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 fd82e975b..f7167cca2 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
@@ -7,7 +7,7 @@
*
* Contributors:
* Borland Software Corporation - initial API and implementation
- * Christopher Gerking - bugs 302594, 310991, 289982, 427237
+ * Christopher Gerking - bugs 302594, 310991, 289982, 427237, 425634
* Alex Paperno - bugs 272869, 268636, 404647, 414363, 414363, 401521,
* 419299, 414619, 403440, 415024, 420970, 413391,
* 424584, 424869
@@ -4780,11 +4780,13 @@ public class QvtOperationalVisitorCS
mappingOperations.add(operation);
}
}
+
+ String mappingFQName = (eClassifier == null) ? "" : eClassifier.getName() + EmfUtil.PATH_SEPARATOR; //$NON-NLS-1$
+ mappingFQName += mappingName;
+
if (mappingOperations.size() == 1) {
env.registerResolveInExp(resolveInExp, eClassifier, mappingName);
} else {
- String mappingFQName = (eClassifier == null) ? "" : eClassifier.getName() + EmfUtil.PATH_SEPARATOR; //$NON-NLS-1$
- mappingFQName += mappingName;
if (mappingOperations.size() == 0) {
env.reportError(NLS.bind(ValidationMessages.QvtOperationalVisitorCS_ResolveInMappingNotFound, new Object[] {
mappingFQName}), resolveInExpCS.getInMappingName() != null ? resolveInExpCS.getInMappingName() : resolveInExpCS);
@@ -4797,6 +4799,23 @@ public class QvtOperationalVisitorCS
ResolveExp result = populateResolveExp(resolveInExpCS, env, resolveInExp);
// 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(
+ NLS.bind(ValidationMessages.QvtOperationalVisitorCS_incompatibleTargetVariableType,
+ new Object[] {
+ QvtOperationalTypesUtil.getTypeFullName(targetVariableType),
+ QvtOperationalTypesUtil.getTypeFullName(mappingResultType),
+ mappingFQName
+ }),
+ resolveInExpCS.getTarget());
+ }
+ }
+
return result;
}
diff --git a/plugins/org.eclipse.m2m.qvt.oml/src/org/eclipse/m2m/internal/qvt/oml/ast/parser/ValidationMessages.java b/plugins/org.eclipse.m2m.qvt.oml/src/org/eclipse/m2m/internal/qvt/oml/ast/parser/ValidationMessages.java
index 416fa2092..5d731d7ff 100644
--- a/plugins/org.eclipse.m2m.qvt.oml/src/org/eclipse/m2m/internal/qvt/oml/ast/parser/ValidationMessages.java
+++ b/plugins/org.eclipse.m2m.qvt.oml/src/org/eclipse/m2m/internal/qvt/oml/ast/parser/ValidationMessages.java
@@ -10,7 +10,7 @@
* Borland Software Corporation - initial API and implementation
* Alex Paperno - bugs 272869, 268636, 414363, 419299, 414619, 420970, 413391,
* 424584
- * Christopher Gerking - bugs 289982, 427237
+ * Christopher Gerking - bugs 289982, 427237, 425634
*******************************************************************************/
package org.eclipse.m2m.internal.qvt.oml.ast.parser;
@@ -123,6 +123,7 @@ public final class ValidationMessages extends NLS {
public static String QvtOperationalVisitorCS_cantUseLibraryAsType;
public static String QvtOperationalVisitorCS_unsupportedQualifierOnTransformation;
public static String QvtOperationalVisitorCS_duplicateQualifierOnTransformation;
+ public static String QvtOperationalVisitorCS_incompatibleTargetVariableType;
public static String readOnlyPropertyModificationError;
public static String StringTypeMessageLogArgumentError;
diff --git a/plugins/org.eclipse.m2m.qvt.oml/src/org/eclipse/m2m/internal/qvt/oml/ast/parser/ValidationMessages.properties b/plugins/org.eclipse.m2m.qvt.oml/src/org/eclipse/m2m/internal/qvt/oml/ast/parser/ValidationMessages.properties
index d574d8d90..2f7c8cee6 100644
--- a/plugins/org.eclipse.m2m.qvt.oml/src/org/eclipse/m2m/internal/qvt/oml/ast/parser/ValidationMessages.properties
+++ b/plugins/org.eclipse.m2m.qvt.oml/src/org/eclipse/m2m/internal/qvt/oml/ast/parser/ValidationMessages.properties
@@ -10,7 +10,7 @@
# Borland Software Corporation - initial API and implementation
# Alex Paperno - bugs 272869, 268636, 414363, 419299, 419299, 414619,
# 420970, 413391, 414347, 424584
-# Christopher Gerking - bugs 289982, 427237
+# Christopher Gerking - bugs 289982, 427237, 425634
###############################################################################
AmbiguousModuleReference=Ambiguous module reference ''{0}''
AmbiguousOperationLookup=Ambiguous operation lookup
@@ -102,6 +102,7 @@ QvtOperationalVisitorCS_transformationNameDuplicates=Transformation with name ''
QvtOperationalVisitorCS_booleanTypeExpressionExpected=''Boolean'' type expression expected, expression of ''{0}'' type found.
QvtOperationalVisitorCS_canNotInstantiateAbstractType=Can''t instantiate abstract type ''{0}''
QvtOperationalVisitorCS_duplicateQualifierOnOperation=Duplicate qualifier ''{0}'' on operation ''{1}''
+QvtOperationalVisitorCS_incompatibleTargetVariableType=Incompatible target type ''{0}'' on resolveIn expression with mapping ''{2}'' result type ''{1}''
QvtOperationalVisitorCS_unsupportedInheritedBlackboxMapping=Unsupported inherited blackbox mapping ''{0}'' on mapping ''{1}''
QvtOperationalVisitorCS_unsupportedMergedBlackboxMapping=Unsupported merged blackbox mapping ''{0}'' on mapping ''{1}''
QvtOperationalVisitorCS_unsupportedInheritanceOnBlackboxMapping=Unsupported inherited mapping ''{0}'' on blackbox mapping ''{1}''
diff --git a/tests/org.eclipse.m2m.tests.qvt.oml/parserTestData/sources/bug425634/bug425634.qvto b/tests/org.eclipse.m2m.tests.qvt.oml/parserTestData/sources/bug425634/bug425634.qvto
new file mode 100644
index 000000000..cae46ca72
--- /dev/null
+++ b/tests/org.eclipse.m2m.tests.qvt.oml/parserTestData/sources/bug425634/bug425634.qvto
@@ -0,0 +1,17 @@
+modeltype ecore uses "http://www.eclipse.org/emf/2002/Ecore";
+
+transformation bug425634();
+
+main() {
+ var p1 = resolveoneIn(m1, /*<warn>*/EClass/*</warn>*/);
+ var p2 = resolveoneIn(m1, EClassifier);
+ var p3 = resolveoneIn(m1, ENamedElement);
+ var p4 = resolveoneIn(m1, /*<warn>*/EPackage/*</warn>*/);
+
+ var p5 = resolveoneIn(m2, EClass);
+ var p6 = resolveoneIn(m2, EClassifier);
+ var p7 = resolveoneIn(m2, ENamedElement);
+}
+
+abstract mapping m1() : EClassifier {}
+abstract mapping m2() : EClass {}
diff --git a/tests/org.eclipse.m2m.tests.qvt.oml/parserTestData/sources/implicitCallSrc/implicitCallSrc.qvto b/tests/org.eclipse.m2m.tests.qvt.oml/parserTestData/sources/implicitCallSrc/implicitCallSrc.qvto
index 7a99a8ad6..6e7a1ea90 100644
--- a/tests/org.eclipse.m2m.tests.qvt.oml/parserTestData/sources/implicitCallSrc/implicitCallSrc.qvto
+++ b/tests/org.eclipse.m2m.tests.qvt.oml/parserTestData/sources/implicitCallSrc/implicitCallSrc.qvto
@@ -101,7 +101,7 @@ mapping nonContextualMapping(in par : EClass) : EPackage {
init {
par.resolve(EClass);
resolve(EClass);
- resolveIn(nonContextualMapping, EClass);
+ resolveIn(nonContextualMapping, /*<warn>*/EClass/*</warn>*/);
var isKindOf := this.oclIsKindOf(OclAny);
-- TODO - uncomment when OclVoid is not used for module implicit source
@@ -133,7 +133,7 @@ main() {
eClass.resolve(EClass);
resolve(EClass);
- resolveIn(nonContextualMapping, EClass);
+ resolveIn(nonContextualMapping, /*<warn>*/EClass/*</warn>*/);
var strVal := localProp;
diff --git a/tests/org.eclipse.m2m.tests.qvt.oml/src/org/eclipse/m2m/tests/qvt/oml/ParserTests.java b/tests/org.eclipse.m2m.tests.qvt.oml/src/org/eclipse/m2m/tests/qvt/oml/ParserTests.java
index f9285ebfe..1075af3c8 100644
--- a/tests/org.eclipse.m2m.tests.qvt.oml/src/org/eclipse/m2m/tests/qvt/oml/ParserTests.java
+++ b/tests/org.eclipse.m2m.tests.qvt.oml/src/org/eclipse/m2m/tests/qvt/oml/ParserTests.java
@@ -124,7 +124,7 @@ public class ParserTests {
TestData.createSourceChecked("bug2732_wrongcondition", 1, 1), //$NON-NLS-1$
TestData.createSourceChecked("varscope", 10, 0), //$NON-NLS-1$
TestData.createSourceChecked("_while", 12, 0), //$NON-NLS-1$
- TestData.createSourceChecked("implicitCallSrc", 16, 4), //$NON-NLS-1$
+ TestData.createSourceChecked("implicitCallSrc", 16, 6), //$NON-NLS-1$
TestData.createSourceChecked("libraryWithModuleElements", 2, 0), //$NON-NLS-1$
new TestData("assert_log", 0), //$NON-NLS-1$
new TestData("opersignatureparamclash", 1), //$NON-NLS-1$
@@ -222,5 +222,6 @@ public class ParserTests {
TestData.createSourceChecked("bug289982_validation", 7, 7), //$NON-NLS-1$
new TestData("bug424584", 10), //$NON-NLS-1$
new TestData("bug428028", 0), //$NON-NLS-1$
+ TestData.createSourceChecked("bug425634", 0, 2), //$NON-NLS-1$
};
}

Back to the top