Add lacation parameter to ModuleDescriptor.resolveTopLevelClass (in DescriptorUtils.kt)
This commit is contained in:
+2
-1
@@ -25,6 +25,7 @@ import org.jetbrains.kotlin.cli.jvm.compiler.CliLightClassGenerationSupport;
|
|||||||
import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment;
|
import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment;
|
||||||
import org.jetbrains.kotlin.descriptors.*;
|
import org.jetbrains.kotlin.descriptors.*;
|
||||||
import org.jetbrains.kotlin.descriptors.impl.DeclarationDescriptorVisitorEmptyBodies;
|
import org.jetbrains.kotlin.descriptors.impl.DeclarationDescriptorVisitorEmptyBodies;
|
||||||
|
import org.jetbrains.kotlin.incremental.components.NoLookupLocation;
|
||||||
import org.jetbrains.kotlin.load.java.JavaBindingContext;
|
import org.jetbrains.kotlin.load.java.JavaBindingContext;
|
||||||
import org.jetbrains.kotlin.name.FqName;
|
import org.jetbrains.kotlin.name.FqName;
|
||||||
import org.jetbrains.kotlin.platform.JavaToKotlinClassMap;
|
import org.jetbrains.kotlin.platform.JavaToKotlinClassMap;
|
||||||
@@ -85,7 +86,7 @@ public abstract class AbstractSdkAnnotationsValidityTest extends UsefulTestCase
|
|||||||
|
|
||||||
int chunkStart = chunkIndex * CLASSES_IN_CHUNK;
|
int chunkStart = chunkIndex * CLASSES_IN_CHUNK;
|
||||||
for (FqName javaClass : affectedClasses.subList(chunkStart, Math.min(chunkStart + CLASSES_IN_CHUNK, affectedClasses.size()))) {
|
for (FqName javaClass : affectedClasses.subList(chunkStart, Math.min(chunkStart + CLASSES_IN_CHUNK, affectedClasses.size()))) {
|
||||||
ClassDescriptor topLevelClass = resolveTopLevelClass(module, javaClass);
|
ClassDescriptor topLevelClass = resolveTopLevelClass(module, javaClass, NoLookupLocation.FROM_TEST);
|
||||||
PackageViewDescriptor topLevelPackage = module.getPackage(javaClass);
|
PackageViewDescriptor topLevelPackage = module.getPackage(javaClass);
|
||||||
if (topLevelClass == null) {
|
if (topLevelClass == null) {
|
||||||
continue;
|
continue;
|
||||||
|
|||||||
+2
-1
@@ -31,6 +31,7 @@ import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment;
|
|||||||
import org.jetbrains.kotlin.config.CompilerConfiguration;
|
import org.jetbrains.kotlin.config.CompilerConfiguration;
|
||||||
import org.jetbrains.kotlin.descriptors.ClassDescriptor;
|
import org.jetbrains.kotlin.descriptors.ClassDescriptor;
|
||||||
import org.jetbrains.kotlin.descriptors.ModuleDescriptor;
|
import org.jetbrains.kotlin.descriptors.ModuleDescriptor;
|
||||||
|
import org.jetbrains.kotlin.incremental.components.NoLookupLocation;
|
||||||
import org.jetbrains.kotlin.name.FqName;
|
import org.jetbrains.kotlin.name.FqName;
|
||||||
import org.jetbrains.kotlin.resolve.lazy.LazyResolveTestUtil;
|
import org.jetbrains.kotlin.resolve.lazy.LazyResolveTestUtil;
|
||||||
import org.jetbrains.kotlin.test.ConfigurationKind;
|
import org.jetbrains.kotlin.test.ConfigurationKind;
|
||||||
@@ -209,7 +210,7 @@ public class ResolveDescriptorsFromExternalLibraries {
|
|||||||
String className = entryName.substring(0, entryName.length() - ".class".length()).replace("/", ".");
|
String className = entryName.substring(0, entryName.length() - ".class".length()).replace("/", ".");
|
||||||
|
|
||||||
try {
|
try {
|
||||||
ClassDescriptor clazz = resolveTopLevelClass(module, new FqName(className));
|
ClassDescriptor clazz = resolveTopLevelClass(module, new FqName(className), NoLookupLocation.FROM_TEST);
|
||||||
if (clazz == null) {
|
if (clazz == null) {
|
||||||
throw new IllegalStateException("class not found by name " + className + " in " + libDescription);
|
throw new IllegalStateException("class not found by name " + className + " in " + libDescription);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -22,6 +22,7 @@ import org.jetbrains.annotations.NotNull;
|
|||||||
import org.jetbrains.kotlin.builtins.KotlinBuiltIns;
|
import org.jetbrains.kotlin.builtins.KotlinBuiltIns;
|
||||||
import org.jetbrains.kotlin.descriptors.*;
|
import org.jetbrains.kotlin.descriptors.*;
|
||||||
import org.jetbrains.kotlin.descriptors.impl.ModuleDescriptorImpl;
|
import org.jetbrains.kotlin.descriptors.impl.ModuleDescriptorImpl;
|
||||||
|
import org.jetbrains.kotlin.incremental.components.NoLookupLocation;
|
||||||
import org.jetbrains.kotlin.name.FqName;
|
import org.jetbrains.kotlin.name.FqName;
|
||||||
import org.jetbrains.kotlin.name.Name;
|
import org.jetbrains.kotlin.name.Name;
|
||||||
import org.jetbrains.kotlin.resolve.calls.model.ResolvedCall;
|
import org.jetbrains.kotlin.resolve.calls.model.ResolvedCall;
|
||||||
@@ -113,7 +114,7 @@ public class JetExpectedResolveDataUtil {
|
|||||||
@NotNull
|
@NotNull
|
||||||
private static PsiClass findClass(String qualifiedName, Project project) {
|
private static PsiClass findClass(String qualifiedName, Project project) {
|
||||||
ModuleDescriptor module = LazyResolveTestUtil.resolveProject(project);
|
ModuleDescriptor module = LazyResolveTestUtil.resolveProject(project);
|
||||||
ClassDescriptor classDescriptor = DescriptorUtilPackage.resolveTopLevelClass(module, new FqName(qualifiedName));
|
ClassDescriptor classDescriptor = DescriptorUtilPackage.resolveTopLevelClass(module, new FqName(qualifiedName), NoLookupLocation.FROM_TEST);
|
||||||
assertNotNull("Class descriptor wasn't resolved: " + qualifiedName, classDescriptor);
|
assertNotNull("Class descriptor wasn't resolved: " + qualifiedName, classDescriptor);
|
||||||
PsiClass psiClass = (PsiClass) DescriptorToSourceUtils.getSourceFromDescriptor(classDescriptor);
|
PsiClass psiClass = (PsiClass) DescriptorToSourceUtils.getSourceFromDescriptor(classDescriptor);
|
||||||
assertNotNull("Class declaration wasn't found: " + classDescriptor, psiClass);
|
assertNotNull("Class declaration wasn't found: " + classDescriptor, psiClass);
|
||||||
|
|||||||
+2
-1
@@ -19,6 +19,7 @@ package org.jetbrains.kotlin.load.java.lazy.descriptors
|
|||||||
import org.jetbrains.kotlin.descriptors.ClassDescriptor
|
import org.jetbrains.kotlin.descriptors.ClassDescriptor
|
||||||
import org.jetbrains.kotlin.descriptors.ValueParameterDescriptor
|
import org.jetbrains.kotlin.descriptors.ValueParameterDescriptor
|
||||||
import org.jetbrains.kotlin.descriptors.annotations.AnnotationDescriptor
|
import org.jetbrains.kotlin.descriptors.annotations.AnnotationDescriptor
|
||||||
|
import org.jetbrains.kotlin.incremental.components.NoLookupLocation
|
||||||
import org.jetbrains.kotlin.load.java.JvmAnnotationNames.DEFAULT_ANNOTATION_MEMBER_NAME
|
import org.jetbrains.kotlin.load.java.JvmAnnotationNames.DEFAULT_ANNOTATION_MEMBER_NAME
|
||||||
import org.jetbrains.kotlin.load.java.JvmAnnotationNames.isSpecialAnnotation
|
import org.jetbrains.kotlin.load.java.JvmAnnotationNames.isSpecialAnnotation
|
||||||
import org.jetbrains.kotlin.load.java.components.DescriptorResolverUtils
|
import org.jetbrains.kotlin.load.java.components.DescriptorResolverUtils
|
||||||
@@ -141,7 +142,7 @@ class LazyJavaAnnotationDescriptor(
|
|||||||
TypeUsage.MEMBER_SIGNATURE_INVARIANT.toAttributes(allowFlexible = false))
|
TypeUsage.MEMBER_SIGNATURE_INVARIANT.toAttributes(allowFlexible = false))
|
||||||
)
|
)
|
||||||
|
|
||||||
val jlClass = c.module.resolveTopLevelClass(FqName("java.lang.Class")) ?: return null
|
val jlClass = c.module.resolveTopLevelClass(FqName("java.lang.Class"), NoLookupLocation.FOR_NON_TRACKED_SCOPE) ?: return null
|
||||||
|
|
||||||
val arguments = listOf(TypeProjectionImpl(type))
|
val arguments = listOf(TypeProjectionImpl(type))
|
||||||
|
|
||||||
|
|||||||
@@ -35,5 +35,6 @@ public enum class NoLookupLocation : LookupLocation {
|
|||||||
// TODO replace with real location (e.g. FROM_IDE) where it possible
|
// TODO replace with real location (e.g. FROM_IDE) where it possible
|
||||||
WHEN_GET_ALL_DESCRIPTORS,
|
WHEN_GET_ALL_DESCRIPTORS,
|
||||||
WHEN_TYPING,
|
WHEN_TYPING,
|
||||||
WHEN_GET_SUPER_MEMBERS
|
WHEN_GET_SUPER_MEMBERS,
|
||||||
|
FOR_NON_TRACKED_SCOPE
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -23,6 +23,7 @@ import org.jetbrains.kotlin.descriptors.ClassKind.ENUM_ENTRY
|
|||||||
import org.jetbrains.kotlin.descriptors.ClassKind.OBJECT
|
import org.jetbrains.kotlin.descriptors.ClassKind.OBJECT
|
||||||
import org.jetbrains.kotlin.descriptors.annotations.Annotated
|
import org.jetbrains.kotlin.descriptors.annotations.Annotated
|
||||||
import org.jetbrains.kotlin.descriptors.annotations.KotlinRetention
|
import org.jetbrains.kotlin.descriptors.annotations.KotlinRetention
|
||||||
|
import org.jetbrains.kotlin.incremental.components.LookupLocation
|
||||||
import org.jetbrains.kotlin.name.ClassId
|
import org.jetbrains.kotlin.name.ClassId
|
||||||
import org.jetbrains.kotlin.name.FqName
|
import org.jetbrains.kotlin.name.FqName
|
||||||
import org.jetbrains.kotlin.name.FqNameUnsafe
|
import org.jetbrains.kotlin.name.FqNameUnsafe
|
||||||
@@ -54,9 +55,9 @@ public val DeclarationDescriptor.isExtension: Boolean
|
|||||||
public val DeclarationDescriptor.module: ModuleDescriptor
|
public val DeclarationDescriptor.module: ModuleDescriptor
|
||||||
get() = DescriptorUtils.getContainingModule(this)
|
get() = DescriptorUtils.getContainingModule(this)
|
||||||
|
|
||||||
public fun ModuleDescriptor.resolveTopLevelClass(topLevelClassFqName: FqName): ClassDescriptor? {
|
public fun ModuleDescriptor.resolveTopLevelClass(topLevelClassFqName: FqName, location: LookupLocation): ClassDescriptor? {
|
||||||
assert(!topLevelClassFqName.isRoot())
|
assert(!topLevelClassFqName.isRoot())
|
||||||
return getPackage(topLevelClassFqName.parent()).memberScope.getClassifier(topLevelClassFqName.shortName()) as? ClassDescriptor
|
return getPackage(topLevelClassFqName.parent()).memberScope.getClassifier(topLevelClassFqName.shortName(), location) as? ClassDescriptor
|
||||||
}
|
}
|
||||||
|
|
||||||
public val ClassDescriptor.classId: ClassId
|
public val ClassDescriptor.classId: ClassId
|
||||||
|
|||||||
+1
-1
@@ -94,7 +94,7 @@ class TypeInstantiationItems(
|
|||||||
|
|
||||||
val javaClassId = JavaToKotlinClassMap.INSTANCE.mapKotlinToJava(DescriptorUtils.getFqName(classifier))
|
val javaClassId = JavaToKotlinClassMap.INSTANCE.mapKotlinToJava(DescriptorUtils.getFqName(classifier))
|
||||||
if (javaClassId != null) {
|
if (javaClassId != null) {
|
||||||
val javaAnalog = resolutionFacade.moduleDescriptor.resolveTopLevelClass(javaClassId.asSingleFqName())
|
val javaAnalog = resolutionFacade.moduleDescriptor.resolveTopLevelClass(javaClassId.asSingleFqName(), NoLookupLocation.FROM_IDE)
|
||||||
if (javaAnalog != null) {
|
if (javaAnalog != null) {
|
||||||
inheritanceSearchers.addInheritorSearcher(javaAnalog, classifier, typeArgs, tail)
|
inheritanceSearchers.addInheritorSearcher(javaAnalog, classifier, typeArgs, tail)
|
||||||
}
|
}
|
||||||
|
|||||||
+6
-5
@@ -19,7 +19,10 @@ package org.jetbrains.kotlin.idea.quickfix.createFromUsage.callableBuilder
|
|||||||
import com.intellij.refactoring.psi.SearchUtils
|
import com.intellij.refactoring.psi.SearchUtils
|
||||||
import org.jetbrains.kotlin.builtins.KotlinBuiltIns
|
import org.jetbrains.kotlin.builtins.KotlinBuiltIns
|
||||||
import org.jetbrains.kotlin.cfg.pseudocode.*
|
import org.jetbrains.kotlin.cfg.pseudocode.*
|
||||||
import org.jetbrains.kotlin.descriptors.*
|
import org.jetbrains.kotlin.descriptors.DeclarationDescriptor
|
||||||
|
import org.jetbrains.kotlin.descriptors.ModuleDescriptor
|
||||||
|
import org.jetbrains.kotlin.descriptors.TypeParameterDescriptor
|
||||||
|
import org.jetbrains.kotlin.descriptors.VariableDescriptor
|
||||||
import org.jetbrains.kotlin.idea.references.JetSimpleNameReference
|
import org.jetbrains.kotlin.idea.references.JetSimpleNameReference
|
||||||
import org.jetbrains.kotlin.incremental.components.NoLookupLocation
|
import org.jetbrains.kotlin.incremental.components.NoLookupLocation
|
||||||
import org.jetbrains.kotlin.name.FqName
|
import org.jetbrains.kotlin.name.FqName
|
||||||
@@ -35,9 +38,7 @@ import org.jetbrains.kotlin.resolve.scopes.JetScope
|
|||||||
import org.jetbrains.kotlin.types.*
|
import org.jetbrains.kotlin.types.*
|
||||||
import org.jetbrains.kotlin.types.checker.JetTypeChecker
|
import org.jetbrains.kotlin.types.checker.JetTypeChecker
|
||||||
import org.jetbrains.kotlin.types.typeUtil.makeNotNullable
|
import org.jetbrains.kotlin.types.typeUtil.makeNotNullable
|
||||||
import java.util.Collections
|
import java.util.*
|
||||||
import java.util.HashSet
|
|
||||||
import java.util.LinkedHashSet
|
|
||||||
|
|
||||||
private fun JetType.contains(inner: JetType): Boolean {
|
private fun JetType.contains(inner: JetType): Boolean {
|
||||||
return JetTypeChecker.DEFAULT.equalTypes(this, inner) || getArguments().any { inner in it.getType() }
|
return JetTypeChecker.DEFAULT.equalTypes(this, inner) || getArguments().any { inner in it.getType() }
|
||||||
@@ -170,7 +171,7 @@ fun JetExpression.guessTypes(
|
|||||||
parent is JetPropertyDelegate -> {
|
parent is JetPropertyDelegate -> {
|
||||||
val variableDescriptor = context[BindingContext.DECLARATION_TO_DESCRIPTOR, parent.getParent() as JetProperty] as VariableDescriptor
|
val variableDescriptor = context[BindingContext.DECLARATION_TO_DESCRIPTOR, parent.getParent() as JetProperty] as VariableDescriptor
|
||||||
val delegateClassName = if (variableDescriptor.isVar()) "ReadWriteProperty" else "ReadOnlyProperty"
|
val delegateClassName = if (variableDescriptor.isVar()) "ReadWriteProperty" else "ReadOnlyProperty"
|
||||||
val delegateClass = module.resolveTopLevelClass(FqName("kotlin.properties.$delegateClassName"))
|
val delegateClass = module.resolveTopLevelClass(FqName("kotlin.properties.$delegateClassName"), NoLookupLocation.FROM_IDE)
|
||||||
?: return arrayOf(module.builtIns.getAnyType())
|
?: return arrayOf(module.builtIns.getAnyType())
|
||||||
val receiverType = (variableDescriptor.getExtensionReceiverParameter() ?: variableDescriptor.getDispatchReceiverParameter())?.getType()
|
val receiverType = (variableDescriptor.getExtensionReceiverParameter() ?: variableDescriptor.getDispatchReceiverParameter())?.getType()
|
||||||
?: module.builtIns.getNullableNothingType()
|
?: module.builtIns.getNullableNothingType()
|
||||||
|
|||||||
+3
-2
@@ -37,6 +37,7 @@ import org.jetbrains.kotlin.idea.util.approximateFlexibleTypes
|
|||||||
import org.jetbrains.kotlin.idea.util.isAnnotatedNotNull
|
import org.jetbrains.kotlin.idea.util.isAnnotatedNotNull
|
||||||
import org.jetbrains.kotlin.idea.util.isAnnotatedNullable
|
import org.jetbrains.kotlin.idea.util.isAnnotatedNullable
|
||||||
import org.jetbrains.kotlin.idea.util.psi.patternMatching.JetPsiRange
|
import org.jetbrains.kotlin.idea.util.psi.patternMatching.JetPsiRange
|
||||||
|
import org.jetbrains.kotlin.incremental.components.NoLookupLocation
|
||||||
import org.jetbrains.kotlin.name.FqName
|
import org.jetbrains.kotlin.name.FqName
|
||||||
import org.jetbrains.kotlin.psi.*
|
import org.jetbrains.kotlin.psi.*
|
||||||
import org.jetbrains.kotlin.psi.psiUtil.getQualifiedElementSelector
|
import org.jetbrains.kotlin.psi.psiUtil.getQualifiedElementSelector
|
||||||
@@ -208,8 +209,8 @@ abstract class OutputValueBoxer(val outputValues: List<OutputValue>) {
|
|||||||
fun getType(): JetType {
|
fun getType(): JetType {
|
||||||
val boxingClass = when (outputValues.size()) {
|
val boxingClass = when (outputValues.size()) {
|
||||||
1 -> return outputValues.first().valueType
|
1 -> return outputValues.first().valueType
|
||||||
2 -> module.resolveTopLevelClass(FqName("kotlin.Pair"))!!
|
2 -> module.resolveTopLevelClass(FqName("kotlin.Pair"), NoLookupLocation.FROM_IDE)!!
|
||||||
3 -> module.resolveTopLevelClass(FqName("kotlin.Triple"))!!
|
3 -> module.resolveTopLevelClass(FqName("kotlin.Triple"), NoLookupLocation.FROM_IDE)!!
|
||||||
else -> return DEFAULT_RETURN_TYPE
|
else -> return DEFAULT_RETURN_TYPE
|
||||||
}
|
}
|
||||||
return TypeUtils.substituteParameters(boxingClass, outputValueTypes)
|
return TypeUtils.substituteParameters(boxingClass, outputValueTypes)
|
||||||
|
|||||||
+2
-1
@@ -23,6 +23,7 @@ import org.jetbrains.kotlin.descriptors.ClassDescriptor
|
|||||||
import org.jetbrains.kotlin.descriptors.DeclarationDescriptor
|
import org.jetbrains.kotlin.descriptors.DeclarationDescriptor
|
||||||
import org.jetbrains.kotlin.descriptors.ModuleDescriptor
|
import org.jetbrains.kotlin.descriptors.ModuleDescriptor
|
||||||
import org.jetbrains.kotlin.idea.test.JetLightCodeInsightFixtureTestCase
|
import org.jetbrains.kotlin.idea.test.JetLightCodeInsightFixtureTestCase
|
||||||
|
import org.jetbrains.kotlin.incremental.components.NoLookupLocation
|
||||||
import org.jetbrains.kotlin.load.kotlin.PackageClassUtils
|
import org.jetbrains.kotlin.load.kotlin.PackageClassUtils
|
||||||
import org.jetbrains.kotlin.load.kotlin.VirtualFileFinder
|
import org.jetbrains.kotlin.load.kotlin.VirtualFileFinder
|
||||||
import org.jetbrains.kotlin.name.ClassId
|
import org.jetbrains.kotlin.name.ClassId
|
||||||
@@ -63,7 +64,7 @@ public abstract class TextConsistencyBaseTest : JetLightCodeInsightFixtureTestCa
|
|||||||
|
|
||||||
private class ResolverForDecompilerImpl(val module: ModuleDescriptor) : ResolverForDecompiler {
|
private class ResolverForDecompilerImpl(val module: ModuleDescriptor) : ResolverForDecompiler {
|
||||||
override fun resolveTopLevelClass(classId: ClassId): ClassDescriptor? {
|
override fun resolveTopLevelClass(classId: ClassId): ClassDescriptor? {
|
||||||
return module.resolveTopLevelClass(classId.asSingleFqName())
|
return module.resolveTopLevelClass(classId.asSingleFqName(), NoLookupLocation.FROM_TEST)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun resolveDeclarationsInPackage(packageFqName: FqName): Collection<DeclarationDescriptor> {
|
override fun resolveDeclarationsInPackage(packageFqName: FqName): Collection<DeclarationDescriptor> {
|
||||||
|
|||||||
Reference in New Issue
Block a user