diff --git a/compiler/fir/resolve/testData/resolve/references/referenceToExtension.kt b/compiler/fir/resolve/testData/resolve/references/referenceToExtension.kt new file mode 100644 index 00000000000..f5853d4520e --- /dev/null +++ b/compiler/fir/resolve/testData/resolve/references/referenceToExtension.kt @@ -0,0 +1,47 @@ +class GenericTest { + class A + + class B { + val memberVal: A = A() + fun memberFun(): A = A() + } + + val B.extensionVal: A + get() = A() + + fun B.extensionFun(): A = A() + + fun test_1() { + val memberValRef = B<*>::memberVal + val memberFunRef = B<*>::memberFun + } + + fun test_2() { + val extensionValRef = B<*>::extensionVal + val extensionFunRef = B<*>::extensionFun + } +} + +class NoGenericTest { + class A + + class B { + val memberVal: A = A() + fun memberFun(): A = A() + } + + val B.extensionVal: A + get() = A() + + fun B.extensionFun(): A = A() + + fun test_1() { + val extensionValRef = B::extensionVal + val extensionFunRef = B::extensionFun + } + + fun test_2() { + val memberValRef = B::memberVal + val memberFunRef = B::memberFun + } +} \ No newline at end of file diff --git a/compiler/fir/resolve/testData/resolve/references/referenceToExtension.txt b/compiler/fir/resolve/testData/resolve/references/referenceToExtension.txt new file mode 100644 index 00000000000..721f6f75023 --- /dev/null +++ b/compiler/fir/resolve/testData/resolve/references/referenceToExtension.txt @@ -0,0 +1,93 @@ +FILE: referenceToExtension.kt + public final class GenericTest : R|kotlin/Any| { + public constructor(): R|GenericTest| { + super() + } + + public final class A : R|kotlin/Any| { + public constructor(): R|GenericTest.A| { + super() + } + + } + + public final class B : R|kotlin/Any| { + public constructor(): R|GenericTest.B| { + super() + } + + public final val memberVal: R|GenericTest.A| = R|/GenericTest.A.A|() + public get(): R|GenericTest.A| + + public final fun memberFun(): R|GenericTest.A| { + ^memberFun R|/GenericTest.A.A|() + } + + } + + public final val R|GenericTest.B|.extensionVal: R|GenericTest.A| + public get(): R|GenericTest.A| { + ^ R|/GenericTest.A.A|() + } + + public final fun R|GenericTest.B|.extensionFun(): R|GenericTest.A| { + ^extensionFun R|/GenericTest.A.A|() + } + + public final fun test_1(): R|kotlin/Unit| { + lval memberValRef: R|kotlin/reflect/KProperty1, GenericTest.A>| = Q|GenericTest.B|::R|FakeOverride|>| + lval memberFunRef: R|kotlin/reflect/KFunction1, GenericTest.A>| = Q|GenericTest.B|::R|FakeOverride|>| + } + + public final fun test_2(): R|kotlin/Unit| { + lval extensionValRef: = Q|GenericTest.B|::# + lval extensionFunRef: = Q|GenericTest.B|::# + } + + } + public final class NoGenericTest : R|kotlin/Any| { + public constructor(): R|NoGenericTest| { + super() + } + + public final class A : R|kotlin/Any| { + public constructor(): R|NoGenericTest.A| { + super() + } + + } + + public final class B : R|kotlin/Any| { + public constructor(): R|NoGenericTest.B| { + super() + } + + public final val memberVal: R|NoGenericTest.A| = R|/NoGenericTest.A.A|() + public get(): R|NoGenericTest.A| + + public final fun memberFun(): R|NoGenericTest.A| { + ^memberFun R|/NoGenericTest.A.A|() + } + + } + + public final val R|NoGenericTest.B|.extensionVal: R|NoGenericTest.A| + public get(): R|NoGenericTest.A| { + ^ R|/NoGenericTest.A.A|() + } + + public final fun R|NoGenericTest.B|.extensionFun(): R|NoGenericTest.A| { + ^extensionFun R|/NoGenericTest.A.A|() + } + + public final fun test_1(): R|kotlin/Unit| { + lval extensionValRef: = Q|NoGenericTest.B|::# + lval extensionFunRef: = Q|NoGenericTest.B|::# + } + + public final fun test_2(): R|kotlin/Unit| { + lval memberValRef: R|kotlin/reflect/KProperty1| = Q|NoGenericTest.B|::R|/NoGenericTest.B.memberVal| + lval memberFunRef: R|kotlin/reflect/KFunction1| = Q|NoGenericTest.B|::R|/NoGenericTest.B.memberFun| + } + + } diff --git a/compiler/fir/resolve/tests/org/jetbrains/kotlin/fir/FirDiagnosticsTestGenerated.java b/compiler/fir/resolve/tests/org/jetbrains/kotlin/fir/FirDiagnosticsTestGenerated.java index 110ccafef41..dce58886b6d 100644 --- a/compiler/fir/resolve/tests/org/jetbrains/kotlin/fir/FirDiagnosticsTestGenerated.java +++ b/compiler/fir/resolve/tests/org/jetbrains/kotlin/fir/FirDiagnosticsTestGenerated.java @@ -1460,6 +1460,11 @@ public class FirDiagnosticsTestGenerated extends AbstractFirDiagnosticsTest { KotlinTestUtils.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/fir/resolve/testData/resolve/references"), Pattern.compile("^([^.]+)\\.kt$"), null, true); } + @TestMetadata("referenceToExtension.kt") + public void testReferenceToExtension() throws Exception { + runTest("compiler/fir/resolve/testData/resolve/references/referenceToExtension.kt"); + } + @TestMetadata("simple.kt") public void testSimple() throws Exception { runTest("compiler/fir/resolve/testData/resolve/references/simple.kt"); diff --git a/compiler/fir/resolve/tests/org/jetbrains/kotlin/fir/FirDiagnosticsWithLightTreeTestGenerated.java b/compiler/fir/resolve/tests/org/jetbrains/kotlin/fir/FirDiagnosticsWithLightTreeTestGenerated.java index a7bf136fadd..37488466d58 100644 --- a/compiler/fir/resolve/tests/org/jetbrains/kotlin/fir/FirDiagnosticsWithLightTreeTestGenerated.java +++ b/compiler/fir/resolve/tests/org/jetbrains/kotlin/fir/FirDiagnosticsWithLightTreeTestGenerated.java @@ -1460,6 +1460,11 @@ public class FirDiagnosticsWithLightTreeTestGenerated extends AbstractFirDiagnos KotlinTestUtils.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/fir/resolve/testData/resolve/references"), Pattern.compile("^([^.]+)\\.kt$"), null, true); } + @TestMetadata("referenceToExtension.kt") + public void testReferenceToExtension() throws Exception { + runTest("compiler/fir/resolve/testData/resolve/references/referenceToExtension.kt"); + } + @TestMetadata("simple.kt") public void testSimple() throws Exception { runTest("compiler/fir/resolve/testData/resolve/references/simple.kt");