Fix logic for searching inner classes in LazyResolveBasedCache.findInPackageFragments()

#KT-14058 Fixed
This commit is contained in:
Dmitry Jemerov
2017-03-08 18:46:37 +01:00
parent 9f2ce3c521
commit cbccb68948
5 changed files with 49 additions and 11 deletions
@@ -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()
+14
View File
@@ -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");