package org.jnario.spec.scoping;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.EReference;
import org.eclipse.emf.ecore.resource.Resource;
import org.eclipse.xtext.common.types.access.IJvmTypeProvider;
import org.eclipse.xtext.common.types.xtext.AbstractTypeScope;
import org.eclipse.xtext.common.types.xtext.AbstractTypeScopeProvider;
import org.eclipse.xtext.scoping.IScope;
import org.eclipse.xtext.scoping.impl.SelectableBasedScope;
import org.jnario.scoping.JnarioImportedNamespaceScopeProvider;
import org.jnario.spec.spec.ExampleGroup;
import org.jnario.spec.spec.SpecPackage;
import com.google.inject.Inject;
public class SpecImportedNamespaceScopeProvider extends
JnarioImportedNamespaceScopeProvider {
@Inject
private AbstractTypeScopeProvider typeScopeProvider;
@Override
public IScope getScope(final EObject context, final EReference reference) {
if (reference == SpecPackage.Literals.EXAMPLE_GROUP__TARGET_TYPE) {
Resource resource = context.eResource();
IJvmTypeProvider typeProvider = typeScopeProvider.getTypeProvider(resource.getResourceSet());
AbstractTypeScope typeScope = typeScopeProvider.createTypeScope(typeProvider, null);
return SelectableBasedScope.createScope(typeScope, getAllDescriptions(resource), reference.getEReferenceType(), false);
}else{
return super.getScope(context, reference);
}
}
}