Extract util methods from JavaDescriptorResolver to the new class DescriptorResolverUtils
This commit is contained in:
+123
@@ -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));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
+1
-1
@@ -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) {
|
||||||
|
|||||||
+2
-88
@@ -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);
|
||||||
}
|
}
|
||||||
|
|||||||
+2
-1
@@ -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);
|
||||||
}
|
}
|
||||||
|
|||||||
+4
-4
@@ -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);
|
||||||
|
|||||||
+2
-1
@@ -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;
|
||||||
}
|
}
|
||||||
|
|||||||
+2
-5
@@ -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;
|
||||||
|
|||||||
+6
-6
@@ -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>();
|
||||||
|
|
||||||
|
|||||||
+3
-2
@@ -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);
|
||||||
}
|
}
|
||||||
|
|||||||
+9
-8
@@ -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);
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-1
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user