Browse Source

Refactored GlobalScopeProvider, Statechart Editor is dirty aware now

Andreas Mülder 14 years ago
parent
commit
e0f3e533c4

+ 2 - 1
plugins/org.yakindu.sct.model.stext.resource/META-INF/MANIFEST.MF

@@ -12,7 +12,8 @@ Require-Bundle: org.eclipse.ui,
  org.eclipse.gmf.runtime.emf.core,
  org.yakindu.sct.model.stext;bundle-version="1.0.0",
  org.eclipse.xtext.ui;bundle-version="2.0.0",
- org.yakindu.sct.model.stext.ui;bundle-version="1.0.0"
+ org.yakindu.sct.model.stext.ui;bundle-version="1.0.0",
+ de.itemis.xtext.utils.jface;bundle-version="1.0.0"
 Bundle-RequiredExecutionEnvironment: J2SE-1.5
 Bundle-ActivationPolicy: lazy
 Export-Package: org.yakindu.sct.model.stext.resource,

+ 15 - 1
plugins/org.yakindu.sct.model.stext.resource/src/org/yakindu/sct/model/stext/resource/factory/InjectMembersResourceFactory.java

@@ -11,9 +11,12 @@
 package org.yakindu.sct.model.stext.resource.factory;
 
 import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.ecore.EObject;
 import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.emf.ecore.util.EcoreUtil;
 import org.eclipse.emf.ecore.xmi.impl.XMIResourceFactoryImpl;
 import org.eclipse.xtext.Constants;
+import org.yakindu.sct.model.sgraph.SGraphPackage;
 import org.yakindu.sct.model.sgraph.resource.SGraphInjectMembersResource;
 import org.yakindu.sct.model.stext.resource.services.StateInjectionService;
 import org.yakindu.sct.model.stext.resource.services.StatechartInjectionService;
@@ -24,6 +27,8 @@ import com.google.inject.Injector;
 import com.google.inject.name.Named;
 
 import de.itemis.xtext.utils.gmf.resource.InjectMembersResource;
+import de.itemis.xtext.utils.jface.viewers.ContextElementAdapter;
+import de.itemis.xtext.utils.jface.viewers.ContextElementAdapter.IContextElementProvider;
 
 /**
  * ResourceFactory for the {@link InjectMembersResource} with services for the
@@ -49,12 +54,21 @@ public class InjectMembersResourceFactory extends XMIResourceFactoryImpl {
 
 	@Override
 	public Resource createResource(URI uri) {
-		InjectMembersResource resource = new SGraphInjectMembersResource(uri);
+		final InjectMembersResource resource = new SGraphInjectMembersResource(
+				uri);
 		injector.injectMembers(resource);
 		resource.getServices().add(transitionService);
 		resource.getServices().add(stateService);
 		resource.getServices().add(statechartService);
 		resource.setLanguageName(languageName);
+		resource.eAdapters().add(
+				new ContextElementAdapter(new IContextElementProvider() {
+					public EObject getContextObject() {
+						return (EObject) EcoreUtil.getObjectByType(
+								resource.getContents(),
+								SGraphPackage.Literals.STATECHART);
+					}
+				}));
 		return resource;
 	}
 }

+ 50 - 21
plugins/org.yakindu.sct.model.stext/src/org/yakindu/sct/model/stext/scoping/STextGlobalScopeProvider.java

@@ -10,55 +10,84 @@
  */
 package org.yakindu.sct.model.stext.scoping;
 
+import org.eclipse.core.runtime.Assert;
+import org.eclipse.emf.common.util.URI;
 import org.eclipse.emf.ecore.EReference;
 import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.emf.ecore.util.EcoreUtil;
 import org.eclipse.xtext.resource.IEObjectDescription;
 import org.eclipse.xtext.scoping.IScope;
 import org.eclipse.xtext.scoping.impl.DefaultGlobalScopeProvider;
 import org.eclipse.xtext.scoping.impl.FilteringScope;
