Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorsboyko2014-11-20 10:09:30 +0000
committersboyko2014-11-20 10:09:30 +0000
commitde499dbfbd960a63f62c4938d9dc71172e075120 (patch)
treeddd2ed5e5207cb55db90d6772ff3145bd467f333 /plugins/org.eclipse.m2m.qvt.oml/src/org/eclipse
parent261c5df3c86e33aa35c6d43f05f384c8c1dd3db3 (diff)
downloadorg.eclipse.qvto-de499dbfbd960a63f62c4938d9dc71172e075120.tar.gz
org.eclipse.qvto-de499dbfbd960a63f62c4938d9dc71172e075120.tar.xz
org.eclipse.qvto-de499dbfbd960a63f62c4938d9dc71172e075120.zip
[376644] - URI map resolution should fall back to EPackage registry
[441094] - MetamodelRegistry does not keep track of EPackageRegistryImpl delegate [326651] - Unable to update a metamodel in the MetamodelRegistry cherry-picked from cgerking/misc: I95268f0f9ef8d52c00bcc89bf244e7cfe9ecfd1c
Diffstat (limited to 'plugins/org.eclipse.m2m.qvt.oml/src/org/eclipse')
-rw-r--r--plugins/org.eclipse.m2m.qvt.oml/src/org/eclipse/m2m/internal/qvt/oml/ast/parser/MetamodelResolutionHelper.java65
-rw-r--r--plugins/org.eclipse.m2m.qvt.oml/src/org/eclipse/m2m/internal/qvt/oml/compiler/CompilerUtils.java24
-rw-r--r--plugins/org.eclipse.m2m.qvt.oml/src/org/eclipse/m2m/internal/qvt/oml/compiler/QVTOCompiler.java28
3 files changed, 44 insertions, 73 deletions
diff --git a/plugins/org.eclipse.m2m.qvt.oml/src/org/eclipse/m2m/internal/qvt/oml/ast/parser/MetamodelResolutionHelper.java b/plugins/org.eclipse.m2m.qvt.oml/src/org/eclipse/m2m/internal/qvt/oml/ast/parser/MetamodelResolutionHelper.java
index 8d246ed98..d830ebdcd 100644
--- a/plugins/org.eclipse.m2m.qvt.oml/src/org/eclipse/m2m/internal/qvt/oml/ast/parser/MetamodelResolutionHelper.java
+++ b/plugins/org.eclipse.m2m.qvt.oml/src/org/eclipse/m2m/internal/qvt/oml/ast/parser/MetamodelResolutionHelper.java
@@ -17,7 +17,7 @@ import java.util.List;
import org.eclipse.emf.ecore.EPackage;
import org.eclipse.m2m.internal.qvt.oml.ast.env.QvtOperationalEnv;
-import org.eclipse.m2m.internal.qvt.oml.emf.util.EmfException;
+import org.eclipse.m2m.internal.qvt.oml.emf.util.EmfUtil;
import org.eclipse.m2m.internal.qvt.oml.emf.util.mmregistry.MetamodelRegistry;
/**
@@ -37,43 +37,34 @@ class MetamodelResolutionHelper {
EPackage.Registry registry = qvtEnv.getFactory().getEPackageRegistry();
List<EPackage> metamodels = new ArrayList<EPackage>(1);
- try {
- List<EPackage> desc = Collections.emptyList();
- if (metamodelUri != null && path.isEmpty()) {
- EPackage ePackage = registry.getEPackage(metamodelUri);
- if(ePackage != null) {
- desc = Collections.singletonList(ePackage);
- } else {
- ePackage = MetamodelRegistry.tryLookupEmptyRootPackage(metamodelUri, registry);
- if(ePackage != null) {
- desc = Collections.singletonList(ePackage);
- }
- }
+
+ List<EPackage> desc = Collections.emptyList();
+ if (metamodelUri != null && path.isEmpty()) {
+ EPackage ePackage = registry.getEPackage(metamodelUri);
+ if(ePackage != null) {
+ desc = Collections.singletonList(ePackage);
} else {
- desc = MetamodelRegistry.resolveMetamodels(registry, path);
- }
-
- for(EPackage model : desc) {
- // register meta-model for EClassifier lookup
- if (model.getNsURI() == null) {
- while (true) {
- if (model.getESuperPackage() == null) {
- break;
- }
- model = model.getESuperPackage();
- }
- }
-
- metamodels.add(model);
- if(metamodelUri != null) {
- qvtEnv.getEPackageRegistry().put(metamodelUri, model);
- }
-
- //break;
- }
- } catch (EmfException e) {
- // It's legal situation of unresolved metamodels
- }
+ ePackage = MetamodelRegistry.tryLookupEmptyRootPackage(metamodelUri, registry);
+ if(ePackage != null) {
+ desc = Collections.singletonList(ePackage);
+ }
+ }
+ } else {
+ desc = MetamodelRegistry.resolveMetamodels(registry, path);
+ }
+
+ for(EPackage model : desc) {
+ // register meta-model for EClassifier lookup
+ if (model.getNsURI() == null) {
+ model = EmfUtil.getRootPackage(model);
+ }
+
+ metamodels.add(model);
+ if(metamodelUri != null) {
+ qvtEnv.getEPackageRegistry().put(metamodelUri, model);
+ }
+ }
+
return metamodels;
}
}
diff --git a/plugins/org.eclipse.m2m.qvt.oml/src/org/eclipse/m2m/internal/qvt/oml/compiler/CompilerUtils.java b/plugins/org.eclipse.m2m.qvt.oml/src/org/eclipse/m2m/internal/qvt/oml/compiler/CompilerUtils.java
index 494c58852..7d0569b4c 100644
--- a/plugins/org.eclipse.m2m.qvt.oml/src/org/eclipse/m2m/internal/qvt/oml/compiler/CompilerUtils.java
+++ b/plugins/org.eclipse.m2m.qvt.oml/src/org/eclipse/m2m/internal/qvt/oml/compiler/CompilerUtils.java
@@ -31,7 +31,6 @@ import org.eclipse.m2m.internal.qvt.oml.NLS;
import org.eclipse.m2m.internal.qvt.oml.QvtMessage;
import org.eclipse.m2m.internal.qvt.oml.common.io.CResourceRepositoryContext;
import org.eclipse.m2m.internal.qvt.oml.common.io.eclipse.WorkspaceMetamodelRegistryProvider;
-import org.eclipse.m2m.internal.qvt.oml.emf.util.mmregistry.EmfStandaloneMetamodelProvider;
import org.eclipse.m2m.internal.qvt.oml.emf.util.mmregistry.IMetamodelProvider;
import org.eclipse.m2m.internal.qvt.oml.emf.util.mmregistry.IMetamodelRegistryProvider;
import org.eclipse.m2m.internal.qvt.oml.emf.util.mmregistry.MetamodelRegistry;
@@ -106,7 +105,7 @@ public class CompilerUtils {
if(metamodelRegistry != null) {
packageRegistry = metamodelRegistry.toEPackageRegistry();
} else {
- packageRegistry = new EPackageRegistryImpl();
+ packageRegistry = new EPackageRegistryImpl(EPackage.Registry.INSTANCE);
}
return packageRegistry;
@@ -132,7 +131,7 @@ public class CompilerUtils {
static class Eclipse {
static QVTOCompiler createCompiler() {
- return new QVTOCompiler(new WorkspaceMetamodelRegistryProvider(createResourceSet()));
+ return new QVTOCompiler(createMetamodelRegistryProvider(createResourceSet()));
}
static Monitor createMonitor(Monitor monitor, int ticks) {
@@ -151,23 +150,12 @@ public class CompilerUtils {
static WorkspaceMetamodelRegistryProvider createMetamodelRegistryProvider(final EPackage.Registry packageRegistry, ResourceSet metamodelResourceSet) {
return new WorkspaceMetamodelRegistryProvider(metamodelResourceSet) {
- IMetamodelProvider registry = new EmfStandaloneMetamodelProvider(packageRegistry);
+
@Override
- public MetamodelRegistry getRegistry(IRepositoryContext context) {
- MetamodelRegistry result = super.getRegistry(context);
- if(result == MetamodelRegistry.getInstance()) {
- // FIXME - get rid of this hack by providing
- // a protected method WorkspaceProvider::getDelegateRegistry();
- // which by default returns MetamodelRegistry.getInstance()
- result = new MetamodelRegistry(registry);
- } else if(result != null) {
- MetamodelRegistry customRegistry = new MetamodelRegistry(registry);
- customRegistry.merge(result);
- result = customRegistry;
- }
- return result;
+ protected IMetamodelProvider createDelegateMetamodelProvider() {
+ return MetamodelRegistry.getDefaultMetamodelProvider(packageRegistry);
}
};
- }
+ }
}
}
diff --git a/plugins/org.eclipse.m2m.qvt.oml/src/org/eclipse/m2m/internal/qvt/oml/compiler/QVTOCompiler.java b/plugins/org.eclipse.m2m.qvt.oml/src/org/eclipse/m2m/internal/qvt/oml/compiler/QVTOCompiler.java
index 99d5e5c77..8fde40c53 100644
--- a/plugins/org.eclipse.m2m.qvt.oml/src/org/eclipse/m2m/internal/qvt/oml/compiler/QVTOCompiler.java
+++ b/plugins/org.eclipse.m2m.qvt.oml/src/org/eclipse/m2m/internal/qvt/oml/compiler/QVTOCompiler.java
@@ -37,7 +37,6 @@ import org.eclipse.emf.common.util.UniqueEList;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.EPackage;
import org.eclipse.emf.ecore.EPackage.Registry;
-import org.eclipse.emf.ecore.impl.EPackageRegistryImpl;
import org.eclipse.emf.ecore.resource.Resource;
import org.eclipse.emf.ecore.resource.ResourceSet;
import org.eclipse.emf.ecore.resource.URIConverter;
@@ -63,7 +62,6 @@ import org.eclipse.m2m.internal.qvt.oml.cst.ImportCS;
import org.eclipse.m2m.internal.qvt.oml.cst.UnitCS;
import org.eclipse.m2m.internal.qvt.oml.cst.parser.AbstractQVTParser;
import org.eclipse.m2m.internal.qvt.oml.emf.util.EmfUtil;
-import org.eclipse.m2m.internal.qvt.oml.emf.util.mmregistry.EmfStandaloneMetamodelProvider;
import org.eclipse.m2m.internal.qvt.oml.emf.util.mmregistry.IMetamodelRegistryProvider;
import org.eclipse.m2m.internal.qvt.oml.emf.util.mmregistry.MetamodelRegistry;
import org.eclipse.m2m.internal.qvt.oml.expressions.ModelType;
@@ -121,6 +119,7 @@ public class QVTOCompiler {
public static QVTOCompiler createCompiler(EPackage.Registry registry) {
ResourceSetImpl rs = new ResourceSetImpl();
+
if(registry != null) {
rs.setPackageRegistry(registry);
@@ -139,11 +138,8 @@ public class QVTOCompiler {
rs.setURIResourceMap(uriResourceMap);
}
}
-
- final EPackageRegistryImpl packageRegistryImpl = new EPackageRegistryImpl(EPackage.Registry.INSTANCE);
- packageRegistryImpl.putAll(registry);
-
- IMetamodelRegistryProvider metamodelRegistryProvider = createMetamodelRegistryProvider(packageRegistryImpl, rs);
+
+ IMetamodelRegistryProvider metamodelRegistryProvider = createMetamodelRegistryProvider(registry, rs);
return new QVTOCompiler(metamodelRegistryProvider);
}
@@ -569,7 +565,7 @@ public class QVTOCompiler {
private CompiledUnit loadBlackboxUnit(UnitProxy unit) throws IOException {
ModelContents contents = (ModelContents) unit.getContents();
- List<EObject> topElements = contents.loadElements(CompilerUtils.getEPackageRegistry(unit.getURI(), fMetamodelRegistryProvider));
+ List<EObject> topElements = contents.loadElements(getEPackageRegistry(unit.getURI()));
List<QvtOperationalModuleEnv> modelEnvs = new ArrayList<QvtOperationalModuleEnv>(topElements.size());
for (EObject nextElement : topElements) {
@@ -746,15 +742,7 @@ public class QVTOCompiler {
}
private static IMetamodelRegistryProvider createMetamodelRegistryProvider(ResourceSet metamodelResourceSet) {
- if(EMFPlugin.IS_ECLIPSE_RUNNING && EMFPlugin.IS_RESOURCES_BUNDLE_AVAILABLE) {
- return Eclipse.createMetamodelRegistryProvider(metamodelResourceSet);
- }
-
- return new IMetamodelRegistryProvider() {
- public MetamodelRegistry getRegistry(IRepositoryContext context) {
- return new MetamodelRegistry(new EmfStandaloneMetamodelProvider());
- }
- };
+ return createMetamodelRegistryProvider(EPackage.Registry.INSTANCE, metamodelResourceSet);
}
private static IMetamodelRegistryProvider createMetamodelRegistryProvider(final EPackage.Registry packageRegistry, ResourceSet metamodelResourceSet) {
@@ -762,9 +750,13 @@ public class QVTOCompiler {
return Eclipse.createMetamodelRegistryProvider(packageRegistry, metamodelResourceSet);
}
+ return createStandaloneMetamodelRegistryProvider(packageRegistry);
+ }
+
+ private static IMetamodelRegistryProvider createStandaloneMetamodelRegistryProvider(final EPackage.Registry packageRegistry) {
return new IMetamodelRegistryProvider() {
public MetamodelRegistry getRegistry(IRepositoryContext context) {
- return new MetamodelRegistry(new EmfStandaloneMetamodelProvider(packageRegistry));
+ return new MetamodelRegistry(packageRegistry);
}
};
}

Back to the top