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

Fixed NPE in Property Sections

Andreas Mülder 11 лет назад
Родитель
Сommit
e5a348af4f

+ 29 - 1
plugins/org.yakindu.sct.ui.editor/src/org/yakindu/sct/ui/editor/propertysheets/AbstractEditorPropertySection.java

@@ -10,8 +10,14 @@
  */
 package org.yakindu.sct.ui.editor.propertysheets;
 
+import org.eclipse.core.resources.IFile;
+import org.eclipse.emf.common.util.URI;
 import org.eclipse.emf.databinding.EMFDataBindingContext;
 import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.emf.ecore.resource.ResourceSet;
+import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;
+import org.eclipse.emf.ecore.util.EcoreUtil;
 import org.eclipse.gmf.runtime.diagram.ui.properties.sections.AbstractModelerPropertySection;
 import org.eclipse.jface.action.MenuManager;
 import org.eclipse.jface.bindings.keys.KeyStroke;
@@ -28,6 +34,9 @@ import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Control;
 import org.eclipse.swt.widgets.Layout;
 import org.eclipse.swt.widgets.Menu;
+import org.eclipse.ui.IEditorInput;
+import org.eclipse.ui.IEditorPart;
+import org.eclipse.ui.IFileEditorInput;
 import org.eclipse.ui.ISharedImages;
 import org.eclipse.ui.IWorkbenchPartSite;
 import org.eclipse.ui.IWorkbenchWindow;
@@ -40,6 +49,8 @@ import org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetPage;
 import org.yakindu.sct.domain.extension.DomainRegistry;
 import org.yakindu.sct.domain.extension.DomainRegistry.DomainDescriptor;
 import org.yakindu.sct.domain.extension.IDomainModuleProvider;
+import org.yakindu.sct.model.sgraph.SGraphPackage;
+import org.yakindu.sct.model.sgraph.Statechart;
 
 import com.google.inject.Guice;
 import com.google.inject.Injector;
@@ -49,6 +60,7 @@ import de.itemis.xtext.utils.jface.viewers.ContextElementAdapter;
 import de.itemis.xtext.utils.jface.viewers.ContextElementAdapter.IContextElementProvider;
 import de.itemis.xtext.utils.jface.viewers.FilteringMenuManager;
 import de.itemis.xtext.utils.jface.viewers.StyledTextXtextAdapter;
+import de.itemis.xtext.utils.jface.viewers.util.ActiveEditorTracker;
 
 /**
  * 
@@ -137,7 +149,23 @@ public abstract class AbstractEditorPropertySection extends AbstractModelerPrope
 	}
 
 	protected Injector getInjector(String semanticTarget) {
-		DomainDescriptor domainDescriptor = DomainRegistry.getDomainDescriptor(getContextObject());
+		IEditorPart editor = ActiveEditorTracker.getLastActiveEditor();
+		IEditorInput editorInput = editor.getEditorInput();
+		String domainId = SGraphPackage.Literals.STATECHART__DOMAIN_ID.getDefaultValueLiteral();
+		// Since the context object is not set when getInjector is called from
+		// createControls, we have to determine the active domain id via the
+		// current editor input. 
+		if (editorInput instanceof IFileEditorInput) {
+			IFile file = ((IFileEditorInput) editorInput).getFile();
+			ResourceSet set = new ResourceSetImpl();
+			URI uri = URI.createPlatformResourceURI(file.getFullPath().toString(), true);
+			Resource resource = set.getResource(uri, true);
+			Statechart statechart = (Statechart) EcoreUtil.getObjectByType(resource.getContents(),
+					SGraphPackage.Literals.STATECHART);
+			domainId = statechart.getDomainID();
+			resource.unload();
+		}
+		DomainDescriptor domainDescriptor = DomainRegistry.getDomainDescriptor(domainId);
 		IDomainModuleProvider moduleProvider = domainDescriptor.getModuleProvider();
 		return Guice.createInjector(moduleProvider.getEmbeddedEditorModule(semanticTarget));
 	}