Revert "smarter JavaClassOrPackageScope#getAllDescriptors"

This reverts commit 010db0495b.
This commit is contained in:
Stepan Koltsov
2012-06-18 20:49:55 +04:00
parent 7deeb354a2
commit fbab0b742c
3 changed files with 12 additions and 41 deletions
@@ -30,6 +30,7 @@ import org.jetbrains.jet.lang.resolve.scopes.DescriptorPredicateUtils;
import org.jetbrains.jet.lang.resolve.scopes.JetScopeImpl; import org.jetbrains.jet.lang.resolve.scopes.JetScopeImpl;
import java.util.Collection; import java.util.Collection;
import java.util.Set;
/** /**
* @author Stepan Koltsov * @author Stepan Koltsov
@@ -73,28 +74,13 @@ public abstract class JavaClassOrPackageScope extends JetScopeImpl {
@Override @Override
public Collection<DeclarationDescriptor> getAllDescriptors(@NotNull DescriptorPredicate predicate) { public Collection<DeclarationDescriptor> getAllDescriptors(@NotNull DescriptorPredicate predicate) {
if (allDescriptors == null) { if (allDescriptors == null) {
if (!predicate.includeAll()) { allDescriptors = Sets.newHashSet();
return computeAllDescriptors(predicate);
}
allDescriptors = computeAllDescriptors(DescriptorPredicate.all()); if (resolverScopeData.psiClass != null) {
} allDescriptors.addAll(semanticServices.getDescriptorResolver().resolveMethods(resolverScopeData, NamePredicate.all()));
return DescriptorPredicateUtils.filter(allDescriptors, predicate); allDescriptors.addAll(semanticServices.getDescriptorResolver().resolveFieldGroup(resolverScopeData, NamePredicate.all()));
}
private Collection<DeclarationDescriptor> computeAllDescriptors(@NotNull DescriptorPredicate predicate) {
Collection<DeclarationDescriptor> allDescriptors = Sets.newHashSet();
if (resolverScopeData.psiClass != null) {
if (predicate.includeKind(DescriptorPredicate.DescriptorKind.CALLABLE_MEMBER)) {
// TODO: filter by extension here
allDescriptors.addAll(semanticServices.getDescriptorResolver().resolveMethods(resolverScopeData, predicate.asNamePredicate()));
allDescriptors.addAll(semanticServices.getDescriptorResolver().resolveFieldGroup(resolverScopeData, predicate.asNamePredicate()));
}
if (predicate.includeKind(DescriptorPredicate.DescriptorKind.CLASS)) {
// TODO: Trying to hack the situation when we produce namespace descriptor for java class and still want to see inner classes // TODO: Trying to hack the situation when we produce namespace descriptor for java class and still want to see inner classes
if (getContainingDeclaration() instanceof JavaNamespaceDescriptor) { if (getContainingDeclaration() instanceof JavaNamespaceDescriptor) {
allDescriptors.addAll(semanticServices.getDescriptorResolver().resolveInnerClasses( allDescriptors.addAll(semanticServices.getDescriptorResolver().resolveInnerClasses(
@@ -106,13 +92,11 @@ public abstract class JavaClassOrPackageScope extends JetScopeImpl {
resolverScopeData.staticMembers)); resolverScopeData.staticMembers));
} }
} }
}
if (resolverScopeData.psiPackage != null) { if (resolverScopeData.psiPackage != null) {
boolean isKotlinNamespace = semanticServices.getKotlinNamespaceDescriptor(resolverScopeData.fqName) != null; boolean isKotlinNamespace = semanticServices.getKotlinNamespaceDescriptor(resolverScopeData.fqName) != null;
final JavaDescriptorResolver descriptorResolver = semanticServices.getDescriptorResolver(); final JavaDescriptorResolver descriptorResolver = semanticServices.getDescriptorResolver();
if (predicate.includeKind(DescriptorPredicate.DescriptorKind.NAMESPACE)) {
for (PsiPackage psiSubPackage : resolverScopeData.psiPackage.getSubPackages()) { for (PsiPackage psiSubPackage : resolverScopeData.psiPackage.getSubPackages()) {
NamespaceDescriptor childNs = descriptorResolver.resolveNamespace( NamespaceDescriptor childNs = descriptorResolver.resolveNamespace(
new FqName(psiSubPackage.getQualifiedName()), DescriptorSearchRule.IGNORE_IF_FOUND_IN_KOTLIN); new FqName(psiSubPackage.getQualifiedName()), DescriptorSearchRule.IGNORE_IF_FOUND_IN_KOTLIN);
@@ -120,9 +104,7 @@ public abstract class JavaClassOrPackageScope extends JetScopeImpl {
allDescriptors.add(childNs); allDescriptors.add(childNs);
} }
} }
}
if (predicate.includeKind(DescriptorPredicate.DescriptorKind.CLASS)) {
for (PsiClass psiClass : resolverScopeData.psiPackage.getClasses()) { for (PsiClass psiClass : resolverScopeData.psiPackage.getClasses()) {
if (isKotlinNamespace && JvmAbi.PACKAGE_CLASS.equals(psiClass.getName())) { if (isKotlinNamespace && JvmAbi.PACKAGE_CLASS.equals(psiClass.getName())) {
continue; continue;
@@ -148,7 +130,6 @@ public abstract class JavaClassOrPackageScope extends JetScopeImpl {
} }
} }
// filter again, because previously filter wasn't accurate
return DescriptorPredicateUtils.filter(allDescriptors, predicate); return DescriptorPredicateUtils.filter(allDescriptors, predicate);
} }
} }
@@ -1197,7 +1197,7 @@ public class JavaDescriptorResolver implements DependencyClassByQualifiedNameRes
} }
private void resolveNamedGroupFunctions(@NotNull ClassOrNamespaceDescriptor owner, PsiClass psiClass, private void resolveNamedGroupFunctions(@NotNull ClassOrNamespaceDescriptor owner, PsiClass psiClass,
TypeSubstitutor typeSubstitutorForGenericSuperclasses, NamedMembers namedMembers, @NotNull Name methodName, ResolverScopeData scopeData) { TypeSubstitutor typeSubstitutorForGenericSuperclasses, NamedMembers namedMembers, Name methodName, ResolverScopeData scopeData) {
if (namedMembers.functionDescriptors != null) { if (namedMembers.functionDescriptors != null) {
return; return;
} }
@@ -1237,7 +1237,7 @@ public class JavaDescriptorResolver implements DependencyClassByQualifiedNameRes
namedMembers.functionDescriptors = functions; namedMembers.functionDescriptors = functions;
} }
private Set<SimpleFunctionDescriptor> getFunctionsFromSupertypes(ResolverScopeData scopeData, @NotNull Name methodName) { private Set<SimpleFunctionDescriptor> getFunctionsFromSupertypes(ResolverScopeData scopeData, Name methodName) {
Set<SimpleFunctionDescriptor> r = new HashSet<SimpleFunctionDescriptor>(); Set<SimpleFunctionDescriptor> r = new HashSet<SimpleFunctionDescriptor>();
for (JetType supertype : getSupertypes(scopeData)) { for (JetType supertype : getSupertypes(scopeData)) {
for (FunctionDescriptor function : supertype.getMemberScope().getFunctions(methodName)) { for (FunctionDescriptor function : supertype.getMemberScope().getFunctions(methodName)) {
@@ -1478,7 +1478,7 @@ public class JavaDescriptorResolver implements DependencyClassByQualifiedNameRes
new AbstractMap.SimpleEntry<Name, NamedMembers>(exact, namedMembers)); new AbstractMap.SimpleEntry<Name, NamedMembers>(exact, namedMembers));
} }
else { else {
return Collections.emptyList(); return null;
} }
} }
else { else {
@@ -1487,7 +1487,7 @@ public class JavaDescriptorResolver implements DependencyClassByQualifiedNameRes
Name methodName = e.getKey(); Name methodName = e.getKey();
NamedMembers namedMembers = e.getValue(); NamedMembers namedMembers = e.getValue();
if (predicate.matches(methodName)) { if (predicate.matches(methodName)) {
r.add(new AbstractMap.SimpleEntry<Name, NamedMembers>(methodName, namedMembers)); r.add(new AbstractMap.SimpleEntry<Name, NamedMembers>(exact, namedMembers));
} }
} }
return r; return r;
@@ -24,7 +24,6 @@ import org.jetbrains.jet.lang.descriptors.ClassDescriptor;
import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor; import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor;
import org.jetbrains.jet.lang.descriptors.NamespaceDescriptor; import org.jetbrains.jet.lang.descriptors.NamespaceDescriptor;
import org.jetbrains.jet.lang.resolve.name.Name; import org.jetbrains.jet.lang.resolve.name.Name;
import org.jetbrains.jet.lang.resolve.name.NamePredicate;
/** /**
* @author Stepan Koltsov * @author Stepan Koltsov
@@ -214,13 +213,4 @@ public abstract class DescriptorPredicate {
}; };
} }
public NamePredicate asNamePredicate() {
return new NamePredicate() {
@Override
public boolean matches(@NotNull Name name) {
return includeName(name);
}
};
}
} }