-import org.eclipse.xtext.scoping.impl.ResourceSetGlobalScopeProvider;
-import org.eclipse.xtext.scoping.impl.SimpleScope;
 import org.yakindu.base.types.TypesPackage;
 import org.yakindu.base.types.scope.TypeLibrariesExtensionPointScopeHelper;
-import org.yakindu.sct.model.sgraph.SGraphPackage;
+import org.yakindu.sct.model.stext.stext.StextPackage;
 
 import com.google.common.base.Predicate;
-import com.google.common.collect.Iterables;
 import com.google.inject.Inject;
 
+import de.itemis.xtext.utils.jface.viewers.ContextElementAdapter;
+
 /**
- * This Global Scope provider exposes only Statecharts as global objects to
- * prevent crossreferencing of Events and Variables between Statecharts.
- * 
  * @author andreas muelder - Initial contribution and API
  * 
  */
-public class STextGlobalScopeProvider extends ResourceSetGlobalScopeProvider {
-
-	@Inject
-	private DefaultGlobalScopeProvider delegate;
+public class STextGlobalScopeProvider extends DefaultGlobalScopeProvider {
 
 	@Inject
 	private TypeLibrariesExtensionPointScopeHelper typeScopeHelper;
 
 	public IScope getScope(Resource context, EReference reference,
 			Predicate<IEObjectDescription> filter) {
-		IScope scope = super.getScope(context, reference, filter);
-		IScope globalScope = delegate.getScope(context, reference, filter);
-		FilteringScope filteringScope = new FilteringScope(globalScope,
-				new Predicate<IEObjectDescription>() {
+		IScope parentScope = super.getScope(context, reference, filter);
+		parentScope = filterExternalDeclarations(context, parentScope);
+		parentScope = addTypeLibraries(reference, parentScope);
+		return parentScope;
+	}
 
+	/**
+	 * Filter all Variables and Events that are not contained in context
+	 * resource
+	 * 
+	 * @param context
+	 * @param parentScope
+	 * @return
+	 */
+	protected IScope filterExternalDeclarations(Resource context,
+			IScope parentScope) {
+		final ContextElementAdapter provider = (ContextElementAdapter) EcoreUtil
+				.getExistingAdapter(context, ContextElementAdapter.class);
+		Assert.isNotNull(provider);
+		parentScope = new FilteringScope(parentScope,
+				new Predicate<IEObjectDescription>() {
 					public boolean apply(IEObjectDescription input) {
-						return input.getEClass() == SGraphPackage.Literals.STATECHART;
+						if (input.getEClass() == StextPackage.Literals.EVENT_DEFINITION
+								|| input.getEClass() == StextPackage.Literals.VARIABLE_DEFINITION) {
+							URI sourceURI = input.getEObjectURI()
+									.trimFragment();
+							return sourceURI.equals(provider.getElement()
+									.eResource().getURI());
+						}
+						return true;
 					}
 				});
-		IScope parentScope = new SimpleScope(Iterables.concat(
-				scope.getAllElements(), filteringScope.getAllElements()));
-		
-		// add types from type libraries, in case the type of the reference refers to Type
-		if (reference.getEReferenceType().isSuperTypeOf(TypesPackage.eINSTANCE.getType())) {
+		return parentScope;
+	}
+
+	/**
+	 * add types from type libraries, in case the type of the reference refers
+	 * to Type
+	 * 
+	 * @param reference
+	 * @param parentScope
+	 * @return
+	 */
+	protected IScope addTypeLibraries(EReference reference, IScope parentScope) {
+		if (reference.getEReferenceType().isSuperTypeOf(
+				TypesPackage.eINSTANCE.getType())) {
 			return typeScopeHelper.createExtensionScope(parentScope);
 		}
 		return parentScope;
 	}
+
 }

+ 15 - 31
plugins/org.yakindu.sct.ui.editor/src/org/yakindu/sct/ui/editor/editor/StatechartDiagramEditor.java

@@ -14,22 +14,18 @@ import org.eclipse.core.resources.IMarker;
 import org.eclipse.core.resources.IProject;
 import org.eclipse.core.resources.IProjectDescription;
 import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.Status;
 import org.eclipse.draw2d.ConnectionLayer;
 import org.eclipse.draw2d.ViewportAwareConnectionLayerClippingStrategy;
-import org.eclipse.emf.common.notify.Notification;
-import org.eclipse.emf.ecore.EObject;
 import org.eclipse.emf.transaction.ResourceSetChangeEvent;
 import org.eclipse.emf.transaction.ResourceSetListener;
 import org.eclipse.emf.transaction.ResourceSetListenerImpl;
+import org.eclipse.emf.transaction.TransactionalEditingDomain;
 import org.eclipse.gef.LayerConstants;
 import org.eclipse.gef.RootEditPart;
 import org.eclipse.gef.editparts.LayerManager;
 import org.eclipse.gmf.runtime.common.ui.services.marker.MarkerNavigationService;
 import org.eclipse.gmf.runtime.diagram.core.preferences.PreferencesHint;
 import org.eclipse.gmf.runtime.diagram.ui.resources.editor.parts.DiagramDocumentEditor;
-import org.eclipse.gmf.runtime.notation.NotationPackage;
 import org.eclipse.swt.widgets.Composite;
 import org.eclipse.ui.IEditorInput;
 import org.eclipse.ui.IEditorSite;
@@ -39,11 +35,12 @@ import org.eclipse.ui.PlatformUI;
 import org.eclipse.ui.help.IWorkbenchHelpSystem;
 import org.eclipse.ui.ide.IGotoMarker;
 import org.eclipse.xtext.ui.XtextProjectHelper;
-import org.yakindu.sct.model.sgraph.SGraphPackage;
 import org.yakindu.sct.ui.editor.DiagramActivator;
 import org.yakindu.sct.ui.editor.utils.IYakinduSctHelpContextIds;
 import org.yakindu.sct.ui.editor.validation.ValidationAction;
 
+import de.itemis.xtext.utils.gmf.resource.DirtyStateListener;
+
 /**
  * 
  * @author andreas muelder - Initial contribution and API
@@ -54,33 +51,14 @@ public class StatechartDiagramEditor extends DiagramDocumentEditor implements
 
 	public static final String ID = "org.yakindu.sct.ui.editor.editor.StatechartDiagramEditor";
 
-	// Listenes the ResourceSet for semantic changes
 	private ResourceSetListener validationListener = new ResourceSetListenerImpl() {
 		@Override
 		public void resourceSetChanged(ResourceSetChangeEvent event) {
 			validate();
-
-			// FIXME: Validation should only be done if semantic changes are
-			// done
-			// with the solution below the error marker is set not correctly
-			// (See YAK-HMI 511)
-			// if (isGraphModelAffected(event)) {
-			// validate();
-			// }
 		}
 	};
 
-	// private boolean isGraphModelAffected(ResourceSetChangeEvent event) {
-	// for (Notification notification : event.getNotifications()) {
-	// if (notification.getNotifier() instanceof EObject) {
-	// EObject eObject = (EObject) notification.getNotifier();
-	// if (SGraphPackage.eINSTANCE == eObject.eClass().getEPackage()) {
-	// return true;
-	// }
-	// }
-	// }
-	// return false;
-	// }
+	private DirtyStateListener domainAdapter;
 
 	public StatechartDiagramEditor() {
 		super(true);
@@ -113,14 +91,18 @@ public class StatechartDiagramEditor extends DiagramDocumentEditor implements
 			description.setNatureIds(newNatures);
 			project.setDescription(description, null);
 		} catch (CoreException e) {
-			DiagramActivator
-					.getDefault()
-					.getLog()
-					.log(new Status(IStatus.ERROR, DiagramActivator.PLUGIN_ID,
-							"Xtext nature can't be added", e));
+			e.printStackTrace();
 		}
 	}
 
+	@Override
+	protected TransactionalEditingDomain createEditingDomain() {
+		TransactionalEditingDomain domain = super.createEditingDomain();
+		domainAdapter = new DirtyStateListener();
+		domain.addResourceSetListener(domainAdapter);
+		return domain;
+	}
+
 	@Override
 	protected void sanityCheckState(IEditorInput input) {
 		super.sanityCheckState(input);
@@ -175,6 +157,8 @@ public class StatechartDiagramEditor extends DiagramDocumentEditor implements
 	@Override
 	public void dispose() {
 		getEditingDomain().removeResourceSetListener(validationListener);
+		getEditingDomain().removeResourceSetListener(domainAdapter);
+		domainAdapter.dispose();
 		super.dispose();
 	}
 }

+ 9 - 8
plugins/org.yakindu.sct.ui.editor/src/org/yakindu/sct/ui/editor/editparts/PlugableExternalXtextLabelEditPart.java

@@ -10,10 +10,9 @@
  */
 package org.yakindu.sct.ui.editor.editparts;
 
-import java.util.Collections;
-
 import org.eclipse.emf.common.notify.Notification;
 import org.eclipse.emf.ecore.EAttribute;
+import org.eclipse.emf.ecore.EObject;
 import org.eclipse.gef.EditPolicy;
 import org.eclipse.gef.editpolicies.DirectEditPolicy;
 import org.eclipse.gef.tools.DirectEditManager;
@@ -38,7 +37,7 @@ import com.google.inject.Injector;
 import de.itemis.gmf.runtime.commons.parsers.AttributeParser;
 import de.itemis.xtext.utils.gmf.directedit.ExternalXtextLabelEditPart;
 import de.itemis.xtext.utils.gmf.directedit.XtextDirectEditManager;
-import de.itemis.xtext.utils.jface.viewers.context.CloningBasedFakeContextResourcesProvider;
+import de.itemis.xtext.utils.jface.viewers.ContextElementAdapter.IContextElementProvider;
 
 /**
  * 
@@ -46,7 +45,8 @@ import de.itemis.xtext.utils.jface.viewers.context.CloningBasedFakeContextResour
  * 
  */
 public abstract class PlugableExternalXtextLabelEditPart extends
-		ExternalXtextLabelEditPart implements ITextAwareEditPart {
+		ExternalXtextLabelEditPart implements ITextAwareEditPart,
+		IContextElementProvider {
 
 	private Injector injector;
 
@@ -82,11 +82,8 @@ public abstract class PlugableExternalXtextLabelEditPart extends
 	@Override
 	protected DirectEditManager createDirectEditManager() {
 		if (injector != null) {
-			CloningBasedFakeContextResourcesProvider fakeContext = new CloningBasedFakeContextResourcesProvider(
-					Collections.singletonList(resolveSemanticElement()
-							.eResource()));
 			return new XtextDirectEditManager(this, injector,
-					getEditorStyles(), fakeContext);
+					getEditorStyles(), this);
 		} else {
 			return new TextDirectEditManager(this);
 		}
@@ -97,6 +94,10 @@ public abstract class PlugableExternalXtextLabelEditPart extends
 		return (SpecificationElement) super.resolveSemanticElement();
 	}
 
+	public EObject getContextObject() {
+		return super.resolveSemanticElement();
+	}
+
 	@Override
 	protected void handleNotificationEvent(Notification notification) {
 		if (notification.getFeature() == getFeature()) {

+ 8 - 8
plugins/org.yakindu.sct.ui.editor/src/org/yakindu/sct/ui/editor/editparts/PlugableXtextLabelEditPart.java

@@ -10,10 +10,9 @@
  */
 package org.yakindu.sct.ui.editor.editparts;
 
-import java.util.Collections;
-
 import org.eclipse.emf.common.notify.Notification;
 import org.eclipse.emf.ecore.EAttribute;
+import org.eclipse.emf.ecore.EObject;
 import org.eclipse.gef.EditPolicy;
 import org.eclipse.gef.editpolicies.DirectEditPolicy;
 import org.eclipse.gef.tools.DirectEditManager;
@@ -38,7 +37,7 @@ import com.google.inject.Injector;
 import de.itemis.gmf.runtime.commons.parsers.AttributeParser;
 import de.itemis.xtext.utils.gmf.directedit.XtextDirectEditManager;
 import de.itemis.xtext.utils.gmf.directedit.XtextLabelEditPart;
-import de.itemis.xtext.utils.jface.viewers.context.CloningBasedFakeContextResourcesProvider;
+import de.itemis.xtext.utils.jface.viewers.ContextElementAdapter.IContextElementProvider;
 
 /**
  * 
@@ -46,7 +45,7 @@ import de.itemis.xtext.utils.jface.viewers.context.CloningBasedFakeContextResour
  * 
  */
 public abstract class PlugableXtextLabelEditPart extends XtextLabelEditPart
-		implements ITextAwareEditPart {
+		implements ITextAwareEditPart, IContextElementProvider {
 
 	private Injector injector;
 
@@ -82,11 +81,8 @@ public abstract class PlugableXtextLabelEditPart extends XtextLabelEditPart
 	@Override
 	protected DirectEditManager createDirectEditManager() {
 		if (injector != null) {
-			CloningBasedFakeContextResourcesProvider fakeContext = new CloningBasedFakeContextResourcesProvider(
-					Collections.singletonList(resolveSemanticElement()
-							.eResource()));
 			return new XtextDirectEditManager(this, injector,
-					getEditorStyles(), fakeContext);
+					getEditorStyles(), this);
 		} else {
 			return new TextDirectEditManager(this);
 		}
@@ -97,6 +93,10 @@ public abstract class PlugableXtextLabelEditPart extends XtextLabelEditPart
 		return (SpecificationElement) super.resolveSemanticElement();
 	}
 
+	public EObject getContextObject() {
+		return resolveSemanticElement();
+	}
+
 	@Override
 	protected void handleNotificationEvent(Notification notification) {
 		if (notification.getFeature() == getFeature()) {

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

@@ -12,13 +12,16 @@ package org.yakindu.sct.ui.editor.propertysheets;
 
 import org.eclipse.emf.common.util.EList;
 import org.eclipse.emf.databinding.EMFDataBindingContext;
+import org.eclipse.emf.ecore.EObject;
 import org.eclipse.emf.ecore.resource.Resource;
 import org.eclipse.emf.edit.domain.EditingDomain;
 import org.eclipse.emf.edit.domain.IEditingDomainProvider;
 import org.eclipse.gmf.runtime.diagram.ui.properties.sections.AbstractModelerPropertySection;
 import org.eclipse.jface.layout.GridDataFactory;
+import org.eclipse.swt.custom.StyledText;
 import org.eclipse.swt.layout.GridLayout;
 import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
 import org.eclipse.swt.widgets.Layout;
 import org.eclipse.ui.IEditorPart;
 import org.eclipse.ui.forms.widgets.Form;
@@ -30,6 +33,9 @@ import org.yakindu.sct.ui.editor.extensions.IExpressionLanguageProvider;
 
 import com.google.inject.Injector;
 
+import de.itemis.xtext.utils.jface.viewers.ContextElementAdapter;
+import de.itemis.xtext.utils.jface.viewers.ContextElementAdapter.IContextElementProvider;
+import de.itemis.xtext.utils.jface.viewers.StyledTextXtextAdapter;
 import de.itemis.xtext.utils.jface.viewers.util.ActiveEditorTracker;
 
 /**
@@ -38,7 +44,7 @@ import de.itemis.xtext.utils.jface.viewers.util.ActiveEditorTracker;
  * 
  */
 public abstract class AbstractEditorPropertySection extends
-		AbstractModelerPropertySection {
+		AbstractModelerPropertySection implements IContextElementProvider {
 
 	public abstract void createControls(Composite parent);
 
@@ -116,6 +122,14 @@ public abstract class AbstractEditorPropertySection extends
 		return resources.get(0); // always take the first resource ...
 	}
 
+	protected void enableXtext(Control styledText, Injector injector) {
+		StyledTextXtextAdapter xtextAdapter = new StyledTextXtextAdapter(
+				injector);
+		xtextAdapter.getFakeResourceContext().getFakeResource().eAdapters()
+				.add(new ContextElementAdapter(this));
+		xtextAdapter.adapt((StyledText) styledText);
+	}
+
 	protected Injector getInjector(SemanticTarget semanticTarget) {
 		IExpressionLanguageProvider registeredProvider = ExpressionLanguageProviderExtensions
 				.getRegisteredProvider(semanticTarget,
@@ -123,6 +137,10 @@ public abstract class AbstractEditorPropertySection extends
 		return registeredProvider.getInjector();
 	}
 
+	public EObject getContextObject() {
+		return getEObject();
+	}
+	// FIXME
 	// public void createHelpColumn(final Composite parent, final Control
 	// control) {
 	// final ImageHyperlink helpWidget = toolkit.createImageHyperlink(parent,

+ 0 - 1
plugins/org.yakindu.sct.ui.editor/src/org/yakindu/sct/ui/editor/propertysheets/ExitPropertySection.java

@@ -22,7 +22,6 @@ import org.eclipse.swt.SWT;
 import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Text;
 import org.yakindu.base.base.BasePackage;
-import org.yakindu.sct.model.sgraph.SGraphPackage;
 
 /**
  * 

+ 0 - 1
plugins/org.yakindu.sct.ui.editor/src/org/yakindu/sct/ui/editor/propertysheets/RegionPropertySection.java

@@ -22,7 +22,6 @@ import org.eclipse.swt.SWT;
 import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Control;
 import org.yakindu.base.base.BasePackage;
-import org.yakindu.sct.model.sgraph.SGraphPackage;
 
 /**
  * 

+ 5 - 12
plugins/org.yakindu.sct.ui.editor/src/org/yakindu/sct/ui/editor/propertysheets/StatePropertySection.java

@@ -10,8 +10,6 @@
  */
 package org.yakindu.sct.ui.editor.propertysheets;
 
-import java.util.Collections;
-
 import org.eclipse.core.commands.ExecutionException;
 import org.eclipse.core.commands.operations.OperationHistoryFactory;
 import org.eclipse.core.runtime.NullProgressMonitor;
@@ -47,9 +45,6 @@ import org.yakindu.sct.ui.editor.propertysheets.OrderElementControl.ISourceObjec
 
 import com.google.inject.Injector;
 
-import de.itemis.xtext.utils.jface.viewers.StyledTextXtextAdapter;
-import de.itemis.xtext.utils.jface.viewers.context.CloningBasedFakeContextResourcesProvider;
-
 /**
  * 
  * @author andreas muelder - Initial contribution and API
@@ -89,15 +84,12 @@ public class StatePropertySection extends
 		if (injector != null) {
 			txtSpecification = new StyledText(parent, SWT.MULTI | SWT.BORDER
 					| SWT.V_SCROLL);
-			StyledTextXtextAdapter xtextAdapter = new StyledTextXtextAdapter(
-					injector, new CloningBasedFakeContextResourcesProvider(
-							Collections
-									.singletonList(getActiveEditorResource())));
-			xtextAdapter.adapt((StyledText) txtSpecification);
+			enableXtext(txtSpecification, injector);
 		} else {
 			txtSpecification = getToolkit().createText(parent, "", SWT.MULTI);
 		}
-		GridDataFactory.fillDefaults().grab(true, true).applyTo(txtSpecification);
+		GridDataFactory.fillDefaults().grab(true, true)
+				.applyTo(txtSpecification);
 	}
 
 	private void createSubmachineControl(final Composite parent) {
@@ -155,7 +147,8 @@ public class StatePropertySection extends
 				TransactionUtil.getEditingDomain(eObject),
 				BasePackage.Literals.NAMED_ELEMENT__NAME);
 		ISWTObservableValue nameTextProperty = WidgetProperties.text(
-				new int[]{SWT.FocusOut, SWT.DefaultSelection}).observe(txtName);
+				new int[] { SWT.FocusOut, SWT.DefaultSelection }).observe(
+				txtName);
 		context.bindValue(nameTextProperty, nameProperty.observe(eObject));
 	}
 

+ 4 - 12
plugins/org.yakindu.sct.ui.editor/src/org/yakindu/sct/ui/editor/propertysheets/StatechartPropertySection.java

@@ -10,8 +10,6 @@
  */
 package org.yakindu.sct.ui.editor.propertysheets;
 
-import java.util.Collections;
-
 import org.eclipse.emf.databinding.EMFDataBindingContext;
 import org.eclipse.emf.databinding.IEMFValueProperty;
 import org.eclipse.emf.databinding.edit.EMFEditProperties;
@@ -33,9 +31,6 @@ import org.yakindu.sct.ui.editor.propertysheets.OrderElementControl.ISourceObjec
 
 import com.google.inject.Injector;
 
-import de.itemis.xtext.utils.jface.viewers.StyledTextXtextAdapter;
-import de.itemis.xtext.utils.jface.viewers.context.CloningBasedFakeContextResourcesProvider;
-
 /**
  * 
  * @author andreas muelder - Initial contribution and API
@@ -81,11 +76,7 @@ public class StatechartPropertySection extends
 		if (injector != null) {
 			textControl = new StyledText(parent, SWT.MULTI | SWT.BORDER
 					| SWT.V_SCROLL);
-			StyledTextXtextAdapter xtextAdapter = new StyledTextXtextAdapter(
-					injector, new CloningBasedFakeContextResourcesProvider(
-							Collections
-									.singletonList(getActiveEditorResource())));
-			xtextAdapter.adapt((StyledText) textControl);
+			enableXtext(textControl, injector);
 		} else {
 			textControl = getToolkit().createText(parent, "", SWT.MULTI);
 		}
@@ -112,8 +103,9 @@ public class StatechartPropertySection extends
 		IEMFValueProperty property = EMFEditProperties.value(
 				TransactionUtil.getEditingDomain(eObject),
 				BasePackage.Literals.NAMED_ELEMENT__NAME);
-		ISWTObservableValue observe = WidgetProperties.text(new int[]{SWT.FocusOut, SWT.DefaultSelection})
-				.observe(txtName);
+		ISWTObservableValue observe = WidgetProperties.text(
+				new int[] { SWT.FocusOut, SWT.DefaultSelection }).observe(
+				txtName);
 		context.bindValue(observe, property.observe(eObject));
 	}
 

+ 2 - 10
plugins/org.yakindu.sct.ui.editor/src/org/yakindu/sct/ui/editor/propertysheets/TransitionPropertySection.java

@@ -10,8 +10,6 @@
  */
 package org.yakindu.sct.ui.editor.propertysheets;
 
-import java.util.Collections;
-
 import org.eclipse.emf.databinding.EMFDataBindingContext;
 import org.eclipse.emf.databinding.IEMFValueProperty;
 import org.eclipse.emf.databinding.edit.EMFEditProperties;
@@ -28,9 +26,6 @@ import org.yakindu.sct.ui.editor.extensions.ExpressionLanguageProviderExtensions
 
 import com.google.inject.Injector;
 
-import de.itemis.xtext.utils.jface.viewers.StyledTextXtextAdapter;
-import de.itemis.xtext.utils.jface.viewers.context.CloningBasedFakeContextResourcesProvider;
-
 /**
  * 
  * @author andreas muelder - Initial contribution and API
@@ -46,11 +41,7 @@ public class TransitionPropertySection extends AbstractEditorPropertySection {
 		if (injector != null) {
 			textControl = new StyledText(parent, SWT.MULTI | SWT.BORDER
 					| SWT.V_SCROLL);
-			StyledTextXtextAdapter xtextAdapter = new StyledTextXtextAdapter(
-					injector, new CloningBasedFakeContextResourcesProvider(
-							Collections
-									.singletonList(getActiveEditorResource())));
-			xtextAdapter.adapt((StyledText) textControl);
+			enableXtext(textControl, injector);
 		} else {
 			textControl = getToolkit().createText(parent, "", SWT.MULTI);
 		}
@@ -58,6 +49,7 @@ public class TransitionPropertySection extends AbstractEditorPropertySection {
 
 	}
 
+
 	@Override
 	public void bindModel(EMFDataBindingContext context) {
 		IEMFValueProperty modelProperty = EMFEditProperties.value(