more JavaDescriptorResolver refactoring
This commit is contained in:
+1
-15
@@ -8,7 +8,6 @@ import org.jetbrains.annotations.NotNull;
|
|||||||
import org.jetbrains.jet.lang.descriptors.ClassDescriptor;
|
import org.jetbrains.jet.lang.descriptors.ClassDescriptor;
|
||||||
import org.jetbrains.jet.lang.descriptors.ClassifierDescriptor;
|
import org.jetbrains.jet.lang.descriptors.ClassifierDescriptor;
|
||||||
import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor;
|
import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor;
|
||||||
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.scopes.receivers.ReceiverDescriptor;
|
import org.jetbrains.jet.lang.resolve.scopes.receivers.ReceiverDescriptor;
|
||||||
import org.jetbrains.jet.lang.types.TypeSubstitutor;
|
import org.jetbrains.jet.lang.types.TypeSubstitutor;
|
||||||
@@ -16,7 +15,6 @@ import org.jetbrains.jet.lang.types.TypeSubstitutor;
|
|||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Set;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author abreslav
|
* @author abreslav
|
||||||
@@ -73,9 +71,8 @@ public class JavaClassMembersScope extends JavaClassOrPackageScope {
|
|||||||
public Collection<DeclarationDescriptor> getAllDescriptors() {
|
public Collection<DeclarationDescriptor> getAllDescriptors() {
|
||||||
if (allDescriptors == null) {
|
if (allDescriptors == null) {
|
||||||
allDescriptors = Sets.newHashSet();
|
allDescriptors = Sets.newHashSet();
|
||||||
TypeSubstitutor substitutorForGenericSupertypes = getTypeSubstitutorForSupertypes();
|
|
||||||
|
|
||||||
allDescriptors.addAll(semanticServices.getDescriptorResolver().resolveMethods(psiClass.getPsiClass(), descriptor, staticMembers, substitutorForGenericSupertypes));
|
allDescriptors.addAll(semanticServices.getDescriptorResolver().resolveMethods(psiClass.getPsiClass(), descriptor));
|
||||||
|
|
||||||
allDescriptors.addAll(semanticServices.getDescriptorResolver().resolveFieldGroup(descriptor, psiClass.getPsiClass(), staticMembers));
|
allDescriptors.addAll(semanticServices.getDescriptorResolver().resolveFieldGroup(descriptor, psiClass.getPsiClass(), staticMembers));
|
||||||
|
|
||||||
@@ -84,17 +81,6 @@ public class JavaClassMembersScope extends JavaClassOrPackageScope {
|
|||||||
return allDescriptors;
|
return allDescriptors;
|
||||||
}
|
}
|
||||||
|
|
||||||
private TypeSubstitutor getTypeSubstitutorForSupertypes() {
|
|
||||||
TypeSubstitutor substitutorForGenericSupertypes;
|
|
||||||
if (descriptor instanceof ClassDescriptor) {
|
|
||||||
substitutorForGenericSupertypes = semanticServices.getDescriptorResolver().createSubstitutorForGenericSupertypes((ClassDescriptor) descriptor);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
substitutorForGenericSupertypes = TypeSubstitutor.EMPTY;
|
|
||||||
}
|
|
||||||
return substitutorForGenericSupertypes;
|
|
||||||
}
|
|
||||||
|
|
||||||
private ClassifierDescriptor doGetClassifierDescriptor(String name) {
|
private ClassifierDescriptor doGetClassifierDescriptor(String name) {
|
||||||
// TODO : suboptimal, walk the list only once
|
// TODO : suboptimal, walk the list only once
|
||||||
for (PsiClass innerClass : psiClass.getPsiClass().getAllInnerClasses()) {
|
for (PsiClass innerClass : psiClass.getPsiClass().getAllInnerClasses()) {
|
||||||
|
|||||||
+25
-15
@@ -95,6 +95,7 @@ public class JavaDescriptorResolver {
|
|||||||
private Map<String, NamedMembers> namedMembersMap;
|
private Map<String, NamedMembers> namedMembersMap;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** Class with instance members */
|
||||||
private static class ResolverClassData extends ResolverScopeData {
|
private static class ResolverClassData extends ResolverScopeData {
|
||||||
private MutableClassDescriptorLite classDescriptor;
|
private MutableClassDescriptorLite classDescriptor;
|
||||||
|
|
||||||
@@ -104,6 +105,7 @@ public class JavaDescriptorResolver {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** Either package or class with static members */
|
||||||
private static class ResolverNamespaceData extends ResolverScopeData {
|
private static class ResolverNamespaceData extends ResolverScopeData {
|
||||||
private JavaNamespaceDescriptor namespaceDescriptor;
|
private JavaNamespaceDescriptor namespaceDescriptor;
|
||||||
|
|
||||||
@@ -1015,7 +1017,7 @@ public class JavaDescriptorResolver {
|
|||||||
namedMembers.propertyDescriptors = r;
|
namedMembers.propertyDescriptors = r;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void resolveNamedGroupFunctions(DeclarationDescriptor owner, PsiClass psiClass, TypeSubstitutor typeSubstitutorForGenericSuperclasses, boolean staticMembers, NamedMembers namedMembers, String functionName) {
|
private void resolveNamedGroupFunctions(DeclarationDescriptor owner, PsiClass psiClass, TypeSubstitutor typeSubstitutorForGenericSuperclasses, NamedMembers namedMembers) {
|
||||||
if (namedMembers.functionDescriptors != null) {
|
if (namedMembers.functionDescriptors != null) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -1027,7 +1029,10 @@ public class JavaDescriptorResolver {
|
|||||||
|
|
||||||
Set<FunctionDescriptor> functionDescriptors = new HashSet<FunctionDescriptor>(namedMembers.methods.size());
|
Set<FunctionDescriptor> functionDescriptors = new HashSet<FunctionDescriptor>(namedMembers.methods.size());
|
||||||
for (PsiMethodWrapper method : namedMembers.methods) {
|
for (PsiMethodWrapper method : namedMembers.methods) {
|
||||||
functionDescriptors.add(resolveMethodToFunctionDescriptor(owner, psiClass, typeSubstitutorForGenericSuperclasses, method));
|
FunctionDescriptor function = resolveMethodToFunctionDescriptor(owner, psiClass, typeSubstitutorForGenericSuperclasses, method);
|
||||||
|
if (function != null) {
|
||||||
|
functionDescriptors.add(function);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
namedMembers.functionDescriptors = functionDescriptors;
|
namedMembers.functionDescriptors = functionDescriptors;
|
||||||
}
|
}
|
||||||
@@ -1073,12 +1078,12 @@ public class JavaDescriptorResolver {
|
|||||||
} else {
|
} else {
|
||||||
typeSubstitutor = TypeSubstitutor.EMPTY;
|
typeSubstitutor = TypeSubstitutor.EMPTY;
|
||||||
}
|
}
|
||||||
resolveNamedGroupFunctions(descriptor, psiClass, typeSubstitutor, staticMembers, namedMembers, methodName);
|
resolveNamedGroupFunctions(descriptor, psiClass, typeSubstitutor, namedMembers);
|
||||||
|
|
||||||
return namedMembers.functionDescriptors;
|
return namedMembers.functionDescriptors;
|
||||||
}
|
}
|
||||||
|
|
||||||
public TypeSubstitutor createSubstitutorForGenericSupertypes(@Nullable ClassDescriptor classDescriptor) {
|
private TypeSubstitutor createSubstitutorForGenericSupertypes(@Nullable ClassDescriptor classDescriptor) {
|
||||||
TypeSubstitutor typeSubstitutor;
|
TypeSubstitutor typeSubstitutor;
|
||||||
if (classDescriptor != null) {
|
if (classDescriptor != null) {
|
||||||
typeSubstitutor = TypeUtils.buildDeepSubstitutor(classDescriptor.getDefaultType());
|
typeSubstitutor = TypeUtils.buildDeepSubstitutor(classDescriptor.getDefaultType());
|
||||||
@@ -1230,18 +1235,23 @@ public class JavaDescriptorResolver {
|
|||||||
return substitutedFunctionDescriptor;
|
return substitutedFunctionDescriptor;
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<FunctionDescriptor> resolveMethods(PsiClass psiClass, DeclarationDescriptor containingDeclaration, boolean staticMembers, TypeSubstitutor substitutorForGenericSupertypes) {
|
public List<FunctionDescriptor> resolveMethods(PsiClass psiClass, DeclarationDescriptor containingDeclaration) {
|
||||||
List<FunctionDescriptor> functions = new ArrayList<FunctionDescriptor>();
|
ResolverScopeData scopeData = getResolverScopeData(containingDeclaration, new PsiClassWrapper(psiClass));
|
||||||
for (HierarchicalMethodSignature signature : psiClass.getVisibleSignatures()) {
|
|
||||||
PsiMethod method = signature.getMethod();
|
TypeSubstitutor substitutorForGenericSupertypes;
|
||||||
if (method.hasModifierProperty(PsiModifier.STATIC) != staticMembers) {
|
if (scopeData instanceof ResolverClassData) {
|
||||||
continue;
|
substitutorForGenericSupertypes = createSubstitutorForGenericSupertypes(((ResolverClassData) scopeData).classDescriptor);
|
||||||
}
|
} else {
|
||||||
FunctionDescriptor functionDescriptor = semanticServices.getDescriptorResolver().resolveMethodToFunctionDescriptor(containingDeclaration, psiClass, substitutorForGenericSupertypes, new PsiMethodWrapper(method));
|
substitutorForGenericSupertypes = TypeSubstitutor.EMPTY;
|
||||||
if (functionDescriptor != null) {
|
|
||||||
functions.add(functionDescriptor);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
List<FunctionDescriptor> functions = new ArrayList<FunctionDescriptor>();
|
||||||
|
|
||||||
|
for (NamedMembers namedMembers : scopeData.namedMembersMap.values()) {
|
||||||
|
resolveNamedGroupFunctions(containingDeclaration, psiClass, substitutorForGenericSupertypes, namedMembers);
|
||||||
|
functions.addAll(namedMembers.functionDescriptors);
|
||||||
|
}
|
||||||
|
|
||||||
return functions;
|
return functions;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user