Fix incorrect reference target for class literals in some cases
This commit is contained in:
@@ -161,20 +161,17 @@ private fun QualifierReceiver.resolveReferenceTarget(selector: DeclarationDescri
|
||||
return classifier
|
||||
}
|
||||
|
||||
val containingDeclaration = when {
|
||||
val selectorContainer = when {
|
||||
selector is ConstructorDescriptor -> selector.getContainingDeclaration().getContainingDeclaration()
|
||||
else -> selector?.getContainingDeclaration()
|
||||
}
|
||||
|
||||
if (packageView != null && (containingDeclaration is PackageFragmentDescriptor || containingDeclaration is PackageViewDescriptor)
|
||||
&& getFqName(packageView) == getFqName(containingDeclaration)) {
|
||||
if (packageView != null && (selectorContainer is PackageFragmentDescriptor || selectorContainer is PackageViewDescriptor)
|
||||
&& getFqName(packageView) == getFqName(selectorContainer)) {
|
||||
return packageView
|
||||
}
|
||||
|
||||
if (classifier != null && containingDeclaration is ClassDescriptor && classifier == containingDeclaration) {
|
||||
return classifier
|
||||
}
|
||||
if (classifier is ClassDescriptor && classifier.classObjectDescriptor != null) {
|
||||
if (classifier is ClassDescriptor && classifier.classObjectDescriptor == selectorContainer) {
|
||||
return classifier.getClassObjectReferenceTarget()
|
||||
}
|
||||
|
||||
|
||||
@@ -7,7 +7,7 @@ fun test() {
|
||||
MyTrait.<warning descr="'MyTrait.Default' is deprecated. Use A instead">Default</warning>
|
||||
<warning descr="'MyTrait.Default' is deprecated. Use A instead">MyTrait</warning>
|
||||
MyClass.<warning descr="'MyClass.Default' is deprecated. Use A instead">Default</warning>
|
||||
<warning descr="'MyClass.Default' is deprecated. Use A instead">MyClass</warning>.<warning descr="'MyClass.Default' is deprecated. Use A instead">Default</warning>.test
|
||||
MyClass.<warning descr="'MyClass.Default' is deprecated. Use A instead">Default</warning>.test
|
||||
|
||||
a == b
|
||||
}
|
||||
|
||||
@@ -0,0 +1,12 @@
|
||||
package t
|
||||
|
||||
class A {
|
||||
class object Named {
|
||||
}
|
||||
}
|
||||
|
||||
fun f() {
|
||||
<caret>A.Named
|
||||
}
|
||||
|
||||
// REF: (t).A
|
||||
@@ -0,0 +1,13 @@
|
||||
package t
|
||||
|
||||
class A {
|
||||
class object Named {
|
||||
val i: Int
|
||||
}
|
||||
}
|
||||
|
||||
fun f() {
|
||||
<caret>A.Named.i
|
||||
}
|
||||
|
||||
// REF: (t).A
|
||||
@@ -83,6 +83,18 @@ public class ReferenceResolveTestGenerated extends AbstractReferenceResolveTest
|
||||
doTest(fileName);
|
||||
}
|
||||
|
||||
@TestMetadata("ClassObjectClassLiteralReference.kt")
|
||||
public void testClassObjectClassLiteralReference() throws Exception {
|
||||
String fileName = JetTestUtils.navigationMetadata("idea/testData/resolve/references/ClassObjectClassLiteralReference.kt");
|
||||
doTest(fileName);
|
||||
}
|
||||
|
||||
@TestMetadata("ClassObjectClassLiteralReferenceWithField.kt")
|
||||
public void testClassObjectClassLiteralReferenceWithField() throws Exception {
|
||||
String fileName = JetTestUtils.navigationMetadata("idea/testData/resolve/references/ClassObjectClassLiteralReferenceWithField.kt");
|
||||
doTest(fileName);
|
||||
}
|
||||
|
||||
@TestMetadata("ClassReferenceInImport.kt")
|
||||
public void testClassReferenceInImport() throws Exception {
|
||||
String fileName = JetTestUtils.navigationMetadata("idea/testData/resolve/references/ClassReferenceInImport.kt");
|
||||
|
||||
Reference in New Issue
Block a user