diff --git a/analysis/analysis-api-fe10/tests-gen/org/jetbrains/kotlin/analysis/api/fe10/test/cases/generated/cases/references/Fe10IdeNormalAnalysisSourceModuleReferenceResolveTestGenerated.java b/analysis/analysis-api-fe10/tests-gen/org/jetbrains/kotlin/analysis/api/fe10/test/cases/generated/cases/references/Fe10IdeNormalAnalysisSourceModuleReferenceResolveTestGenerated.java index e42502413d0..379eb5a4871 100644 --- a/analysis/analysis-api-fe10/tests-gen/org/jetbrains/kotlin/analysis/api/fe10/test/cases/generated/cases/references/Fe10IdeNormalAnalysisSourceModuleReferenceResolveTestGenerated.java +++ b/analysis/analysis-api-fe10/tests-gen/org/jetbrains/kotlin/analysis/api/fe10/test/cases/generated/cases/references/Fe10IdeNormalAnalysisSourceModuleReferenceResolveTestGenerated.java @@ -112,6 +112,18 @@ public class Fe10IdeNormalAnalysisSourceModuleReferenceResolveTestGenerated exte runTest("analysis/analysis-api/testData/referenceResolve/ClassReferenceInImport.kt"); } + @Test + @TestMetadata("CompanionObjectWithName1.kt") + public void testCompanionObjectWithName1() throws Exception { + runTest("analysis/analysis-api/testData/referenceResolve/CompanionObjectWithName1.kt"); + } + + @Test + @TestMetadata("CompanionObjectWithName2.kt") + public void testCompanionObjectWithName2() throws Exception { + runTest("analysis/analysis-api/testData/referenceResolve/CompanionObjectWithName2.kt"); + } + @Test @TestMetadata("CtrlClickResolve.kt") public void testCtrlClickResolve() throws Exception { diff --git a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/references/FirReferenceResolveHelper.kt b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/references/FirReferenceResolveHelper.kt index 804675f6590..b81e8440f42 100644 --- a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/references/FirReferenceResolveHelper.kt +++ b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/references/FirReferenceResolveHelper.kt @@ -517,12 +517,12 @@ internal object FirReferenceResolveHelper { // If we're looking for the deepest qualifier, then just resolve to the companion if (expression === deepestQualifier) return referencedSymbolsByFir - if (deepestQualifier?.getReferencedName() != referencedClass.classId.shortClassName.asString()) { - // Remove the last companion name part if the qualified access does not contain it. - // This is needed because the companion name part is optional. + if (fir.resolvedToCompanionObject) { + // this flag is true only when companion object is resolved through its containing class name, + // so we want to drop companion object own name from the classId referencedClass.classId.outerClassId ?: return referencedSymbolsByFir } else { - referencedClass.classId + referencedClass.classId // ?: return referencedSymbolsByFir } } else { referencedClass.classId diff --git a/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/references/FirIdeDependentAnalysisSourceModuleReferenceResolveTestGenerated.java b/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/references/FirIdeDependentAnalysisSourceModuleReferenceResolveTestGenerated.java index 18e138b9b8c..c793c0a3099 100644 --- a/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/references/FirIdeDependentAnalysisSourceModuleReferenceResolveTestGenerated.java +++ b/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/references/FirIdeDependentAnalysisSourceModuleReferenceResolveTestGenerated.java @@ -112,6 +112,18 @@ public class FirIdeDependentAnalysisSourceModuleReferenceResolveTestGenerated ex runTest("analysis/analysis-api/testData/referenceResolve/ClassReferenceInImport.kt"); } + @Test + @TestMetadata("CompanionObjectWithName1.kt") + public void testCompanionObjectWithName1() throws Exception { + runTest("analysis/analysis-api/testData/referenceResolve/CompanionObjectWithName1.kt"); + } + + @Test + @TestMetadata("CompanionObjectWithName2.kt") + public void testCompanionObjectWithName2() throws Exception { + runTest("analysis/analysis-api/testData/referenceResolve/CompanionObjectWithName2.kt"); + } + @Test @TestMetadata("CtrlClickResolve.kt") public void testCtrlClickResolve() throws Exception { diff --git a/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/references/FirIdeNormalAnalysisLibrarySourceModuleReferenceResolveTestGenerated.java b/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/references/FirIdeNormalAnalysisLibrarySourceModuleReferenceResolveTestGenerated.java index f8c5726f00b..9b41a4a6e87 100644 --- a/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/references/FirIdeNormalAnalysisLibrarySourceModuleReferenceResolveTestGenerated.java +++ b/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/references/FirIdeNormalAnalysisLibrarySourceModuleReferenceResolveTestGenerated.java @@ -112,6 +112,18 @@ public class FirIdeNormalAnalysisLibrarySourceModuleReferenceResolveTestGenerate runTest("analysis/analysis-api/testData/referenceResolve/ClassReferenceInImport.kt"); } + @Test + @TestMetadata("CompanionObjectWithName1.kt") + public void testCompanionObjectWithName1() throws Exception { + runTest("analysis/analysis-api/testData/referenceResolve/CompanionObjectWithName1.kt"); + } + + @Test + @TestMetadata("CompanionObjectWithName2.kt") + public void testCompanionObjectWithName2() throws Exception { + runTest("analysis/analysis-api/testData/referenceResolve/CompanionObjectWithName2.kt"); + } + @Test @TestMetadata("CtrlClickResolve.kt") public void testCtrlClickResolve() throws Exception { diff --git a/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/references/FirIdeNormalAnalysisSourceModuleReferenceResolveTestGenerated.java b/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/references/FirIdeNormalAnalysisSourceModuleReferenceResolveTestGenerated.java index 3f142670341..d6f90b03d9e 100644 --- a/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/references/FirIdeNormalAnalysisSourceModuleReferenceResolveTestGenerated.java +++ b/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/references/FirIdeNormalAnalysisSourceModuleReferenceResolveTestGenerated.java @@ -112,6 +112,18 @@ public class FirIdeNormalAnalysisSourceModuleReferenceResolveTestGenerated exten runTest("analysis/analysis-api/testData/referenceResolve/ClassReferenceInImport.kt"); } + @Test + @TestMetadata("CompanionObjectWithName1.kt") + public void testCompanionObjectWithName1() throws Exception { + runTest("analysis/analysis-api/testData/referenceResolve/CompanionObjectWithName1.kt"); + } + + @Test + @TestMetadata("CompanionObjectWithName2.kt") + public void testCompanionObjectWithName2() throws Exception { + runTest("analysis/analysis-api/testData/referenceResolve/CompanionObjectWithName2.kt"); + } + @Test @TestMetadata("CtrlClickResolve.kt") public void testCtrlClickResolve() throws Exception { diff --git a/analysis/analysis-api-standalone/tests-gen/org/jetbrains/kotlin/analysis/api/standalone/fir/test/cases/generated/cases/references/FirStandaloneNormalAnalysisSourceModuleReferenceResolveTestGenerated.java b/analysis/analysis-api-standalone/tests-gen/org/jetbrains/kotlin/analysis/api/standalone/fir/test/cases/generated/cases/references/FirStandaloneNormalAnalysisSourceModuleReferenceResolveTestGenerated.java index 2be12a3fd68..a983b483d8b 100644 --- a/analysis/analysis-api-standalone/tests-gen/org/jetbrains/kotlin/analysis/api/standalone/fir/test/cases/generated/cases/references/FirStandaloneNormalAnalysisSourceModuleReferenceResolveTestGenerated.java +++ b/analysis/analysis-api-standalone/tests-gen/org/jetbrains/kotlin/analysis/api/standalone/fir/test/cases/generated/cases/references/FirStandaloneNormalAnalysisSourceModuleReferenceResolveTestGenerated.java @@ -112,6 +112,18 @@ public class FirStandaloneNormalAnalysisSourceModuleReferenceResolveTestGenerate runTest("analysis/analysis-api/testData/referenceResolve/ClassReferenceInImport.kt"); } + @Test + @TestMetadata("CompanionObjectWithName1.kt") + public void testCompanionObjectWithName1() throws Exception { + runTest("analysis/analysis-api/testData/referenceResolve/CompanionObjectWithName1.kt"); + } + + @Test + @TestMetadata("CompanionObjectWithName2.kt") + public void testCompanionObjectWithName2() throws Exception { + runTest("analysis/analysis-api/testData/referenceResolve/CompanionObjectWithName2.kt"); + } + @Test @TestMetadata("CtrlClickResolve.kt") public void testCtrlClickResolve() throws Exception { diff --git a/analysis/analysis-api/testData/referenceResolve/CompanionObjectWithName1.kt b/analysis/analysis-api/testData/referenceResolve/CompanionObjectWithName1.kt new file mode 100644 index 00000000000..4674b740f58 --- /dev/null +++ b/analysis/analysis-api/testData/referenceResolve/CompanionObjectWithName1.kt @@ -0,0 +1,11 @@ +package my.sample + +class Inner { + fun a() { + my.sample.Inner.say() + } + + companion object Inner { + fun say() {} + } +} diff --git a/analysis/analysis-api/testData/referenceResolve/CompanionObjectWithName1.txt b/analysis/analysis-api/testData/referenceResolve/CompanionObjectWithName1.txt new file mode 100644 index 00000000000..8245f833d76 --- /dev/null +++ b/analysis/analysis-api/testData/referenceResolve/CompanionObjectWithName1.txt @@ -0,0 +1,2 @@ +Resolved to: +0: (in my.sample.Inner) companion object Inner diff --git a/analysis/analysis-api/testData/referenceResolve/CompanionObjectWithName2.kt b/analysis/analysis-api/testData/referenceResolve/CompanionObjectWithName2.kt new file mode 100644 index 00000000000..7bfb90528ff --- /dev/null +++ b/analysis/analysis-api/testData/referenceResolve/CompanionObjectWithName2.kt @@ -0,0 +1,11 @@ +package my.sample + +class Inner { + fun a() { + my.sample.Inner.say() + } + + companion object Inner { + fun say() {} + } +} diff --git a/analysis/analysis-api/testData/referenceResolve/CompanionObjectWithName2.txt b/analysis/analysis-api/testData/referenceResolve/CompanionObjectWithName2.txt new file mode 100644 index 00000000000..a4b007472a5 --- /dev/null +++ b/analysis/analysis-api/testData/referenceResolve/CompanionObjectWithName2.txt @@ -0,0 +1,2 @@ +Resolved to: +0: package my.sample