diff options
author | Adolfo SBH | 2016-02-01 17:13:47 +0000 |
---|---|---|
committer | Adolfo SBH | 2016-02-03 14:20:59 +0000 |
commit | 74da2cf2b5655c5dfd3233958942e01b6306a870 (patch) | |
tree | 10eb4025f1be655c1ce07cea0e4ffed98948dbe2 | |
parent | dee97d7f45af8f2575ba7d9c8f7137bfb8adc000 (diff) | |
download | org.eclipse.qvtd-74da2cf2b5655c5dfd3233958942e01b6306a870.tar.gz org.eclipse.qvtd-74da2cf2b5655c5dfd3233958942e01b6306a870.tar.xz org.eclipse.qvtd-74da2cf2b5655c5dfd3233958942e01b6306a870.zip |
[ocl2qvtp] - Fixing QVTp merger, to provide TypedModels referring
expected usedPackages
- Mappings of the extended transformation now refer to the typedModels
of the extending one
-rw-r--r-- | plugins/org.eclipse.qvtd.cs2as.compiler/src/org/eclipse/qvtd/cs2as/compiler/internal/QVTpModelsMerger.java | 31 |
1 files changed, 27 insertions, 4 deletions
diff --git a/plugins/org.eclipse.qvtd.cs2as.compiler/src/org/eclipse/qvtd/cs2as/compiler/internal/QVTpModelsMerger.java b/plugins/org.eclipse.qvtd.cs2as.compiler/src/org/eclipse/qvtd/cs2as/compiler/internal/QVTpModelsMerger.java index 462ac0537..993ca3a4a 100644 --- a/plugins/org.eclipse.qvtd.cs2as.compiler/src/org/eclipse/qvtd/cs2as/compiler/internal/QVTpModelsMerger.java +++ b/plugins/org.eclipse.qvtd.cs2as.compiler/src/org/eclipse/qvtd/cs2as/compiler/internal/QVTpModelsMerger.java @@ -32,10 +32,12 @@ import org.eclipse.ocl.pivot.VariableExp; import org.eclipse.ocl.pivot.utilities.EnvironmentFactory; import org.eclipse.ocl.pivot.utilities.FeatureFilter; import org.eclipse.qvtd.compiler.internal.etl.PivotModel; +import org.eclipse.qvtd.pivot.qvtbase.Domain; import org.eclipse.qvtd.pivot.qvtbase.Predicate; import org.eclipse.qvtd.pivot.qvtbase.QVTbaseFactory; import org.eclipse.qvtd.pivot.qvtbase.Rule; import org.eclipse.qvtd.pivot.qvtbase.Transformation; +import org.eclipse.qvtd.pivot.qvtbase.TypedModel; import org.eclipse.qvtd.pivot.qvtcorebase.CoreDomain; import org.eclipse.qvtd.pivot.qvtimperative.ImperativeModel; import org.eclipse.qvtd.pivot.qvtimperative.Mapping; @@ -116,16 +118,31 @@ public class QVTpModelsMerger { for (Import _import : importsToRemove) { resultQVTpModel.getOwnedImports().remove(_import); } - - // Mapping rules + + Transformation resultTransformation = getTransformation(resultQVTpModel); Transformation mergedTransformation = getTransformation(mergedQVTpModel); + + // TypedModels + Map<String, List<Package>> tmName2oldUsedPackages = new HashMap<String, List<Package>>(); + for (TypedModel typedModel : mergedTransformation.getModelParameter()) { + tmName2oldUsedPackages.put(typedModel.getName(),typedModel.getUsedPackage()); + } + Map<String, TypedModel> tmName2newTypedModel = new HashMap<String, TypedModel>(); + for (TypedModel typedModel : resultTransformation.getModelParameter()) { + typedModel.getUsedPackage().addAll(tmName2oldUsedPackages.get(typedModel.getName())); + tmName2newTypedModel.put(typedModel.getName(), typedModel); + } + + // Mapping rules EList<Rule> resultRules = resultTransformation.getRule(); for (Rule rule : mergedTransformation.getRule()) { Mapping baseRule = (Mapping) EcoreUtil.copy(rule); - refactorMapping(envF, baseRule, inputType2RefiningMapping); + refactorMapping(envF, baseRule, inputType2RefiningMapping, tmName2newTypedModel); resultRules.add(baseRule); } + + } private static boolean doesNamespaceCorrespondToMergedQVTpModel(ImperativeModel mergedQVTpModel, Namespace ns) { @@ -188,7 +205,13 @@ public class QVTpModelsMerger { return true; } - private static void refactorMapping (EnvironmentFactory envF, Mapping mappingToRefactor, Map<Class, List<Mapping>> inputType2extendingMapping) { + private static void refactorMapping (EnvironmentFactory envF, Mapping mappingToRefactor, Map<Class, List<Mapping>> inputType2extendingMapping, + Map<String, TypedModel> tmName2newTypedModel) { + + // TypedModel refactor + for (Domain domain : mappingToRefactor.getDomain()) { + domain.setTypedModel(tmName2newTypedModel.get(domain.getTypedModel().getName())); + } Variable inputVar = getInputVariable(mappingToRefactor); Type refinedType = inputVar.getType(); |