Extract util methods from JavaDescriptorResolver to the new class DescriptorResolverUtils

This commit is contained in:
Pavel V. Talanov
2012-10-06 20:09:45 +04:00
parent b70ba37c34
commit 37fd1aebf6
11 changed files with 155 additions and 117 deletions
@@ -0,0 +1,123 @@
/*
* Copyright 2010-2012 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.jetbrains.jet.lang.resolve.java;
import com.intellij.psi.PsiClass;
import com.intellij.psi.PsiModifier;
import com.intellij.psi.PsiModifierListOwner;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.jet.lang.descriptors.*;
import org.jetbrains.jet.lang.resolve.java.kt.PsiAnnotationWithFlags;
import org.jetbrains.jet.lang.resolve.java.wrapper.PsiClassWrapper;
import org.jetbrains.jet.lang.resolve.java.wrapper.PsiMemberWrapper;
import org.jetbrains.jet.lang.resolve.java.wrapper.PsiMethodWrapper;
import org.jetbrains.jet.lang.resolve.name.Name;
import org.jetbrains.jet.lang.types.JetType;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
/**
* @author Pavel Talanov
*/
public final class DescriptorResolverUtils {
private DescriptorResolverUtils() {
}
public static boolean isKotlinClass(@NotNull PsiClass psiClass) {
return new PsiClassWrapper(psiClass).getJetClass().isDefined() || psiClass.getName().equals(JvmAbi.PACKAGE_CLASS);
}
public static boolean isInnerEnum(@NotNull PsiClass innerClass, DeclarationDescriptor owner) {
if (!innerClass.isEnum()) return false;
if (!(owner instanceof ClassDescriptor)) return false;
ClassKind kind = ((ClassDescriptor) owner).getKind();
return kind == ClassKind.CLASS || kind == ClassKind.TRAIT || kind == ClassKind.ENUM_CLASS;
}
public static Collection<JetType> getSupertypes(JavaDescriptorResolveData.ResolverScopeData scope) {
if (scope instanceof JavaDescriptorResolveData.ResolverClassData) {
return ((JavaDescriptorResolveData.ResolverClassData) scope).getClassDescriptor().getSupertypes();
}
else if (scope instanceof JavaDescriptorResolveData.ResolverNamespaceData) {
return Collections.emptyList();
}
else {
throw new IllegalStateException();
}
}
public static Modality resolveModality(PsiMemberWrapper memberWrapper, boolean isFinal) {
if (memberWrapper instanceof PsiMethodWrapper) {
PsiMethodWrapper method = (PsiMethodWrapper) memberWrapper;
if (method.getJetMethod().hasForceOpenFlag()) {
return Modality.OPEN;
}
if (method.getJetMethod().hasForceFinalFlag()) {
return Modality.FINAL;
}
}
return Modality.convertFromFlags(memberWrapper.isAbstract(), !isFinal);
}
public static Visibility resolveVisibility(
PsiModifierListOwner modifierListOwner,
@Nullable PsiAnnotationWithFlags annotation
) {
if (annotation != null) {
if (annotation.hasPrivateFlag()) {
return Visibilities.PRIVATE;
}
else if (annotation.hasInternalFlag()) {
return Visibilities.INTERNAL;
}
}
return modifierListOwner.hasModifierProperty(PsiModifier.PUBLIC) ? Visibilities.PUBLIC :
(modifierListOwner.hasModifierProperty(PsiModifier.PRIVATE) ? Visibilities.PRIVATE :
(modifierListOwner.hasModifierProperty(PsiModifier.PROTECTED) ? Visibilities.PROTECTED :
//Visibilities.PUBLIC));
JavaDescriptorResolver.PACKAGE_VISIBILITY));
}
@Nullable
public static ValueParameterDescriptor getValueParameterDescriptorForAnnotationParameter(
Name argumentName,
ClassDescriptor classDescriptor
) {
Collection<ConstructorDescriptor> constructors = classDescriptor.getConstructors();
assert constructors.size() == 1 : "Annotation class descriptor must have only one constructor";
List<ValueParameterDescriptor> valueParameters = constructors.iterator().next().getValueParameters();
for (ValueParameterDescriptor parameter : valueParameters) {
Name parameterName = parameter.getName();
if (parameterName.equals(argumentName)) {
return parameter;
}
}
return null;
}
public static void getResolverScopeData(@NotNull JavaDescriptorResolveData.ResolverScopeData scopeData) {
if (scopeData.getNamedMembersMap() == null) {
scopeData.setNamedMembersMap(JavaDescriptorResolverHelper.getNamedMembers(scopeData));
}
}
}
@@ -87,7 +87,7 @@ public class JavaDescriptorResolveData {
} }
this.staticMembers = staticMembers; this.staticMembers = staticMembers;
this.kotlin = psiClass != null && JavaDescriptorResolver.isKotlinClass(psiClass); this.kotlin = psiClass != null && DescriptorResolverUtils.isKotlinClass(psiClass);
classOrNamespaceDescriptor = descriptor; classOrNamespaceDescriptor = descriptor;
if (fqName != null && fqName.lastSegmentIs(Name.identifier(JvmAbi.PACKAGE_CLASS)) && psiClass != null && kotlin) { if (fqName != null && fqName.lastSegmentIs(Name.identifier(JvmAbi.PACKAGE_CLASS)) && psiClass != null && kotlin) {
@@ -21,7 +21,6 @@ import com.google.common.collect.Sets;
import com.intellij.openapi.project.Project; import com.intellij.openapi.project.Project;
import com.intellij.psi.PsiAnnotation; import com.intellij.psi.PsiAnnotation;
import com.intellij.psi.PsiClass; import com.intellij.psi.PsiClass;
import com.intellij.psi.PsiModifier;
import com.intellij.psi.PsiModifierListOwner; import com.intellij.psi.PsiModifierListOwner;
import gnu.trove.THashMap; import gnu.trove.THashMap;
import gnu.trove.TObjectHashingStrategy; import gnu.trove.TObjectHashingStrategy;
@@ -34,12 +33,8 @@ import org.jetbrains.jet.lang.resolve.DescriptorUtils;
import org.jetbrains.jet.lang.resolve.java.JavaDescriptorResolveData.ResolverClassData; import org.jetbrains.jet.lang.resolve.java.JavaDescriptorResolveData.ResolverClassData;
import org.jetbrains.jet.lang.resolve.java.JavaDescriptorResolveData.ResolverNamespaceData; import org.jetbrains.jet.lang.resolve.java.JavaDescriptorResolveData.ResolverNamespaceData;
import org.jetbrains.jet.lang.resolve.java.JavaDescriptorResolveData.ResolverScopeData; import org.jetbrains.jet.lang.resolve.java.JavaDescriptorResolveData.ResolverScopeData;
import org.jetbrains.jet.lang.resolve.java.kt.PsiAnnotationWithFlags;
import org.jetbrains.jet.lang.resolve.java.resolver.*; import org.jetbrains.jet.lang.resolve.java.resolver.*;
import org.jetbrains.jet.lang.resolve.java.scope.JavaPackageScope; import org.jetbrains.jet.lang.resolve.java.scope.JavaPackageScope;
import org.jetbrains.jet.lang.resolve.java.wrapper.PsiClassWrapper;
import org.jetbrains.jet.lang.resolve.java.wrapper.PsiMemberWrapper;
import org.jetbrains.jet.lang.resolve.java.wrapper.PsiMethodWrapper;
import org.jetbrains.jet.lang.resolve.java.wrapper.PsiParameterWrapper; import org.jetbrains.jet.lang.resolve.java.wrapper.PsiParameterWrapper;
import org.jetbrains.jet.lang.resolve.name.FqName; import org.jetbrains.jet.lang.resolve.name.FqName;
import org.jetbrains.jet.lang.resolve.name.FqNameBase; import org.jetbrains.jet.lang.resolve.name.FqNameBase;
@@ -219,18 +214,6 @@ public class JavaDescriptorResolver implements DependencyClassByQualifiedNameRes
return null; return null;
} }
public static boolean isKotlinClass(@NotNull PsiClass psiClass) {
return new PsiClassWrapper(psiClass).getJetClass().isDefined() || psiClass.getName().equals(JvmAbi.PACKAGE_CLASS);
}
public static boolean isInnerEnum(@NotNull PsiClass innerClass, DeclarationDescriptor owner) {
if (!innerClass.isEnum()) return false;
if (!(owner instanceof ClassDescriptor)) return false;
ClassKind kind = ((ClassDescriptor) owner).getKind();
return kind == ClassKind.CLASS || kind == ClassKind.TRAIT || kind == ClassKind.ENUM_CLASS;
}
static boolean isJavaLangObject(JetType type) { static boolean isJavaLangObject(JetType type) {
ClassifierDescriptor classifierDescriptor = type.getConstructor().getDeclarationDescriptor(); ClassifierDescriptor classifierDescriptor = type.getConstructor().getDeclarationDescriptor();
return classifierDescriptor instanceof ClassDescriptor && return classifierDescriptor instanceof ClassDescriptor &&
@@ -276,7 +259,7 @@ public class JavaDescriptorResolver implements DependencyClassByQualifiedNameRes
public Set<VariableDescriptor> resolveFieldGroupByName(@NotNull Name fieldName, @NotNull ResolverScopeData scopeData) { public Set<VariableDescriptor> resolveFieldGroupByName(@NotNull Name fieldName, @NotNull ResolverScopeData scopeData) {
PsiClass psiClass = scopeData.getPsiClass(); PsiClass psiClass = scopeData.getPsiClass();
getResolverScopeData(scopeData); DescriptorResolverUtils.getResolverScopeData(scopeData);
NamedMembers namedMembers = scopeData.getNamedMembersMap().get(fieldName); NamedMembers namedMembers = scopeData.getNamedMembersMap().get(fieldName);
if (namedMembers == null) { if (namedMembers == null) {
@@ -294,7 +277,7 @@ public class JavaDescriptorResolver implements DependencyClassByQualifiedNameRes
@NotNull @NotNull
public Set<VariableDescriptor> resolveFieldGroup(@NotNull ResolverScopeData scopeData) { public Set<VariableDescriptor> resolveFieldGroup(@NotNull ResolverScopeData scopeData) {
getResolverScopeData(scopeData); DescriptorResolverUtils.getResolverScopeData(scopeData);
final PsiClass psiClass = scopeData.getPsiClass(); final PsiClass psiClass = scopeData.getPsiClass();
assert psiClass != null; assert psiClass != null;
@@ -313,12 +296,6 @@ public class JavaDescriptorResolver implements DependencyClassByQualifiedNameRes
return descriptors; return descriptors;
} }
public static void getResolverScopeData(@NotNull ResolverScopeData scopeData) {
if (scopeData.getNamedMembersMap() == null) {
scopeData.setNamedMembersMap(JavaDescriptorResolverHelper.getNamedMembers(scopeData));
}
}
@NotNull @NotNull
public Set<FunctionDescriptor> resolveFunctionGroup(@NotNull Name methodName, @NotNull ResolverScopeData scopeData) { public Set<FunctionDescriptor> resolveFunctionGroup(@NotNull Name methodName, @NotNull ResolverScopeData scopeData) {
return functionResolver.resolveFunctionGroup(methodName, scopeData); return functionResolver.resolveFunctionGroup(methodName, scopeData);
@@ -344,73 +321,10 @@ public class JavaDescriptorResolver implements DependencyClassByQualifiedNameRes
return annotationResolver.resolveAnnotation(psiAnnotation, taskList); return annotationResolver.resolveAnnotation(psiAnnotation, taskList);
} }
@Nullable
public static ValueParameterDescriptor getValueParameterDescriptorForAnnotationParameter(
Name argumentName,
ClassDescriptor classDescriptor
) {
Collection<ConstructorDescriptor> constructors = classDescriptor.getConstructors();
assert constructors.size() == 1 : "Annotation class descriptor must have only one constructor";
List<ValueParameterDescriptor> valueParameters = constructors.iterator().next().getValueParameters();
for (ValueParameterDescriptor parameter : valueParameters) {
Name parameterName = parameter.getName();
if (parameterName.equals(argumentName)) {
return parameter;
}
}
return null;
}
public List<FunctionDescriptor> resolveMethods(@NotNull ResolverScopeData scopeData) { public List<FunctionDescriptor> resolveMethods(@NotNull ResolverScopeData scopeData) {
return functionResolver.resolveMethods(scopeData); return functionResolver.resolveMethods(scopeData);
} }
public static Collection<JetType> getSupertypes(ResolverScopeData scope) {
if (scope instanceof ResolverClassData) {
return ((ResolverClassData) scope).getClassDescriptor().getSupertypes();
}
else if (scope instanceof ResolverNamespaceData) {
return Collections.emptyList();
}
else {
throw new IllegalStateException();
}
}
public static Modality resolveModality(PsiMemberWrapper memberWrapper, boolean isFinal) {
if (memberWrapper instanceof PsiMethodWrapper) {
PsiMethodWrapper method = (PsiMethodWrapper) memberWrapper;
if (method.getJetMethod().hasForceOpenFlag()) {
return Modality.OPEN;
}
if (method.getJetMethod().hasForceFinalFlag()) {
return Modality.FINAL;
}
}
return Modality.convertFromFlags(memberWrapper.isAbstract(), !isFinal);
}
public static Visibility resolveVisibility(
PsiModifierListOwner modifierListOwner,
@Nullable PsiAnnotationWithFlags annotation
) {
if (annotation != null) {
if (annotation.hasPrivateFlag()) {
return Visibilities.PRIVATE;
}
else if (annotation.hasInternalFlag()) {
return Visibilities.INTERNAL;
}
}
return modifierListOwner.hasModifierProperty(PsiModifier.PUBLIC) ? Visibilities.PUBLIC :
(modifierListOwner.hasModifierProperty(PsiModifier.PRIVATE) ? Visibilities.PRIVATE :
(modifierListOwner.hasModifierProperty(PsiModifier.PROTECTED) ? Visibilities.PROTECTED :
//Visibilities.PUBLIC));
PACKAGE_VISIBILITY));
}
public List<ClassDescriptor> resolveInnerClasses(DeclarationDescriptor owner, PsiClass psiClass, boolean staticMembers) { public List<ClassDescriptor> resolveInnerClasses(DeclarationDescriptor owner, PsiClass psiClass, boolean staticMembers) {
return innerClassResolver.resolveInnerClasses(owner, psiClass, staticMembers); return innerClassResolver.resolveInnerClasses(owner, psiClass, staticMembers);
} }
@@ -25,6 +25,7 @@ import org.jetbrains.jet.lang.descriptors.ClassDescriptor;
import org.jetbrains.jet.lang.descriptors.ValueParameterDescriptor; import org.jetbrains.jet.lang.descriptors.ValueParameterDescriptor;
import org.jetbrains.jet.lang.descriptors.annotations.AnnotationDescriptor; import org.jetbrains.jet.lang.descriptors.annotations.AnnotationDescriptor;
import org.jetbrains.jet.lang.resolve.constants.CompileTimeConstant; import org.jetbrains.jet.lang.resolve.constants.CompileTimeConstant;
import org.jetbrains.jet.lang.resolve.java.DescriptorResolverUtils;
import org.jetbrains.jet.lang.resolve.java.DescriptorSearchRule; import org.jetbrains.jet.lang.resolve.java.DescriptorSearchRule;
import org.jetbrains.jet.lang.resolve.java.JavaDescriptorResolver; import org.jetbrains.jet.lang.resolve.java.JavaDescriptorResolver;
import org.jetbrains.jet.lang.resolve.java.JvmAbi; import org.jetbrains.jet.lang.resolve.java.JvmAbi;
@@ -103,7 +104,7 @@ public class AnnotationResolver {
.getCompileTimeConstFromExpression(annotationFqName, identifier, value, taskList); .getCompileTimeConstFromExpression(annotationFqName, identifier, value, taskList);
if (compileTimeConst != null) { if (compileTimeConst != null) {
ValueParameterDescriptor valueParameterDescriptor = ValueParameterDescriptor valueParameterDescriptor =
JavaDescriptorResolver.getValueParameterDescriptorForAnnotationParameter(identifier, clazz); DescriptorResolverUtils.getValueParameterDescriptorForAnnotationParameter(identifier, clazz);
if (valueParameterDescriptor != null) { if (valueParameterDescriptor != null) {
annotation.setValueArgument(valueParameterDescriptor, compileTimeConst); annotation.setValueArgument(valueParameterDescriptor, compileTimeConst);
} }
@@ -173,7 +173,7 @@ public class ClassResolver {
classData.getClassDescriptor().setTypeParameterDescriptors(typeParameters); classData.getClassDescriptor().setTypeParameterDescriptors(typeParameters);
classData.getClassDescriptor().setSupertypes(supertypes); classData.getClassDescriptor().setSupertypes(supertypes);
classData.getClassDescriptor().setVisibility(JavaDescriptorResolver.resolveVisibility(psiClass, jetClassAnnotation)); classData.getClassDescriptor().setVisibility(DescriptorResolverUtils.resolveVisibility(psiClass, jetClassAnnotation));
Modality modality; Modality modality;
if (classData.getClassDescriptor().getKind() == ClassKind.ANNOTATION_CLASS) { if (classData.getClassDescriptor().getKind() == ClassKind.ANNOTATION_CLASS) {
modality = Modality.FINAL; modality = Modality.FINAL;
@@ -218,13 +218,13 @@ public class ClassResolver {
return createClassObjectDescriptorForEnum(containing, psiClass); return createClassObjectDescriptorForEnum(containing, psiClass);
} }
if (!JavaDescriptorResolver.isKotlinClass(psiClass)) { if (!DescriptorResolverUtils.isKotlinClass(psiClass)) {
return null; return null;
} }
// If there's at least one inner enum, we need to create a class object (to put this enum into) // If there's at least one inner enum, we need to create a class object (to put this enum into)
for (PsiClass innerClass : psiClass.getInnerClasses()) { for (PsiClass innerClass : psiClass.getInnerClasses()) {
if (JavaDescriptorResolver.isInnerEnum(innerClass, containing)) { if (DescriptorResolverUtils.isInnerEnum(innerClass, containing)) {
return createSyntheticClassObject(containing, psiClass); return createSyntheticClassObject(containing, psiClass);
} }
} }
@@ -415,7 +415,7 @@ public class ClassResolver {
throw new IllegalStateException( throw new IllegalStateException(
"PsiClass not found by name " + containerFqName + ", required to be container declaration of " + fqName); "PsiClass not found by name " + containerFqName + ", required to be container declaration of " + fqName);
} }
if (JavaDescriptorResolver.isInnerEnum(psiClass, clazz) && JavaDescriptorResolver.isKotlinClass(psiClass)) { if (DescriptorResolverUtils.isInnerEnum(psiClass, clazz) && DescriptorResolverUtils.isKotlinClass(psiClass)) {
ClassDescriptor classObjectDescriptor = clazz.getClassObjectDescriptor(); ClassDescriptor classObjectDescriptor = clazz.getClassObjectDescriptor();
if (classObjectDescriptor == null) { if (classObjectDescriptor == null) {
throw new IllegalStateException("Class object for a class with inner enum should've been created earlier: " + clazz); throw new IllegalStateException("Class object for a class with inner enum should've been created earlier: " + clazz);
@@ -26,6 +26,7 @@ import org.jetbrains.jet.lang.descriptors.VariableDescriptor;
import org.jetbrains.jet.lang.descriptors.annotations.AnnotationDescriptor; import org.jetbrains.jet.lang.descriptors.annotations.AnnotationDescriptor;
import org.jetbrains.jet.lang.resolve.constants.*; import org.jetbrains.jet.lang.resolve.constants.*;
import org.jetbrains.jet.lang.resolve.constants.StringValue; import org.jetbrains.jet.lang.resolve.constants.StringValue;
import org.jetbrains.jet.lang.resolve.java.DescriptorResolverUtils;
import org.jetbrains.jet.lang.resolve.java.DescriptorSearchRule; import org.jetbrains.jet.lang.resolve.java.DescriptorSearchRule;
import org.jetbrains.jet.lang.resolve.java.JavaDescriptorResolver; import org.jetbrains.jet.lang.resolve.java.JavaDescriptorResolver;
import org.jetbrains.jet.lang.resolve.name.FqName; import org.jetbrains.jet.lang.resolve.name.FqName;
@@ -91,7 +92,7 @@ public class CompileTimeConstResolver {
javaDescriptorResolver.getClassResolver().resolveClass(annotationFqName, DescriptorSearchRule.INCLUDE_KOTLIN, taskList); javaDescriptorResolver.getClassResolver().resolveClass(annotationFqName, DescriptorSearchRule.INCLUDE_KOTLIN, taskList);
ValueParameterDescriptor valueParameterDescriptor = ValueParameterDescriptor valueParameterDescriptor =
JavaDescriptorResolver.getValueParameterDescriptorForAnnotationParameter(valueName, classDescriptor); DescriptorResolverUtils.getValueParameterDescriptorForAnnotationParameter(valueName, classDescriptor);
if (valueParameterDescriptor == null) { if (valueParameterDescriptor == null) {
return null; return null;
} }
@@ -24,10 +24,7 @@ import org.jetbrains.jet.lang.descriptors.*;
import org.jetbrains.jet.lang.descriptors.annotations.AnnotationDescriptor; import org.jetbrains.jet.lang.descriptors.annotations.AnnotationDescriptor;
import org.jetbrains.jet.lang.resolve.BindingContext; import org.jetbrains.jet.lang.resolve.BindingContext;
import org.jetbrains.jet.lang.resolve.DescriptorResolver; import org.jetbrains.jet.lang.resolve.DescriptorResolver;
import org.jetbrains.jet.lang.resolve.java.JavaDescriptorResolveData; import org.jetbrains.jet.lang.resolve.java.*;
import org.jetbrains.jet.lang.resolve.java.JavaDescriptorResolver;
import org.jetbrains.jet.lang.resolve.java.TypeVariableResolver;
import org.jetbrains.jet.lang.resolve.java.TypeVariableResolvers;
import org.jetbrains.jet.lang.resolve.java.descriptor.ClassDescriptorFromJvmBytecode; import org.jetbrains.jet.lang.resolve.java.descriptor.ClassDescriptorFromJvmBytecode;
import org.jetbrains.jet.lang.resolve.java.kotlinSignature.AlternativeMethodSignatureData; import org.jetbrains.jet.lang.resolve.java.kotlinSignature.AlternativeMethodSignatureData;
import org.jetbrains.jet.lang.resolve.java.wrapper.PsiMethodWrapper; import org.jetbrains.jet.lang.resolve.java.wrapper.PsiMethodWrapper;
@@ -189,7 +186,7 @@ public class ConstructorResolver {
constructorDescriptor.initialize(classData.getClassDescriptor().getTypeConstructor().getParameters(), constructorDescriptor.initialize(classData.getClassDescriptor().getTypeConstructor().getParameters(),
valueParameterDescriptors.getDescriptors(), valueParameterDescriptors.getDescriptors(),
JavaDescriptorResolver.resolveVisibility(psiConstructor, constructor.getJetConstructor()), DescriptorResolverUtils.resolveVisibility(psiConstructor, constructor.getJetConstructor()),
aStatic); aStatic);
javaDescriptorResolver.getTrace().record(BindingContext.CONSTRUCTOR, psiConstructor, constructorDescriptor); javaDescriptorResolver.getTrace().record(BindingContext.CONSTRUCTOR, psiConstructor, constructorDescriptor);
return constructorDescriptor; return constructorDescriptor;
@@ -53,7 +53,7 @@ public class FunctionResolver {
@NotNull JavaDescriptorResolveData.ResolverScopeData scopeData @NotNull JavaDescriptorResolveData.ResolverScopeData scopeData
) { ) {
JavaDescriptorResolver.getResolverScopeData(scopeData); DescriptorResolverUtils.getResolverScopeData(scopeData);
PsiType returnPsiType = method.getReturnType(); PsiType returnPsiType = method.getReturnType();
if (returnPsiType == null) { if (returnPsiType == null) {
@@ -121,8 +121,8 @@ public class FunctionResolver {
methodTypeParameters, methodTypeParameters,
valueParameterDescriptors.getDescriptors(), valueParameterDescriptors.getDescriptors(),
returnType, returnType,
JavaDescriptorResolver.resolveModality(method, method.isFinal()), DescriptorResolverUtils.resolveModality(method, method.isFinal()),
JavaDescriptorResolver.resolveVisibility(psiMethod, method.getJetMethod()), DescriptorResolverUtils.resolveVisibility(psiMethod, method.getJetMethod()),
/*isInline = */ false /*isInline = */ false
); );
@@ -191,7 +191,7 @@ public class FunctionResolver {
} }
public Set<FunctionDescriptor> resolveFunctionGroup(Name methodName, JavaDescriptorResolveData.ResolverScopeData scopeData) { public Set<FunctionDescriptor> resolveFunctionGroup(Name methodName, JavaDescriptorResolveData.ResolverScopeData scopeData) {
JavaDescriptorResolver.getResolverScopeData(scopeData); DescriptorResolverUtils.getResolverScopeData(scopeData);
Map<Name, NamedMembers> namedMembersMap = scopeData.getNamedMembersMap(); Map<Name, NamedMembers> namedMembersMap = scopeData.getNamedMembersMap();
@@ -239,7 +239,7 @@ public class FunctionResolver {
Name methodName Name methodName
) { ) {
Set<SimpleFunctionDescriptor> r = Sets.newLinkedHashSet(); Set<SimpleFunctionDescriptor> r = Sets.newLinkedHashSet();
for (JetType supertype : JavaDescriptorResolver.getSupertypes(scopeData)) { for (JetType supertype : DescriptorResolverUtils.getSupertypes(scopeData)) {
for (FunctionDescriptor function : supertype.getMemberScope().getFunctions(methodName)) { for (FunctionDescriptor function : supertype.getMemberScope().getFunctions(methodName)) {
r.add((SimpleFunctionDescriptor) function); r.add((SimpleFunctionDescriptor) function);
} }
@@ -249,7 +249,7 @@ public class FunctionResolver {
public List<FunctionDescriptor> resolveMethods(@NotNull JavaDescriptorResolveData.ResolverScopeData scopeData) { public List<FunctionDescriptor> resolveMethods(@NotNull JavaDescriptorResolveData.ResolverScopeData scopeData) {
JavaDescriptorResolver.getResolverScopeData(scopeData); DescriptorResolverUtils.getResolverScopeData(scopeData);
List<FunctionDescriptor> functions = new ArrayList<FunctionDescriptor>(); List<FunctionDescriptor> functions = new ArrayList<FunctionDescriptor>();
@@ -22,6 +22,7 @@ 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.DeclarationDescriptor; import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor;
import org.jetbrains.jet.lang.resolve.DescriptorUtils; import org.jetbrains.jet.lang.resolve.DescriptorUtils;
import org.jetbrains.jet.lang.resolve.java.DescriptorResolverUtils;
import org.jetbrains.jet.lang.resolve.java.DescriptorSearchRule; import org.jetbrains.jet.lang.resolve.java.DescriptorSearchRule;
import org.jetbrains.jet.lang.resolve.java.JavaDescriptorResolver; import org.jetbrains.jet.lang.resolve.java.JavaDescriptorResolver;
import org.jetbrains.jet.lang.resolve.java.JvmAbi; import org.jetbrains.jet.lang.resolve.java.JvmAbi;
@@ -52,7 +53,7 @@ public class InnerClassResolver {
if (innerPsiClass.getName().equals(JvmAbi.CLASS_OBJECT_CLASS_NAME)) { if (innerPsiClass.getName().equals(JvmAbi.CLASS_OBJECT_CLASS_NAME)) {
continue; continue;
} }
if (JavaDescriptorResolver.isInnerEnum(innerPsiClass, owner)) { if (DescriptorResolverUtils.isInnerEnum(innerPsiClass, owner)) {
// Inner enums will be put later into our class object // Inner enums will be put later into our class object
continue; continue;
} }
@@ -71,7 +72,7 @@ public class InnerClassResolver {
// If we're a class object, inner enums of our parent need to be put into us // If we're a class object, inner enums of our parent need to be put into us
DeclarationDescriptor containingDeclaration = owner.getContainingDeclaration(); DeclarationDescriptor containingDeclaration = owner.getContainingDeclaration();
for (PsiClass innerPsiClass : psiClass.getInnerClasses()) { for (PsiClass innerPsiClass : psiClass.getInnerClasses()) {
if (JavaDescriptorResolver.isInnerEnum(innerPsiClass, containingDeclaration)) { if (DescriptorResolverUtils.isInnerEnum(innerPsiClass, containingDeclaration)) {
ClassDescriptor classDescriptor = resolveInnerClass(innerPsiClass); ClassDescriptor classDescriptor = resolveInnerClass(innerPsiClass);
r.add(classDescriptor); r.add(classDescriptor);
} }
@@ -26,8 +26,8 @@ import org.jetbrains.jet.lang.resolve.BindingContext;
import org.jetbrains.jet.lang.resolve.BindingTrace; import org.jetbrains.jet.lang.resolve.BindingTrace;
import org.jetbrains.jet.lang.resolve.DescriptorUtils; import org.jetbrains.jet.lang.resolve.DescriptorUtils;
import org.jetbrains.jet.lang.resolve.OverrideResolver; import org.jetbrains.jet.lang.resolve.OverrideResolver;
import org.jetbrains.jet.lang.resolve.java.JavaDescriptorResolveData.ResolverScopeData;
import org.jetbrains.jet.lang.resolve.java.*; import org.jetbrains.jet.lang.resolve.java.*;
import org.jetbrains.jet.lang.resolve.java.JavaDescriptorResolveData.ResolverScopeData;
import org.jetbrains.jet.lang.resolve.java.kotlinSignature.AlternativeFieldSignatureData; import org.jetbrains.jet.lang.resolve.java.kotlinSignature.AlternativeFieldSignatureData;
import org.jetbrains.jet.lang.resolve.java.kt.DescriptorKindUtils; import org.jetbrains.jet.lang.resolve.java.kt.DescriptorKindUtils;
import org.jetbrains.jet.lang.resolve.java.kt.JetMethodAnnotation; import org.jetbrains.jet.lang.resolve.java.kt.JetMethodAnnotation;
@@ -82,7 +82,7 @@ public final class PropertiesResolver {
@NotNull Name propertyName, @NotNull Name propertyName,
@NotNull String context @NotNull String context
) { ) {
JavaDescriptorResolver.getResolverScopeData(scopeData); DescriptorResolverUtils.getResolverScopeData(scopeData);
if (namedMembers.getPropertyDescriptors() != null) { if (namedMembers.getPropertyDescriptors() != null) {
return; return;
@@ -107,12 +107,12 @@ public final class PropertiesResolver {
PropertyAccessorData characteristicMember = getCharacteristicMember(members); PropertyAccessorData characteristicMember = getCharacteristicMember(members);
Visibility visibility = JavaDescriptorResolver.resolveVisibility(characteristicMember.getMember().getPsiMember(), null); Visibility visibility = DescriptorResolverUtils.resolveVisibility(characteristicMember.getMember().getPsiMember(), null);
CallableMemberDescriptor.Kind kind = CallableMemberDescriptor.Kind.DECLARATION; CallableMemberDescriptor.Kind kind = CallableMemberDescriptor.Kind.DECLARATION;
if (members.getter != null && members.getter.getMember() instanceof PsiMethodWrapper) { if (members.getter != null && members.getter.getMember() instanceof PsiMethodWrapper) {
JetMethodAnnotation jetMethod = ((PsiMethodWrapper) members.getter.getMember()).getJetMethod(); JetMethodAnnotation jetMethod = ((PsiMethodWrapper) members.getter.getMember()).getJetMethod();
visibility = JavaDescriptorResolver.resolveVisibility(characteristicMember.getMember().getPsiMember(), jetMethod); visibility = DescriptorResolverUtils.resolveVisibility(characteristicMember.getMember().getPsiMember(), jetMethod);
kind = DescriptorKindUtils.flagsToKind(jetMethod.kind()); kind = DescriptorKindUtils.flagsToKind(jetMethod.kind());
} }
@@ -122,7 +122,8 @@ public final class PropertiesResolver {
PropertyDescriptor propertyDescriptor = new PropertyDescriptor( PropertyDescriptor propertyDescriptor = new PropertyDescriptor(
realOwner, realOwner,
javaDescriptorResolver.resolveAnnotations(characteristicMember.getMember().getPsiMember()), javaDescriptorResolver.resolveAnnotations(characteristicMember.getMember().getPsiMember()),
JavaDescriptorResolver.resolveModality(characteristicMember.getMember(), isFinal || isEnumEntry || isPropertyForNamedObject), DescriptorResolverUtils
.resolveModality(characteristicMember.getMember(), isFinal || isEnumEntry || isPropertyForNamedObject),
visibility, visibility,
isVar, isVar,
propertyName, propertyName,
@@ -157,9 +158,9 @@ public final class PropertiesResolver {
} }
if (members.setter != null) { if (members.setter != null) {
Visibility setterVisibility = JavaDescriptorResolver.resolveVisibility(members.setter.getMember().getPsiMember(), null); Visibility setterVisibility = DescriptorResolverUtils.resolveVisibility(members.setter.getMember().getPsiMember(), null);
if (members.setter.getMember() instanceof PsiMethodWrapper) { if (members.setter.getMember() instanceof PsiMethodWrapper) {
setterVisibility = JavaDescriptorResolver.resolveVisibility( setterVisibility = DescriptorResolverUtils.resolveVisibility(
members.setter.getMember().getPsiMember(), members.setter.getMember().getPsiMember(),
((PsiMethodWrapper) members.setter.getMember()) ((PsiMethodWrapper) members.setter.getMember())
.getJetMethod()); .getJetMethod());
@@ -372,7 +373,7 @@ public final class PropertiesResolver {
private static Set<PropertyDescriptor> getPropertiesFromSupertypes(ResolverScopeData scopeData, Name propertyName) { private static Set<PropertyDescriptor> getPropertiesFromSupertypes(ResolverScopeData scopeData, Name propertyName) {
Set<PropertyDescriptor> r = new HashSet<PropertyDescriptor>(); Set<PropertyDescriptor> r = new HashSet<PropertyDescriptor>();
for (JetType supertype : JavaDescriptorResolver.getSupertypes(scopeData)) { for (JetType supertype : DescriptorResolverUtils.getSupertypes(scopeData)) {
for (VariableDescriptor property : supertype.getMemberScope().getProperties(propertyName)) { for (VariableDescriptor property : supertype.getMemberScope().getProperties(propertyName)) {
r.add((PropertyDescriptor) property); r.add((PropertyDescriptor) property);
} }
@@ -46,7 +46,7 @@ import java.util.ArrayList;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.List;
import static org.jetbrains.jet.lang.resolve.java.JavaDescriptorResolver.getValueParameterDescriptorForAnnotationParameter; import static org.jetbrains.jet.lang.resolve.java.DescriptorResolverUtils.getValueParameterDescriptorForAnnotationParameter;
/** /**
* @author Natalia Ukhorskaya * @author Natalia Ukhorskaya