Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAdolfo SBH2016-02-01 17:13:47 +0000
committerAdolfo SBH2016-02-03 14:20:59 +0000
commit74da2cf2b5655c5dfd3233958942e01b6306a870 (patch)
tree10eb4025f1be655c1ce07cea0e4ffed98948dbe2
parentdee97d7f45af8f2575ba7d9c8f7137bfb8adc000 (diff)
downloadorg.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.java31
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();

Back to the top