Просмотр исходного кода

#366 : DIRTY get statechart for DomainRegistry in case of
SCTUnitGenerator

Johannes Dicks 10 лет назад
Родитель
Сommit
066704f761

+ 3 - 1
plugins/org.yakindu.sct.domain/META-INF/MANIFEST.MF

@@ -10,7 +10,9 @@ Require-Bundle: org.eclipse.core.runtime,
  org.eclipse.jface,
  com.google.guava,
  org.yakindu.sct.model.sgraph,
- com.google.inject
+ com.google.inject,
+ org.yakindu.base.xtext.utils.jface,
+ org.eclipse.xtext
 Bundle-RequiredExecutionEnvironment: JavaSE-1.7
 Bundle-ActivationPolicy: lazy
 Export-Package: org.yakindu.sct.domain,

+ 20 - 4
plugins/org.yakindu.sct.domain/src/org/yakindu/sct/domain/extension/DomainRegistry.java

@@ -14,7 +14,6 @@ import java.net.URL;
 import java.util.List;
 import java.util.NoSuchElementException;
 
-import org.eclipse.core.runtime.Assert;
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IConfigurationElement;
 import org.eclipse.core.runtime.Platform;
@@ -22,7 +21,9 @@ import org.eclipse.emf.ecore.EObject;
 import org.eclipse.emf.ecore.util.EcoreUtil;
 import org.eclipse.jface.resource.ImageDescriptor;
 import org.eclipse.swt.graphics.Image;
+import org.eclipse.xtext.EcoreUtil2;
 import org.osgi.framework.Bundle;
+import org.yakindu.base.xtext.utils.jface.viewers.ContextElementAdapter;
 import org.yakindu.sct.model.sgraph.SGraphPackage;
 import org.yakindu.sct.model.sgraph.Statechart;
 
@@ -142,7 +143,22 @@ public class DomainRegistry {
 
 	public static IDomainDescriptor getDomainDescriptor(EObject object) {
 		EObject rootContainer = EcoreUtil.getRootContainer(object);
-		Assert.isTrue(rootContainer instanceof Statechart);
-		return getDomainDescriptor(((Statechart) rootContainer).getDomainID());
-	}
+				if (rootContainer instanceof Statechart)
+						return getDomainDescriptor(((Statechart) rootContainer).getDomainID());
+					else {
+						return getDomainDescriptor(((Statechart) getStatechart(object)).getDomainID());
+					}
+				}
+				
+				protected static Statechart getStatechart(EObject context) {
+					final ContextElementAdapter provider = (ContextElementAdapter) EcoreUtil.getExistingAdapter(context.eResource(),
+							ContextElementAdapter.class);
+			
+					if (provider == null) {
+						return EcoreUtil2.getContainerOfType(context, Statechart.class);
+					} else {
+						return (Statechart) EcoreUtil.getObjectByType(provider.getElement().eResource().getContents(),
+								SGraphPackage.Literals.STATECHART);
+					}
+				}
 }