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;
@NotNull
protected final PsiDeclarationProvider resolverScopeData;
protected final PsiDeclarationProvider declarationProvider;
@NotNull
private final Map<Name, Set<FunctionDescriptor>> functionDescriptors = Maps.newHashMap();
@@ -54,15 +54,15 @@ public abstract class JavaBaseScope extends JetScopeImpl {
@Nullable
private Collection<DeclarationDescriptor> allDescriptors = null;
@NotNull
private final ClassOrNamespaceDescriptor descriptor;
protected final ClassOrNamespaceDescriptor descriptor;
protected JavaBaseScope(
@NotNull ClassOrNamespaceDescriptor descriptor,
@NotNull JavaSemanticServices semanticServices,
@NotNull PsiDeclarationProvider resolverScopeData
@NotNull PsiDeclarationProvider declarationProvider
) {
this.semanticServices = semanticServices;
this.resolverScopeData = resolverScopeData;
this.declarationProvider = declarationProvider;
this.descriptor = descriptor;
}
@@ -89,7 +89,7 @@ public abstract class JavaBaseScope extends JetScopeImpl {
@NotNull
private Set<VariableDescriptor> computePropertyDescriptors(@NotNull Name name) {
return semanticServices.getDescriptorResolver().resolveFieldGroupByName(name, resolverScopeData, descriptor);
return semanticServices.getDescriptorResolver().resolveFieldGroupByName(name, declarationProvider, descriptor);
}
@NotNull
@@ -108,13 +108,7 @@ public abstract class JavaBaseScope extends JetScopeImpl {
}
@NotNull
private Set<FunctionDescriptor> computeFunctionDescriptor(@NotNull Name name) {
if (!(resolverScopeData instanceof ClassPsiDeclarationProvider)) {
return Collections.emptySet();
}
return semanticServices.getDescriptorResolver()
.resolveFunctionGroup(name, (ClassPsiDeclarationProvider) resolverScopeData, descriptor);
}
protected abstract Set<FunctionDescriptor> computeFunctionDescriptor(@NotNull Name name);
@NotNull
@Override
@@ -135,13 +129,13 @@ public abstract class JavaBaseScope extends JetScopeImpl {
@NotNull
private Collection<DeclarationDescriptor> computeAllDescriptors() {
Collection<DeclarationDescriptor> result = Sets.newHashSet();
if (resolverScopeData instanceof ClassPsiDeclarationProvider) {
PsiClass psiClass = ((ClassPsiDeclarationProvider) resolverScopeData).getPsiClass();
if (declarationProvider instanceof ClassPsiDeclarationProvider) {
PsiClass psiClass = ((ClassPsiDeclarationProvider) declarationProvider).getPsiClass();
computeFieldAndFunctionDescriptors(result);
computeInnerClasses(psiClass, result);
}
if (resolverScopeData instanceof PackagePsiDeclarationProvider) {
PsiPackage psiPackage = ((PackagePsiDeclarationProvider) resolverScopeData).getPsiPackage();
if (declarationProvider instanceof PackagePsiDeclarationProvider) {
PsiPackage psiPackage = ((PackagePsiDeclarationProvider) declarationProvider).getPsiPackage();
assert descriptor instanceof NamespaceDescriptor;
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) {
for (NamedMembers members : resolverScopeData.getMembersCache().allMembers()) {
for (NamedMembers members : declarationProvider.getMembersCache().allMembers()) {
Name name = members.getName();
ProgressIndicatorProvider.checkCanceled();
result.addAll(getFunctions(name));
@@ -168,7 +162,7 @@ public abstract class JavaBaseScope extends JetScopeImpl {
}
else {
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.PsiModifier;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.jet.lang.descriptors.ClassDescriptor;
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.descriptors.*;
import org.jetbrains.jet.lang.resolve.java.DescriptorSearchRule;
import org.jetbrains.jet.lang.resolve.java.JavaSemanticServices;
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.Map;
import java.util.Set;
/**
* Class static of instance members.
@@ -84,4 +82,11 @@ public abstract class JavaClassMembersScope extends JavaBaseScope {
}
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;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.jet.lang.descriptors.FunctionDescriptor;
import org.jetbrains.jet.lang.descriptors.NamespaceDescriptor;
import org.jetbrains.jet.lang.resolve.java.JavaSemanticServices;
import org.jetbrains.jet.lang.resolve.java.provider.ClassPsiDeclarationProvider;
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 {
@NotNull
private final ClassPsiDeclarationProvider declarationProvider;
public JavaClassStaticMembersScope(
@NotNull NamespaceDescriptor descriptor,
@NotNull ClassPsiDeclarationProvider declarationProvider,
@@ -30,5 +37,13 @@ public final class JavaClassStaticMembersScope extends JavaPackageScope {
@NotNull JavaSemanticServices 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;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.jet.lang.descriptors.FunctionDescriptor;
import org.jetbrains.jet.lang.descriptors.NamespaceDescriptor;
import org.jetbrains.jet.lang.resolve.java.JavaSemanticServices;
import org.jetbrains.jet.lang.resolve.java.provider.PsiDeclarationProvider;
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 JavaPackageScopeWithoutMembers(
@@ -31,4 +36,10 @@ public final class JavaPackageScopeWithoutMembers extends JavaPackageScope {
) {
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;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.jet.lang.descriptors.FunctionDescriptor;
import org.jetbrains.jet.lang.descriptors.NamespaceDescriptor;
import org.jetbrains.jet.lang.resolve.java.JavaSemanticServices;
import org.jetbrains.jet.lang.resolve.java.provider.KotlinNamespacePsiDeclarationProvider;
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 {
@NotNull
private final KotlinNamespacePsiDeclarationProvider declarationProvider;
public JavaScopeForKotlinNamespace(
@NotNull NamespaceDescriptor descriptor,
@NotNull KotlinNamespacePsiDeclarationProvider declarationProvider,
@@ -30,5 +37,13 @@ public final class JavaScopeForKotlinNamespace extends JavaPackageScope {
@NotNull JavaSemanticServices 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);
}
}