package org.xpect.ui.scoping;
import org.eclipse.xtext.common.types.access.IJvmTypeProvider;
import org.eclipse.xtext.common.types.access.impl.ClasspathTypeProvider;
import org.eclipse.xtext.common.types.access.jdt.IJdtTypeProvider;
import org.eclipse.xtext.common.types.xtext.AbstractConstructorScope;
import org.eclipse.xtext.common.types.xtext.AbstractTypeScope;
import org.eclipse.xtext.common.types.xtext.AbstractTypeScopeProvider;
import org.eclipse.xtext.common.types.xtext.ClasspathBasedConstructorScope;
import org.eclipse.xtext.common.types.xtext.ClasspathBasedTypeScope;
import org.eclipse.xtext.common.types.xtext.ui.JdtBasedConstructorScope;
import org.eclipse.xtext.common.types.xtext.ui.JdtBasedSimpleTypeScope;
import org.eclipse.xtext.naming.IQualifiedNameConverter;
import org.eclipse.xtext.resource.IEObjectDescription;
import com.google.common.base.Predicate;
import com.google.inject.Inject;
@SuppressWarnings("restriction")
public class ClasspathOrJdtBasedTypeScopeProvider extends AbstractTypeScopeProvider {
@Inject
private ClasspathOrJdtBasedTypeScopeProviderFactory typeProviderFactory;
@Inject
private IQualifiedNameConverter qualifiedNameConverter;
@Override
public AbstractTypeScope createTypeScope(IJvmTypeProvider typeProvider, Predicate<IEObjectDescription> filter) {
if (typeProvider instanceof ClasspathTypeProvider)
return new ClasspathBasedTypeScope((ClasspathTypeProvider) typeProvider, qualifiedNameConverter, filter);
if (typeProvider instanceof IJdtTypeProvider)
return new JdtBasedSimpleTypeScope((IJdtTypeProvider) typeProvider, qualifiedNameConverter, filter);
throw new IllegalStateException();
}
@Override
public AbstractConstructorScope createConstructorScope(IJvmTypeProvider typeProvider, Predicate<IEObjectDescription> filter) {
AbstractTypeScope typeScope = createTypeScope(typeProvider, filter);
if (typeScope instanceof ClasspathBasedTypeScope)
return new ClasspathBasedConstructorScope((ClasspathBasedTypeScope) typeScope);
if (typeScope instanceof JdtBasedSimpleTypeScope)
return new JdtBasedConstructorScope((JdtBasedSimpleTypeScope) typeScope);
throw new IllegalStateException();
}
@Override
public IJvmTypeProvider.Factory getTypeProviderFactory() {
return typeProviderFactory;
}
}