diff options
author | sboyko | 2014-04-12 10:48:23 +0000 |
---|---|---|
committer | sboyko | 2014-04-12 10:48:23 +0000 |
commit | 1926f144d37da167c53201133c9b9160a1822aa6 (patch) | |
tree | 7018b4d878fb2529cc0d8d9bde4324afc509f2cc | |
parent | f04863fc257195f61d85e575be134c4a47e075ae (diff) | |
download | org.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
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$ }; } |