Fix logic for searching inner classes in LazyResolveBasedCache.findInPackageFragments()
#KT-14058 Fixed
This commit is contained in:
+19
-11
@@ -16,17 +16,25 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.load.java.components
|
package org.jetbrains.kotlin.load.java.components
|
||||||
|
|
||||||
import org.jetbrains.kotlin.descriptors.*
|
import org.jetbrains.kotlin.descriptors.ClassDescriptor
|
||||||
import org.jetbrains.kotlin.load.java.structure.*
|
import org.jetbrains.kotlin.descriptors.ConstructorDescriptor
|
||||||
import org.jetbrains.kotlin.load.java.structure.impl.*
|
import org.jetbrains.kotlin.descriptors.PropertyDescriptor
|
||||||
import org.jetbrains.kotlin.resolve.lazy.ResolveSession
|
import org.jetbrains.kotlin.descriptors.SimpleFunctionDescriptor
|
||||||
import org.jetbrains.kotlin.resolve.lazy.ResolveSessionUtils
|
import org.jetbrains.kotlin.load.java.structure.JavaClass
|
||||||
|
import org.jetbrains.kotlin.load.java.structure.JavaElement
|
||||||
|
import org.jetbrains.kotlin.load.java.structure.JavaField
|
||||||
|
import org.jetbrains.kotlin.load.java.structure.JavaMethod
|
||||||
|
import org.jetbrains.kotlin.load.java.structure.impl.JavaClassImpl
|
||||||
|
import org.jetbrains.kotlin.load.java.structure.impl.JavaElementImpl
|
||||||
|
import org.jetbrains.kotlin.load.java.structure.impl.JavaFieldImpl
|
||||||
|
import org.jetbrains.kotlin.load.java.structure.impl.JavaMethodImpl
|
||||||
import org.jetbrains.kotlin.name.FqName
|
import org.jetbrains.kotlin.name.FqName
|
||||||
import kotlin.properties.Delegates
|
|
||||||
import org.jetbrains.kotlin.name.tail
|
import org.jetbrains.kotlin.name.tail
|
||||||
import org.jetbrains.kotlin.resolve.BindingContext.*
|
import org.jetbrains.kotlin.resolve.BindingContext.*
|
||||||
import org.jetbrains.kotlin.resolve.BindingTrace
|
|
||||||
import org.jetbrains.kotlin.resolve.BindingContextUtils
|
import org.jetbrains.kotlin.resolve.BindingContextUtils
|
||||||
|
import org.jetbrains.kotlin.resolve.BindingTrace
|
||||||
|
import org.jetbrains.kotlin.resolve.lazy.ResolveSession
|
||||||
|
import org.jetbrains.kotlin.resolve.lazy.ResolveSessionUtils
|
||||||
|
|
||||||
class LazyResolveBasedCache(private val resolveSession: ResolveSession) : JavaResolverCache {
|
class LazyResolveBasedCache(private val resolveSession: ResolveSession) : JavaResolverCache {
|
||||||
|
|
||||||
@@ -57,10 +65,10 @@ class LazyResolveBasedCache(private val resolveSession: ResolveSession) : JavaRe
|
|||||||
|
|
||||||
while (true) {
|
while (true) {
|
||||||
val packageDescriptor = resolveSession.getPackageFragment(fqName)
|
val packageDescriptor = resolveSession.getPackageFragment(fqName)
|
||||||
if (packageDescriptor == null) break
|
if (packageDescriptor != null) {
|
||||||
|
val result = ResolveSessionUtils.findClassByRelativePath(packageDescriptor.getMemberScope(), fullFqName.tail(fqName))
|
||||||
val result = ResolveSessionUtils.findClassByRelativePath(packageDescriptor.getMemberScope(), fullFqName.tail(fqName))
|
if (result != null) return result
|
||||||
if (result != null) return result
|
}
|
||||||
|
|
||||||
if (fqName.isRoot) break
|
if (fqName.isRoot) break
|
||||||
fqName = fqName.parent()
|
fqName = fqName.parent()
|
||||||
|
|||||||
@@ -0,0 +1,14 @@
|
|||||||
|
package dependencies;
|
||||||
|
|
||||||
|
import sealedClass.Foo;
|
||||||
|
|
||||||
|
public class A {
|
||||||
|
public static class B<T> {
|
||||||
|
}
|
||||||
|
|
||||||
|
public static B<Foo.Bar> myList = null;
|
||||||
|
|
||||||
|
public static <T> T bar(B<T> tb) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
package sealedClass
|
||||||
|
|
||||||
|
sealed class Foo {
|
||||||
|
class Bar : Foo()
|
||||||
|
}
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
package dependencies
|
||||||
|
|
||||||
|
fun test() {
|
||||||
|
val <warning>bar</warning> = A.bar(A.myList) // MISSING_DEPENDENCY_CLASS foo.Foo.Bar
|
||||||
|
}
|
||||||
@@ -60,6 +60,12 @@ public class MultiFileHighlightingTestGenerated extends AbstractMultiFileHighlig
|
|||||||
doTest(fileName);
|
doTest(fileName);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestMetadata("missingDependencyClass.kt")
|
||||||
|
public void testMissingDependencyClass() throws Exception {
|
||||||
|
String fileName = KotlinTestUtils.navigationMetadata("idea/testData/multiFileHighlighting/missingDependencyClass.kt");
|
||||||
|
doTest(fileName);
|
||||||
|
}
|
||||||
|
|
||||||
@TestMetadata("referencesFunWithUnspecifiedType.kt")
|
@TestMetadata("referencesFunWithUnspecifiedType.kt")
|
||||||
public void testReferencesFunWithUnspecifiedType() throws Exception {
|
public void testReferencesFunWithUnspecifiedType() throws Exception {
|
||||||
String fileName = KotlinTestUtils.navigationMetadata("idea/testData/multiFileHighlighting/referencesFunWithUnspecifiedType.kt");
|
String fileName = KotlinTestUtils.navigationMetadata("idea/testData/multiFileHighlighting/referencesFunWithUnspecifiedType.kt");
|
||||||
|
|||||||
Reference in New Issue
Block a user