diff --git a/analysis/low-level-api-fir/testData/getOrBuildFir/types/nestedClassFromJava.kt b/analysis/low-level-api-fir/testData/getOrBuildFir/types/nestedClassFromJava.kt
new file mode 100644
index 00000000000..0103132b6ad
--- /dev/null
+++ b/analysis/low-level-api-fir/testData/getOrBuildFir/types/nestedClassFromJava.kt
@@ -0,0 +1,15 @@
+// SKIP_WHEN_OUT_OF_CONTENT_ROOT
+// MODULE: dep
+// FILE: issue/pack/RowIcon.java
+package issue.pack;
+
+public class RowIcon {
+ public static class RClass {}
+}
+
+// MODULE: main(dep)
+// FILE: usage.kt
+package usage
+
+fun testJavaNestedClass(alignment: issue.pack.RowIcon.RClass) {
+}
diff --git a/analysis/low-level-api-fir/testData/getOrBuildFir/types/nestedClassFromJava.txt b/analysis/low-level-api-fir/testData/getOrBuildFir/types/nestedClassFromJava.txt
new file mode 100644
index 00000000000..40faead0404
--- /dev/null
+++ b/analysis/low-level-api-fir/testData/getOrBuildFir/types/nestedClassFromJava.txt
@@ -0,0 +1,13 @@
+KT element: KtTypeReference
+FIR element: FirResolvedTypeRefImpl
+FIR source kind: KtRealSourceElementKind
+
+FIR element rendered:
+R|issue/pack/RowIcon/RClass|
+
+FIR FILE:
+FILE: [ResolvedTo(IMPORTS)] usage.kt
+ package usage
+
+ public final [ResolvedTo(ANNOTATION_ARGUMENTS)] fun testJavaNestedClass([ResolvedTo(ANNOTATION_ARGUMENTS)] alignment: R|issue/pack/RowIcon/RClass|): R|kotlin/Unit| {
+ }
diff --git a/analysis/low-level-api-fir/testData/getOrBuildFir/types/nestedClassFromKotlin.kt b/analysis/low-level-api-fir/testData/getOrBuildFir/types/nestedClassFromKotlin.kt
new file mode 100644
index 00000000000..5f573e3f9c7
--- /dev/null
+++ b/analysis/low-level-api-fir/testData/getOrBuildFir/types/nestedClassFromKotlin.kt
@@ -0,0 +1,15 @@
+// SKIP_WHEN_OUT_OF_CONTENT_ROOT
+// MODULE: dep
+// FILE: issue/pack/RowIcon.kt
+package issue.pack;
+
+class RowIcon {
+ class RClass
+}
+
+// MODULE: main(dep)
+// FILE: usage.kt
+package usage
+
+fun testJavaNestedClass(alignment: issue.pack.RowIcon.RClass) {
+}
diff --git a/analysis/low-level-api-fir/testData/getOrBuildFir/types/nestedClassFromKotlin.txt b/analysis/low-level-api-fir/testData/getOrBuildFir/types/nestedClassFromKotlin.txt
new file mode 100644
index 00000000000..be82a52b047
--- /dev/null
+++ b/analysis/low-level-api-fir/testData/getOrBuildFir/types/nestedClassFromKotlin.txt
@@ -0,0 +1,13 @@
+KT element: KtTypeReference
+FIR element: FirResolvedTypeRefImpl
+FIR source kind: KtRealSourceElementKind
+
+FIR element rendered:
+R|issue/pack/RowIcon.RClass|
+
+FIR FILE:
+FILE: [ResolvedTo(IMPORTS)] usage.kt
+ package usage
+
+ public final [ResolvedTo(ANNOTATION_ARGUMENTS)] fun testJavaNestedClass([ResolvedTo(ANNOTATION_ARGUMENTS)] alignment: R|issue/pack/RowIcon.RClass|): R|kotlin/Unit| {
+ }
diff --git a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/AbstractGetOrBuildFirTest.kt b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/AbstractGetOrBuildFirTest.kt
index e9800d95eec..37a41984dc7 100644
--- a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/AbstractGetOrBuildFirTest.kt
+++ b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/AbstractGetOrBuildFirTest.kt
@@ -1,5 +1,5 @@
/*
- * Copyright 2010-2023 JetBrains s.r.o. and Kotlin Programming Language contributors.
+ * Copyright 2010-2024 JetBrains s.r.o. and Kotlin Programming Language contributors.
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
*/
@@ -7,7 +7,7 @@ package org.jetbrains.kotlin.analysis.low.level.api.fir
import org.jetbrains.kotlin.analysis.low.level.api.fir.api.getOrBuildFir
import org.jetbrains.kotlin.analysis.low.level.api.fir.api.getOrBuildFirFile
-import org.jetbrains.kotlin.analysis.low.level.api.fir.test.base.AbstractLowLevelApiSingleFileTest
+import org.jetbrains.kotlin.analysis.low.level.api.fir.test.base.AbstractLowLevelApiLastModuleFirstFileTest
import org.jetbrains.kotlin.analysis.low.level.api.fir.test.configurators.AnalysisApiFirOutOfContentRootTestConfigurator
import org.jetbrains.kotlin.analysis.low.level.api.fir.test.configurators.AnalysisApiFirScriptTestConfigurator
import org.jetbrains.kotlin.analysis.low.level.api.fir.test.configurators.AnalysisApiFirSourceTestConfigurator
@@ -18,14 +18,13 @@ import org.jetbrains.kotlin.fir.declarations.FirImport
import org.jetbrains.kotlin.fir.renderer.*
import org.jetbrains.kotlin.psi.KtElement
import org.jetbrains.kotlin.psi.KtFile
-import org.jetbrains.kotlin.test.services.TestModuleStructure
+import org.jetbrains.kotlin.test.model.TestModule
import org.jetbrains.kotlin.test.services.TestServices
import org.jetbrains.kotlin.test.services.assertions
-abstract class AbstractGetOrBuildFirTest : AbstractLowLevelApiSingleFileTest() {
- override fun doTestByFileStructure(ktFile: KtFile, moduleStructure: TestModuleStructure, testServices: TestServices) {
- val module = moduleStructure.modules.single()
- val selectedElement = testServices.expressionMarkerProvider.getSelectedElementOfTypeByDirective(ktFile, module) as KtElement
+abstract class AbstractGetOrBuildFirTest : AbstractLowLevelApiLastModuleFirstFileTest() {
+ override fun doTestByFileStructure(ktFile: KtFile, testModule: TestModule, testServices: TestServices) {
+ val selectedElement = testServices.expressionMarkerProvider.getSelectedElementOfTypeByDirective(ktFile, testModule) as KtElement
val actual = resolveWithClearCaches(ktFile) { session ->
renderActualFir(
diff --git a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/OutOfContentRootGetOrBuildFirTestGenerated.java b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/OutOfContentRootGetOrBuildFirTestGenerated.java
index 71f128801b3..9ba0f937429 100644
--- a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/OutOfContentRootGetOrBuildFirTestGenerated.java
+++ b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/OutOfContentRootGetOrBuildFirTestGenerated.java
@@ -1099,6 +1099,18 @@ public class OutOfContentRootGetOrBuildFirTestGenerated extends AbstractOutOfCon
runTest("analysis/low-level-api-fir/testData/getOrBuildFir/types/invalidTypeArgumentsCountLastArgument.kt");
}
+ @Test
+ @TestMetadata("nestedClassFromJava.kt")
+ public void testNestedClassFromJava() throws Exception {
+ runTest("analysis/low-level-api-fir/testData/getOrBuildFir/types/nestedClassFromJava.kt");
+ }
+
+ @Test
+ @TestMetadata("nestedClassFromKotlin.kt")
+ public void testNestedClassFromKotlin() throws Exception {
+ runTest("analysis/low-level-api-fir/testData/getOrBuildFir/types/nestedClassFromKotlin.kt");
+ }
+
@Test
@TestMetadata("nestedClassType.kt")
public void testNestedClassType() throws Exception {
diff --git a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/SourceGetOrBuildFirTestGenerated.java b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/SourceGetOrBuildFirTestGenerated.java
index b833a5ea56b..dcbeb7aed76 100644
--- a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/SourceGetOrBuildFirTestGenerated.java
+++ b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/SourceGetOrBuildFirTestGenerated.java
@@ -1099,6 +1099,18 @@ public class SourceGetOrBuildFirTestGenerated extends AbstractSourceGetOrBuildFi
runTest("analysis/low-level-api-fir/testData/getOrBuildFir/types/invalidTypeArgumentsCountLastArgument.kt");
}
+ @Test
+ @TestMetadata("nestedClassFromJava.kt")
+ public void testNestedClassFromJava() throws Exception {
+ runTest("analysis/low-level-api-fir/testData/getOrBuildFir/types/nestedClassFromJava.kt");
+ }
+
+ @Test
+ @TestMetadata("nestedClassFromKotlin.kt")
+ public void testNestedClassFromKotlin() throws Exception {
+ runTest("analysis/low-level-api-fir/testData/getOrBuildFir/types/nestedClassFromKotlin.kt");
+ }
+
@Test
@TestMetadata("nestedClassType.kt")
public void testNestedClassType() throws Exception {