|
|
@@ -18,6 +18,8 @@ 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 com.google.common.base.Predicate;
|
|
|
@@ -35,19 +37,28 @@ public class STextGlobalScopeProvider extends ResourceSetGlobalScopeProvider {
|
|
|
|
|
|
@Inject
|
|
|
private DefaultGlobalScopeProvider delegate;
|
|
|
-
|
|
|
+
|
|
|
+ @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>() {
|
|
|
-
|
|
|
+
|
|
|
public boolean apply(IEObjectDescription input) {
|
|
|
return input.getEClass() == SGraphPackage.Literals.STATECHART;
|
|
|
}
|
|
|
});
|
|
|
- return new SimpleScope(Iterables.concat(scope.getAllElements(),
|
|
|
- filteringScope.getAllElements()));
|
|
|
+ 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 typeScopeHelper.createExtensionScope(parentScope);
|
|
|
+ }
|
|
|
+ return parentScope;
|
|
|
}
|
|
|
}
|