Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorfjouault2015-01-05 16:08:19 +0000
committerfjouault2015-01-05 16:08:19 +0000
commitfb68c78eb0ecbb9db138f6e8ee44d0e95b268763 (patch)
tree905a99ff4439a42777e2934c9c75f9a4d483c1ef
parent998eb1b798b7de5f6ef5f2b1f2fd02e522f5e4da (diff)
downloadorg.eclipse.atl.tcs-fb68c78eb0ecbb9db138f6e8ee44d0e95b268763.tar.gz
org.eclipse.atl.tcs-fb68c78eb0ecbb9db138f6e8ee44d0e95b268763.tar.xz
org.eclipse.atl.tcs-fb68c78eb0ecbb9db138f6e8ee44d0e95b268763.zip
added support for custom (and extra) model extensions + relaxed
dependency on Eclipse
-rw-r--r--plugins/org.eclipse.gmt.tcs.metadata/src/org/eclipse/gmt/tcs/metadata/adhoc/AdHocLanguageRegistry.java122
1 files changed, 70 insertions, 52 deletions
diff --git a/plugins/org.eclipse.gmt.tcs.metadata/src/org/eclipse/gmt/tcs/metadata/adhoc/AdHocLanguageRegistry.java b/plugins/org.eclipse.gmt.tcs.metadata/src/org/eclipse/gmt/tcs/metadata/adhoc/AdHocLanguageRegistry.java
index 265baa9..4f73596 100644
--- a/plugins/org.eclipse.gmt.tcs.metadata/src/org/eclipse/gmt/tcs/metadata/adhoc/AdHocLanguageRegistry.java
+++ b/plugins/org.eclipse.gmt.tcs.metadata/src/org/eclipse/gmt/tcs/metadata/adhoc/AdHocLanguageRegistry.java
@@ -23,6 +23,7 @@ import java.util.Map;
import org.eclipse.core.resources.IMarker;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IResource;
+import org.eclipse.core.resources.IWorkspace;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.FileLocator;
@@ -53,49 +54,46 @@ public class AdHocLanguageRegistry extends LanguageRegistry {
languageByExtension = new HashMap();
IExtensionRegistry registry = Platform.getExtensionRegistry();
- if (registry == null) {
- throw new RuntimeException("Extension registry not found");
- }
-
- IExtensionPoint point = registry.getExtensionPoint("org.eclipse.gmt.tcs.metadata.registryListener");//$NON-NLS-1$
-
- IExtension[] extensions = point.getExtensions();
- for(int i = 0 ; i < extensions.length ; i++){
- IConfigurationElement[] elements = extensions[i].getConfigurationElements();
- for(int j = 0 ; j < elements.length ; j++){
- try {
- LanguageRegistryListener registryListener = (LanguageRegistryListener)elements[j].createExecutableExtension("class");
- listeners.add(registryListener);
- } catch (CoreException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
+ if (registry != null) {
+ IExtensionPoint point = registry.getExtensionPoint("org.eclipse.gmt.tcs.metadata.registryListener");//$NON-NLS-1$
+
+ IExtension[] extensions = point.getExtensions();
+ for(int i = 0 ; i < extensions.length ; i++){
+ IConfigurationElement[] elements = extensions[i].getConfigurationElements();
+ for(int j = 0 ; j < elements.length ; j++){
+ try {
+ LanguageRegistryListener registryListener = (LanguageRegistryListener)elements[j].createExecutableExtension("class");
+ listeners.add(registryListener);
+ } catch (CoreException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
+ }
+ }
+
+ point = registry.getExtensionPoint("org.eclipse.gmt.tcs.metadata.language");//$NON-NLS-1$
+
+ extensions = point.getExtensions();
+ for(int i = 0 ; i < extensions.length ; i++){
+ IConfigurationElement[] elements = extensions[i].getConfigurationElements();
+ for(int j = 0 ; j < elements.length ; j++){
+ String pluginId = elements[j].getContributor().getName();
+ Bundle bundle = Platform.getBundle(pluginId);
+ String extension = elements[j].getAttribute("extension");
+ String name = elements[j].getAttribute("name");
+ URI metamodel = getURI(bundle, elements[j].getAttribute("metamodel"));
+ URL editor = getURL(bundle, elements[j], "editor");
+ URL outline = getURL(bundle, elements[j], "outline");
+ URL syntax = getURL(bundle, elements[j], "syntax");
+ URL parser = getURL(bundle, elements[j], "parser");
+ Language language = new PluginLanguage(
+ extension, name, metamodel, syntax, editor, outline, parser
+ );
+ languageByExtension.put(extension, language);
+ register(language);
}
}
- }
-
- point = registry.getExtensionPoint("org.eclipse.gmt.tcs.metadata.language");//$NON-NLS-1$
-
- extensions = point.getExtensions();
- for(int i = 0 ; i < extensions.length ; i++){
- IConfigurationElement[] elements = extensions[i].getConfigurationElements();
- for(int j = 0 ; j < elements.length ; j++){
- String pluginId = elements[j].getContributor().getName();
- Bundle bundle = Platform.getBundle(pluginId);
- String extension = elements[j].getAttribute("extension");
- String name = elements[j].getAttribute("name");
- URI metamodel = getURI(bundle, elements[j].getAttribute("metamodel"));
- URL editor = getURL(bundle, elements[j], "editor");
- URL outline = getURL(bundle, elements[j], "outline");
- URL syntax = getURL(bundle, elements[j], "syntax");
- URL parser = getURL(bundle, elements[j], "parser");
- Language language = new PluginLanguage(
- extension, name, metamodel, syntax, editor, outline, parser
- );
- languageByExtension.put(extension, language);
- register(language);
- }
- }
-
+ }
languageBySourceProject = new HashMap();
}
@@ -112,20 +110,25 @@ public class AdHocLanguageRegistry extends LanguageRegistry {
public Language getLanguage(String extension) {
Language ret = (Language)languageByExtension.get(extension);
- if((ret == null) && !traversedAllProjects) {
- IProject projects[] = ResourcesPlugin.getWorkspace().getRoot().getProjects();
+ IWorkspace workspace = null;
+ try {
+ workspace = ResourcesPlugin.getWorkspace();
- LanguageRegistry tsr = LanguageRegistry.getDefault();
- for(int i = 0 ; i < projects.length ; i++) {
- Language ts = tsr.getLanguageFromSource(projects[i]);
- // ts == null if the project is not a language project or is closed
- if(ts != null) {
- register(ts);
+ if((ret == null) && !traversedAllProjects) {
+ IProject projects[] = workspace.getRoot().getProjects();
+
+ LanguageRegistry tsr = LanguageRegistry.getDefault();
+ for(int i = 0 ; i < projects.length ; i++) {
+ Language ts = tsr.getLanguageFromSource(projects[i]);
+ // ts == null if the project is not a language project or is closed
+ if(ts != null) {
+ register(ts);
+ }
}
+ traversedAllProjects = true;
+ ret = (Language)languageByExtension.get(extension);
}
- traversedAllProjects = true;
- ret = (Language)languageByExtension.get(extension);
- }
+ } catch(IllegalStateException e) {}
return ret;
}
@@ -156,6 +159,21 @@ public class AdHocLanguageRegistry extends LanguageRegistry {
e.printStackTrace();
}
languageByExtension.put(ret.getExtension(), ret);
+
+ // Retrieving optional extra model extensions for which extraction should be provided
+ String extraModelExtensions = ((WorkspaceLanguage)ret).getProperty("extra.model.ext");
+ if(extraModelExtensions != null) {
+ String parts[] = extraModelExtensions.split(",");
+ for(int i = 0 ; i < parts.length ; i++) {
+ languageByExtension.put("extraModelExtension:" + parts[i], ret);
+ }
+ }
+
+ // Retrieving optional model extension that should be used for extraction (instead of default ${dsl.ext}.xmi)
+ String modelExtension = ((WorkspaceLanguage)ret).getProperty("model.ext");
+ if(modelExtension != null) {
+ languageByExtension.put("extraModelExtension:" + modelExtension, ret);
+ }
register(ret);
} catch(RuntimeException re) {
// we get here when the project is not valid

Back to the top