Make JavaBaseScope#computeFunctionDescriptor() abstract and provide implementation in subclasses

This commit is contained in:
Pavel V. Talanov
2012-11-08 19:28:04 +04:00
parent 908b58878b
commit aad4e306b2
5 changed files with 62 additions and 22 deletions
@@ -44,7 +44,7 @@ public abstract class JavaBaseScope extends JetScopeImpl {
protected final JavaSemanticServices semanticServices; protected final JavaSemanticServices semanticServices;
@NotNull @NotNull
protected final PsiDeclarationProvider resolverScopeData; protected final PsiDeclarationProvider declarationProvider;
@NotNull @NotNull
private final Map<Name, Set<FunctionDescriptor>> functionDescriptors = Maps.newHashMap(); private final Map<Name, Set<FunctionDescriptor>> functionDescriptors = Maps.newHashMap();
@@ -54,15 +54,15 @@ public abstract class JavaBaseScope extends JetScopeImpl {
@Nullable @Nullable
private Collection<DeclarationDescriptor> allDescriptors = null; private Collection<DeclarationDescriptor> allDescriptors = null;
@NotNull @NotNull
private final ClassOrNamespaceDescriptor descriptor; protected final ClassOrNamespaceDescriptor descriptor;
protected JavaBaseScope( protected JavaBaseScope(
@NotNull ClassOrNamespaceDescriptor descriptor, @NotNull ClassOrNamespaceDescriptor descriptor,
@NotNull JavaSemanticServices semanticServices, @NotNull JavaSemanticServices semanticServices,
@NotNull PsiDeclarationProvider resolverScopeData @NotNull PsiDeclarationProvider declarationProvider
) { ) {
this.semanticServices = semanticServices; this.semanticServices = semanticServices;
this.resolverScopeData = resolverScopeData; this.declarationProvider = declarationProvider;
this.descriptor = descriptor; this.descriptor = descriptor;
} }
@@ -89,7 +89,7 @@ public abstract class JavaBaseScope extends JetScopeImpl {
@NotNull @NotNull
private Set<VariableDescriptor> computePropertyDescriptors(@NotNull Name name) { private Set<VariableDescriptor> computePropertyDescriptors(@NotNull Name name) {
return semanticServices.getDescriptorResolver().resolveFieldGroupByName(name, resolverScopeData, descriptor); return semanticServices.getDescriptorResolver().resolveFieldGroupByName(name, declarationProvider, descriptor);
} }
@NotNull @NotNull
@@ -108,13 +108,7 @@ public abstract class JavaBaseScope extends JetScopeImpl {
} }
@NotNull @NotNull
private Set<FunctionDescriptor> computeFunctionDescriptor(@NotNull Name name) { protected abstract Set<FunctionDescriptor> computeFunctionDescriptor(@NotNull Name name);
if (!(resolverScopeData instanceof ClassPsiDeclarationProvider)) {
return Collections.emptySet();
}
return semanticServices.getDescriptorResolver()
.resolveFunctionGroup(name, (ClassPsiDeclarationProvider) resolverScopeData, descriptor);
}
@NotNull @NotNull
@Override @Override
@@ -135,13 +129,13 @@ public abstract class JavaBaseScope extends JetScopeImpl {
@NotNull @NotNull
private Collection<DeclarationDescriptor> computeAllDescriptors() { private Collection<DeclarationDescriptor> computeAllDescriptors() {
Collection<DeclarationDescriptor> result = Sets.newHashSet(); Collection<DeclarationDescriptor> result = Sets.newHashSet();
if (resolverScopeData instanceof ClassPsiDeclarationProvider) { if (declarationProvider instanceof ClassPsiDeclarationProvider) {
PsiClass psiClass = ((ClassPsiDeclarationProvider) resolverScopeData).getPsiClass(); PsiClass psiClass = ((ClassPsiDeclarationProvider) declarationProvider).getPsiClass();
computeFieldAndFunctionDescriptors(result); computeFieldAndFunctionDescriptors(result);
computeInnerClasses(psiClass, result); computeInnerClasses(psiClass, result);
} }
if (resolverScopeData instanceof PackagePsiDeclarationProvider) { if (declarationProvider instanceof PackagePsiDeclarationProvider) {
PsiPackage psiPackage = ((PackagePsiDeclarationProvider) resolverScopeData).getPsiPackage(); PsiPackage psiPackage = ((PackagePsiDeclarationProvider) declarationProvider).getPsiPackage();
assert descriptor instanceof NamespaceDescriptor; assert descriptor instanceof NamespaceDescriptor;
result.addAll(computeAllPackageDeclarations(psiPackage, semanticServices, DescriptorUtils.getFQName(descriptor).toSafe())); result.addAll(computeAllPackageDeclarations(psiPackage, semanticServices, DescriptorUtils.getFQName(descriptor).toSafe()));
} }
@@ -149,7 +143,7 @@ public abstract class JavaBaseScope extends JetScopeImpl {
} }
private void computeFieldAndFunctionDescriptors(Collection<DeclarationDescriptor> result) { private void computeFieldAndFunctionDescriptors(Collection<DeclarationDescriptor> result) {
for (NamedMembers members : resolverScopeData.getMembersCache().allMembers()) { for (NamedMembers members : declarationProvider.getMembersCache().allMembers()) {
Name name = members.getName(); Name name = members.getName();
ProgressIndicatorProvider.checkCanceled(); ProgressIndicatorProvider.checkCanceled();
result.addAll(getFunctions(name)); result.addAll(getFunctions(name));
@@ -168,7 +162,7 @@ public abstract class JavaBaseScope extends JetScopeImpl {
} }
else { else {
result.addAll(semanticServices.getDescriptorResolver().resolveInnerClasses( result.addAll(semanticServices.getDescriptorResolver().resolveInnerClasses(
descriptor, psiClass, ((ClassPsiDeclarationProviderImpl) resolverScopeData).isStaticMembers())); descriptor, psiClass, ((ClassPsiDeclarationProviderImpl) declarationProvider).isStaticMembers()));
} }
} }
} }
@@ -20,10 +20,7 @@ import com.google.common.collect.Maps;
import com.intellij.psi.PsiClass; import com.intellij.psi.PsiClass;
import com.intellij.psi.PsiModifier; import com.intellij.psi.PsiModifier;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.jetbrains.jet.lang.descriptors.ClassDescriptor; import org.jetbrains.jet.lang.descriptors.*;
import org.jetbrains.jet.lang.descriptors.ClassOrNamespaceDescriptor;
import org.jetbrains.jet.lang.descriptors.ClassifierDescriptor;
import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor;
import org.jetbrains.jet.lang.resolve.java.DescriptorSearchRule; import org.jetbrains.jet.lang.resolve.java.DescriptorSearchRule;
import org.jetbrains.jet.lang.resolve.java.JavaSemanticServices; import org.jetbrains.jet.lang.resolve.java.JavaSemanticServices;
import org.jetbrains.jet.lang.resolve.java.provider.ClassPsiDeclarationProvider; import org.jetbrains.jet.lang.resolve.java.provider.ClassPsiDeclarationProvider;
@@ -33,6 +30,7 @@ import org.jetbrains.jet.lang.resolve.name.Name;
import java.util.Collection; import java.util.Collection;
import java.util.Map; import java.util.Map;
import java.util.Set;
/** /**
* Class static of instance members. * Class static of instance members.
@@ -84,4 +82,11 @@ public abstract class JavaClassMembersScope extends JavaBaseScope {
} }
return null; return null;
} }
@NotNull
@Override
protected Set<FunctionDescriptor> computeFunctionDescriptor(@NotNull Name name) {
return semanticServices.getDescriptorResolver()
.resolveFunctionGroup(name, classPsiDeclarationProvider, descriptor);
}
} }
@@ -17,12 +17,19 @@
package org.jetbrains.jet.lang.resolve.java.scope; package org.jetbrains.jet.lang.resolve.java.scope;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.jetbrains.jet.lang.descriptors.FunctionDescriptor;
import org.jetbrains.jet.lang.descriptors.NamespaceDescriptor; import org.jetbrains.jet.lang.descriptors.NamespaceDescriptor;
import org.jetbrains.jet.lang.resolve.java.JavaSemanticServices; import org.jetbrains.jet.lang.resolve.java.JavaSemanticServices;
import org.jetbrains.jet.lang.resolve.java.provider.ClassPsiDeclarationProvider; import org.jetbrains.jet.lang.resolve.java.provider.ClassPsiDeclarationProvider;
import org.jetbrains.jet.lang.resolve.name.FqName; import org.jetbrains.jet.lang.resolve.name.FqName;
import org.jetbrains.jet.lang.resolve.name.Name;
import java.util.Set;
public final class JavaClassStaticMembersScope extends JavaPackageScope { public final class JavaClassStaticMembersScope extends JavaPackageScope {
@NotNull
private final ClassPsiDeclarationProvider declarationProvider;
public JavaClassStaticMembersScope( public JavaClassStaticMembersScope(
@NotNull NamespaceDescriptor descriptor, @NotNull NamespaceDescriptor descriptor,
@NotNull ClassPsiDeclarationProvider declarationProvider, @NotNull ClassPsiDeclarationProvider declarationProvider,
@@ -30,5 +37,13 @@ public final class JavaClassStaticMembersScope extends JavaPackageScope {
@NotNull JavaSemanticServices semanticServices @NotNull JavaSemanticServices semanticServices
) { ) {
super(descriptor, declarationProvider, packageFQN, semanticServices); super(descriptor, declarationProvider, packageFQN, semanticServices);
this.declarationProvider = declarationProvider;
}
@NotNull
@Override
protected Set<FunctionDescriptor> computeFunctionDescriptor(@NotNull Name name) {
return semanticServices.getDescriptorResolver()
.resolveFunctionGroup(name, declarationProvider, descriptor);
} }
} }
@@ -17,10 +17,15 @@
package org.jetbrains.jet.lang.resolve.java.scope; package org.jetbrains.jet.lang.resolve.java.scope;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.jetbrains.jet.lang.descriptors.FunctionDescriptor;
import org.jetbrains.jet.lang.descriptors.NamespaceDescriptor; import org.jetbrains.jet.lang.descriptors.NamespaceDescriptor;
import org.jetbrains.jet.lang.resolve.java.JavaSemanticServices; import org.jetbrains.jet.lang.resolve.java.JavaSemanticServices;
import org.jetbrains.jet.lang.resolve.java.provider.PsiDeclarationProvider; import org.jetbrains.jet.lang.resolve.java.provider.PsiDeclarationProvider;
import org.jetbrains.jet.lang.resolve.name.FqName; import org.jetbrains.jet.lang.resolve.name.FqName;
import org.jetbrains.jet.lang.resolve.name.Name;
import java.util.Collections;
import java.util.Set;
public final class JavaPackageScopeWithoutMembers extends JavaPackageScope { public final class JavaPackageScopeWithoutMembers extends JavaPackageScope {
public JavaPackageScopeWithoutMembers( public JavaPackageScopeWithoutMembers(
@@ -31,4 +36,10 @@ public final class JavaPackageScopeWithoutMembers extends JavaPackageScope {
) { ) {
super(descriptor, declarationProvider, packageFQN, semanticServices); super(descriptor, declarationProvider, packageFQN, semanticServices);
} }
@Override
@NotNull
protected Set<FunctionDescriptor> computeFunctionDescriptor(@NotNull Name name) {
return Collections.emptySet();
}
} }
@@ -17,12 +17,19 @@
package org.jetbrains.jet.lang.resolve.java.scope; package org.jetbrains.jet.lang.resolve.java.scope;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.jetbrains.jet.lang.descriptors.FunctionDescriptor;
import org.jetbrains.jet.lang.descriptors.NamespaceDescriptor; import org.jetbrains.jet.lang.descriptors.NamespaceDescriptor;
import org.jetbrains.jet.lang.resolve.java.JavaSemanticServices; import org.jetbrains.jet.lang.resolve.java.JavaSemanticServices;
import org.jetbrains.jet.lang.resolve.java.provider.KotlinNamespacePsiDeclarationProvider; import org.jetbrains.jet.lang.resolve.java.provider.KotlinNamespacePsiDeclarationProvider;
import org.jetbrains.jet.lang.resolve.name.FqName; import org.jetbrains.jet.lang.resolve.name.FqName;
import org.jetbrains.jet.lang.resolve.name.Name;
import java.util.Set;
public final class JavaScopeForKotlinNamespace extends JavaPackageScope { public final class JavaScopeForKotlinNamespace extends JavaPackageScope {
@NotNull
private final KotlinNamespacePsiDeclarationProvider declarationProvider;
public JavaScopeForKotlinNamespace( public JavaScopeForKotlinNamespace(
@NotNull NamespaceDescriptor descriptor, @NotNull NamespaceDescriptor descriptor,
@NotNull KotlinNamespacePsiDeclarationProvider declarationProvider, @NotNull KotlinNamespacePsiDeclarationProvider declarationProvider,
@@ -30,5 +37,13 @@ public final class JavaScopeForKotlinNamespace extends JavaPackageScope {
@NotNull JavaSemanticServices semanticServices @NotNull JavaSemanticServices semanticServices
) { ) {
super(descriptor, declarationProvider, packageFQN, semanticServices); super(descriptor, declarationProvider, packageFQN, semanticServices);
this.declarationProvider = declarationProvider;
}
@NotNull
@Override
protected Set<FunctionDescriptor> computeFunctionDescriptor(@NotNull Name name) {
return semanticServices.getDescriptorResolver()
.resolveFunctionGroup(name, declarationProvider, descriptor);
} }
} }