Move method from JavaDescriptorResolver to PropertiesResolver and ClassResolver

This commit is contained in:
Pavel V. Talanov
2012-10-06 20:25:54 +04:00
parent 55a60b3296
commit cae349d4f0
3 changed files with 69 additions and 57 deletions
@@ -17,7 +17,6 @@
package org.jetbrains.jet.lang.resolve.java;
import com.google.common.collect.Maps;
import com.google.common.collect.Sets;
import com.intellij.openapi.project.Project;
import com.intellij.psi.PsiAnnotation;
import com.intellij.psi.PsiClass;
@@ -44,7 +43,10 @@ import org.jetbrains.jet.lang.types.DependencyClassByQualifiedNameResolver;
import org.jetbrains.jet.lang.types.JetType;
import javax.inject.Inject;
import java.util.*;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.Set;
/**
* @author abreslav
@@ -99,12 +101,12 @@ public class JavaDescriptorResolver implements DependencyClassByQualifiedNameRes
private PsiClassFinder psiClassFinder;
private JavaDescriptorSignatureResolver javaDescriptorSignatureResolver;
private final PropertiesResolver propertiesResolver = new PropertiesResolver(this);
public final ClassResolver classResolver = new ClassResolver(this);
private final ClassResolver classResolver = new ClassResolver(this);
private final ConstructorResolver constructorResolver = new ConstructorResolver(this);
private final CompileTimeConstResolver compileTimeConstResolver = new CompileTimeConstResolver(this);
private final AnnotationResolver annotationResolver = new AnnotationResolver(this);
public final FunctionResolver functionResolver = new FunctionResolver(this);
public final NamespaceResolver namespaceResolver = new NamespaceResolver(this);
private final FunctionResolver functionResolver = new FunctionResolver(this);
private final NamespaceResolver namespaceResolver = new NamespaceResolver(this);
private final InnerClassResolver innerClassResolver = new InnerClassResolver(this);
private final ValueParameterResolver valueParameterResolver = new ValueParameterResolver(this);
@@ -136,16 +138,6 @@ public class JavaDescriptorResolver implements DependencyClassByQualifiedNameRes
this.propertiesResolver.setJavaDescriptorSignatureResolver(javaDescriptorSignatureResolver);
}
@Nullable
public ClassDescriptor resolveJavaLangObject() {
ClassDescriptor clazz = classResolver.resolveClass(OBJECT_FQ_NAME, DescriptorSearchRule.IGNORE_IF_FOUND_IN_KOTLIN);
if (clazz == null) {
// TODO: warning
}
return clazz;
}
@Nullable
public ClassDescriptor resolveClass(@NotNull FqName qualifiedName, @NotNull DescriptorSearchRule searchRule) {
return classResolver.resolveClass(qualifiedName, searchRule);
@@ -212,6 +204,14 @@ public class JavaDescriptorResolver implements DependencyClassByQualifiedNameRes
return namespaceResolver.getJavaPackageScope(fqName, ns);
}
public Set<VariableDescriptor> resolveFieldGroupByName(Name name, ResolverScopeData data) {
return propertiesResolver.resolveFieldGroupByName(name, data);
}
public Set<VariableDescriptor> resolveFieldGroup(ResolverScopeData data) {
return propertiesResolver.resolveFieldGroup(data);
}
public static class ValueParameterDescriptors {
private final JetType receiverType;
private final List<ValueParameterDescriptor> descriptors;
@@ -232,46 +232,6 @@ public class JavaDescriptorResolver implements DependencyClassByQualifiedNameRes
}
}
public Set<VariableDescriptor> resolveFieldGroupByName(@NotNull Name fieldName, @NotNull ResolverScopeData scopeData) {
PsiClass psiClass = scopeData.getPsiClass();
DescriptorResolverUtils.getResolverScopeData(scopeData);
NamedMembers namedMembers = scopeData.getNamedMembersMap().get(fieldName);
if (namedMembers == null) {
return Collections.emptySet();
}
//noinspection ConstantConditions
String qualifiedName = psiClass == null ? scopeData.getPsiPackage().getQualifiedName() : psiClass.getQualifiedName();
propertiesResolver.resolveNamedGroupProperties(scopeData.getClassOrNamespaceDescriptor(), scopeData, namedMembers, fieldName,
"class or namespace " + qualifiedName);
return namedMembers.getPropertyDescriptors();
}
@NotNull
public Set<VariableDescriptor> resolveFieldGroup(@NotNull ResolverScopeData scopeData) {
DescriptorResolverUtils.getResolverScopeData(scopeData);
final PsiClass psiClass = scopeData.getPsiClass();
assert psiClass != null;
Set<VariableDescriptor> descriptors = Sets.newHashSet();
Map<Name, NamedMembers> membersForProperties = scopeData.getNamedMembersMap();
for (Map.Entry<Name, NamedMembers> entry : membersForProperties.entrySet()) {
NamedMembers namedMembers = entry.getValue();
Name propertyName = entry.getKey();
propertiesResolver.resolveNamedGroupProperties(
scopeData.getClassOrNamespaceDescriptor(), scopeData, namedMembers, propertyName,
"class or namespace " + psiClass.getQualifiedName());
descriptors.addAll(namedMembers.getPropertyDescriptors());
}
return descriptors;
}
@NotNull
public Set<FunctionDescriptor> resolveFunctionGroup(@NotNull Name methodName, @NotNull ResolverScopeData scopeData) {
return functionResolver.resolveFunctionGroup(methodName, scopeData);
@@ -325,7 +325,8 @@ public class ClassResolver {
@Override
public JetSignatureVisitor visitSuperclass() {
return new JetTypeJetSignatureReader(javaDescriptorResolver.getSemanticServices(), JetStandardLibrary.getInstance(), typeVariableResolver) {
return new JetTypeJetSignatureReader(javaDescriptorResolver.getSemanticServices(), JetStandardLibrary.getInstance(),
typeVariableResolver) {
@Override
protected void done(@NotNull JetType jetType) {
if (!jetType.equals(JetStandardClasses.getAnyType())) {
@@ -362,7 +363,7 @@ public class ClassResolver {
result.add(JetStandardClasses.getAnyType());
}
else {
ClassDescriptor object = javaDescriptorResolver.resolveJavaLangObject();
ClassDescriptor object = resolveJavaLangObject();
if (object != null) {
result.add(object.getDefaultType());
}
@@ -432,6 +433,15 @@ public class ClassResolver {
return ns;
}
@Nullable
public ClassDescriptor resolveJavaLangObject() {
ClassDescriptor clazz = resolveClass(JavaDescriptorResolver.OBJECT_FQ_NAME, DescriptorSearchRule.IGNORE_IF_FOUND_IN_KOTLIN);
if (clazz == null) {
// TODO: warning
}
return clazz;
}
public static ClassKind getClassKind(@NotNull PsiClass psiClass, @NotNull JetClassAnnotation jetClassAnnotation) {
if (psiClass.isInterface()) {
return (psiClass.isAnnotationType() ? ClassKind.ANNOTATION_CLASS : ClassKind.TRAIT);
@@ -43,6 +43,48 @@ import java.util.*;
public final class PropertiesResolver {
public Set<VariableDescriptor> resolveFieldGroupByName(
@NotNull Name fieldName,
@NotNull ResolverScopeData scopeData
) {
PsiClass psiClass = scopeData.getPsiClass();
DescriptorResolverUtils.getResolverScopeData(scopeData);
NamedMembers namedMembers = scopeData.getNamedMembersMap().get(fieldName);
if (namedMembers == null) {
return Collections.emptySet();
}
//noinspection ConstantConditions
String qualifiedName = psiClass == null ? scopeData.getPsiPackage().getQualifiedName() : psiClass.getQualifiedName();
resolveNamedGroupProperties(scopeData.getClassOrNamespaceDescriptor(), scopeData, namedMembers, fieldName,
"class or namespace " + qualifiedName);
return namedMembers.getPropertyDescriptors();
}
@NotNull
public Set<VariableDescriptor> resolveFieldGroup(@NotNull ResolverScopeData scopeData) {
DescriptorResolverUtils.getResolverScopeData(scopeData);
final PsiClass psiClass = scopeData.getPsiClass();
assert psiClass != null;
Set<VariableDescriptor> descriptors = Sets.newHashSet();
Map<Name, NamedMembers> membersForProperties = scopeData.getNamedMembersMap();
for (Map.Entry<Name, NamedMembers> entry : membersForProperties.entrySet()) {
NamedMembers namedMembers = entry.getValue();
Name propertyName = entry.getKey();
resolveNamedGroupProperties(
scopeData.getClassOrNamespaceDescriptor(), scopeData, namedMembers, propertyName,
"class or namespace " + psiClass.getQualifiedName());
descriptors.addAll(namedMembers.getPropertyDescriptors());
}
return descriptors;
}
private static class GroupingValue {
PropertyAccessorData getter;
PropertyAccessorData setter;