From 2421d3cdf163d5b007ecb38a8ddda0b37755c90a Mon Sep 17 00:00:00 2001 From: Dmitrii Gridin Date: Mon, 4 Sep 2023 16:55:42 +0200 Subject: [PATCH] [LL FIR] ClassId: add more tests ^KTIJ-26848 ^KTIJ-26896 ^KTIJ-26902 --- .../test/framework/utils/commonTestUtils.kt | 25 ++++++- .../testdata/classId/classWithMembers.kts | 2 + .../classId/classWithMembersWithPackage.kts | 1 + .../testdata/classId/enum.kt | 10 +++ .../testdata/classId/enum.kts | 12 +++ .../testdata/classId/enumEntry.kt | 14 ++++ .../testdata/classId/enumEntry.kts | 14 ++++ .../testdata/classId/namelessClasses.kt | 19 +++++ .../testdata/classId/namelessClasses.kts | 18 +++++ .../classId/namelessInsideNamelessClasses.kt | 15 ++++ .../classId/namelessInsideNamelessClasses.kts | 15 ++++ .../api/fir/AbstractClassIdConsistencyTest.kt | 51 +++++++++++++ .../low/level/api/fir/AbstractClassIdTest.kt | 9 ++- ...ScriptClassIdConsistencyTestGenerated.java | 62 ++++++++++++++++ .../api/fir/ScriptClassIdTestGenerated.java | 24 ++++++ ...SourceClassIdConsistencyTestGenerated.java | 74 +++++++++++++++++++ .../api/fir/SourceClassIdTestGenerated.java | 24 ++++++ .../tests/analysis/api/firLowLevel.kt | 8 ++ 18 files changed, 395 insertions(+), 2 deletions(-) create mode 100644 analysis/low-level-api-fir/testdata/classId/enum.kt create mode 100644 analysis/low-level-api-fir/testdata/classId/enum.kts create mode 100644 analysis/low-level-api-fir/testdata/classId/enumEntry.kt create mode 100644 analysis/low-level-api-fir/testdata/classId/enumEntry.kts create mode 100644 analysis/low-level-api-fir/testdata/classId/namelessClasses.kt create mode 100644 analysis/low-level-api-fir/testdata/classId/namelessClasses.kts create mode 100644 analysis/low-level-api-fir/testdata/classId/namelessInsideNamelessClasses.kt create mode 100644 analysis/low-level-api-fir/testdata/classId/namelessInsideNamelessClasses.kts create mode 100644 analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/AbstractClassIdConsistencyTest.kt create mode 100644 analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/ScriptClassIdConsistencyTestGenerated.java create mode 100644 analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/SourceClassIdConsistencyTestGenerated.java diff --git a/analysis/analysis-test-framework/tests/org/jetbrains/kotlin/analysis/test/framework/utils/commonTestUtils.kt b/analysis/analysis-test-framework/tests/org/jetbrains/kotlin/analysis/test/framework/utils/commonTestUtils.kt index 462f9e5439b..572ccfb50a6 100644 --- a/analysis/analysis-test-framework/tests/org/jetbrains/kotlin/analysis/test/framework/utils/commonTestUtils.kt +++ b/analysis/analysis-test-framework/tests/org/jetbrains/kotlin/analysis/test/framework/utils/commonTestUtils.kt @@ -1,5 +1,5 @@ /* - * Copyright 2010-2022 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Copyright 2010-2023 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. */ @@ -14,6 +14,8 @@ import org.jetbrains.kotlin.analysis.api.symbols.* import org.jetbrains.kotlin.diagnostics.PsiDiagnosticUtils.offsetToLineAndColumn import org.jetbrains.kotlin.idea.references.KtReference import org.jetbrains.kotlin.psi.* +import org.jetbrains.kotlin.test.directives.model.Directive +import org.jetbrains.kotlin.test.directives.model.RegisteredDirectives inline fun runReadAction(crossinline runnable: () -> T): T { return ApplicationManager.getApplication().runReadAction(Computable { runnable() }) @@ -53,3 +55,24 @@ fun PsiReference.unwrapMultiReferences(): List = when (this) { is PsiMultiReference -> references.flatMap { it.unwrapMultiReferences() } else -> error("Unexpected reference $this") } + +/** + * [AfterAnalysisChecker][org.jetbrains.kotlin.test.model.AfterAnalysisChecker] should be the preferred option + */ +fun RegisteredDirectives.ignoreExceptionIfIgnoreDirectivePresent(ignoreDirective: Directive, action: () -> Unit) { + var exception: Throwable? = null + try { + action() + } catch (e: Throwable) { + exception = e + } + + if (ignoreDirective in this) { + if (exception != null) return + error("$ignoreDirective is redundant") + } + + if (exception != null) { + throw exception + } +} diff --git a/analysis/low-level-api-fir/testdata/classId/classWithMembers.kts b/analysis/low-level-api-fir/testdata/classId/classWithMembers.kts index 2729a60fc24..cc5d5dff5e1 100644 --- a/analysis/low-level-api-fir/testdata/classId/classWithMembers.kts +++ b/analysis/low-level-api-fir/testdata/classId/classWithMembers.kts @@ -24,3 +24,5 @@ foo { /* ClassId: null */class E } + +// IGNORE_CONSISTENCY_CHECK: KTIJ-26902 \ No newline at end of file diff --git a/analysis/low-level-api-fir/testdata/classId/classWithMembersWithPackage.kts b/analysis/low-level-api-fir/testdata/classId/classWithMembersWithPackage.kts index a0b802e7a60..ea4352f8145 100644 --- a/analysis/low-level-api-fir/testdata/classId/classWithMembersWithPackage.kts +++ b/analysis/low-level-api-fir/testdata/classId/classWithMembersWithPackage.kts @@ -1,3 +1,4 @@ +// IGNORE_CONSISTENCY_CHECK: KTIJ-26902 package one.two /* ClassId: one/two/TopLevelObject */object TopLevelObject diff --git a/analysis/low-level-api-fir/testdata/classId/enum.kt b/analysis/low-level-api-fir/testdata/classId/enum.kt new file mode 100644 index 00000000000..70d43ca49ac --- /dev/null +++ b/analysis/low-level-api-fir/testdata/classId/enum.kt @@ -0,0 +1,10 @@ +package one + +/* ClassId: one/MyEnum */enum class MyEnum { + ; + + /* ClassId: one/MyEnum.InsideEnum */class InsideEnum + /* ClassId: one/MyEnum.ObjectInsideEnum */object ObjectInsideEnum { + /* ClassId: one/MyEnum.ObjectInsideEnum.Nested */typealias Nested + } +} diff --git a/analysis/low-level-api-fir/testdata/classId/enum.kts b/analysis/low-level-api-fir/testdata/classId/enum.kts new file mode 100644 index 00000000000..c7e77418e96 --- /dev/null +++ b/analysis/low-level-api-fir/testdata/classId/enum.kts @@ -0,0 +1,12 @@ +package one + +/* ClassId: one/MyEnum */enum class MyEnum { + ; + + /* ClassId: one/MyEnum.InsideEnum */class InsideEnum + /* ClassId: one/MyEnum.ObjectInsideEnum */object ObjectInsideEnum { + /* ClassId: one/MyEnum.ObjectInsideEnum.Nested */typealias Nested + } +} + +// IGNORE_CONSISTENCY_CHECK: KTIJ-26902 diff --git a/analysis/low-level-api-fir/testdata/classId/enumEntry.kt b/analysis/low-level-api-fir/testdata/classId/enumEntry.kt new file mode 100644 index 00000000000..c3e56769fc2 --- /dev/null +++ b/analysis/low-level-api-fir/testdata/classId/enumEntry.kt @@ -0,0 +1,14 @@ +package one + +/* ClassId: one/MyEnum */enum class MyEnum { + /* ClassId: null */Entry { + fun foo() = Unit + /* ClassId: null */class ClassInsideEntry + }, + /* ClassId: null */Entry2, + /* ClassId: null */Entry3 { + + } +} + +// IGNORE_CONSISTENCY_CHECK: KtEnumEntry have FqName, but doesn't have ClassId \ No newline at end of file diff --git a/analysis/low-level-api-fir/testdata/classId/enumEntry.kts b/analysis/low-level-api-fir/testdata/classId/enumEntry.kts new file mode 100644 index 00000000000..e3bdab26dc5 --- /dev/null +++ b/analysis/low-level-api-fir/testdata/classId/enumEntry.kts @@ -0,0 +1,14 @@ +package one + +/* ClassId: one/MyEnum */enum class MyEnum { + /* ClassId: null */Entry { + fun foo() = Unit + /* ClassId: null */class ClassInsideEntry + }, + /* ClassId: null */Entry2, + /* ClassId: null */Entry3 { + + } +} + +// IGNORE_CONSISTENCY_CHECK: KtEnumEntry have FqName, but doesn't have ClassId diff --git a/analysis/low-level-api-fir/testdata/classId/namelessClasses.kt b/analysis/low-level-api-fir/testdata/classId/namelessClasses.kt new file mode 100644 index 00000000000..610b352dd5a --- /dev/null +++ b/analysis/low-level-api-fir/testdata/classId/namelessClasses.kt @@ -0,0 +1,19 @@ +package one.two + +/* ClassId: one/two/ */class +/* ClassId: one/two/ */object +/* ClassId: one/two/ */typealias + +/* ClassId: one/two/A */class A { + /* ClassId: one/two/A. */class + /* ClassId: one/two/A. */object + /* ClassId: one/two/A. */typealias +} + +/* ClassId: one/two/B */object B { + /* ClassId: one/two/B. */class + /* ClassId: one/two/B. */object + /* ClassId: one/two/B. */typealias +} + +// IGNORE_CONSISTENCY_CHECK: KTIJ-26848 diff --git a/analysis/low-level-api-fir/testdata/classId/namelessClasses.kts b/analysis/low-level-api-fir/testdata/classId/namelessClasses.kts new file mode 100644 index 00000000000..fc89cbc1314 --- /dev/null +++ b/analysis/low-level-api-fir/testdata/classId/namelessClasses.kts @@ -0,0 +1,18 @@ +// IGNORE_CONSISTENCY_CHECK: KTIJ-26902 +package one.two + +/* ClassId: one/two/ */class +/* ClassId: one/two/ */object +/* ClassId: one/two/ */typealias + +/* ClassId: one/two/A */class A { + /* ClassId: one/two/A. */class + /* ClassId: one/two/A. */object + /* ClassId: one/two/A. */typealias +} + +/* ClassId: one/two/B */object B { + /* ClassId: one/two/B. */class + /* ClassId: one/two/B. */object + /* ClassId: one/two/B. */typealias +} diff --git a/analysis/low-level-api-fir/testdata/classId/namelessInsideNamelessClasses.kt b/analysis/low-level-api-fir/testdata/classId/namelessInsideNamelessClasses.kt new file mode 100644 index 00000000000..12e99702966 --- /dev/null +++ b/analysis/low-level-api-fir/testdata/classId/namelessInsideNamelessClasses.kt @@ -0,0 +1,15 @@ +package one.two + +/* ClassId: one/two/ */class { + /* ClassId: one/two/. */class + /* ClassId: one/two/. */object + /* ClassId: one/two/. */typealias +} + +/* ClassId: one/two/ */object { + /* ClassId: one/two/. */class + /* ClassId: one/two/. */object + /* ClassId: one/two/. */typealias +} + +// IGNORE_CONSISTENCY_CHECK: KTIJ-26896 diff --git a/analysis/low-level-api-fir/testdata/classId/namelessInsideNamelessClasses.kts b/analysis/low-level-api-fir/testdata/classId/namelessInsideNamelessClasses.kts new file mode 100644 index 00000000000..059bf1745be --- /dev/null +++ b/analysis/low-level-api-fir/testdata/classId/namelessInsideNamelessClasses.kts @@ -0,0 +1,15 @@ +package one.two + +/* ClassId: one/two/ */class { + /* ClassId: one/two/. */class + /* ClassId: one/two/. */object + /* ClassId: one/two/. */typealias +} + +/* ClassId: null */object { + /* ClassId: null */class + /* ClassId: null */object + /* ClassId: null */typealias +} + +// IGNORE_CONSISTENCY_CHECK: KTIJ-26896 diff --git a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/AbstractClassIdConsistencyTest.kt b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/AbstractClassIdConsistencyTest.kt new file mode 100644 index 00000000000..f1384f6f0b8 --- /dev/null +++ b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/AbstractClassIdConsistencyTest.kt @@ -0,0 +1,51 @@ +/* + * Copyright 2010-2023 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. + */ + +package org.jetbrains.kotlin.analysis.low.level.api.fir + +import org.jetbrains.kotlin.analysis.low.level.api.fir.AbstractClassIdConsistencyTest.Directives.IGNORE_CONSISTENCY_CHECK +import org.jetbrains.kotlin.analysis.low.level.api.fir.test.base.AbstractLowLevelApiSingleFileTest +import org.jetbrains.kotlin.analysis.low.level.api.fir.test.configurators.AnalysisApiFirScriptTestConfigurator +import org.jetbrains.kotlin.analysis.low.level.api.fir.test.configurators.AnalysisApiFirSourceTestConfigurator +import org.jetbrains.kotlin.analysis.test.framework.test.configurators.AnalysisApiTestConfigurator +import org.jetbrains.kotlin.analysis.test.framework.utils.ignoreExceptionIfIgnoreDirectivePresent +import org.jetbrains.kotlin.psi.KtClassLikeDeclaration +import org.jetbrains.kotlin.psi.KtFile +import org.jetbrains.kotlin.psi.psiUtil.forEachDescendantOfType +import org.jetbrains.kotlin.psi.psiUtil.safeFqNameForLazyResolve +import org.jetbrains.kotlin.test.builders.TestConfigurationBuilder +import org.jetbrains.kotlin.test.directives.model.SimpleDirectivesContainer +import org.jetbrains.kotlin.test.services.TestModuleStructure +import org.jetbrains.kotlin.test.services.TestServices +import org.jetbrains.kotlin.test.services.assertions + +abstract class AbstractClassIdConsistencyTest : AbstractLowLevelApiSingleFileTest() { + override fun doTestByFileStructure(ktFile: KtFile, moduleStructure: TestModuleStructure, testServices: TestServices) { + moduleStructure.allDirectives.ignoreExceptionIfIgnoreDirectivePresent(IGNORE_CONSISTENCY_CHECK) { + ktFile.forEachDescendantOfType { declaration -> + val classId = declaration.getClassId() + val fqName = declaration.safeFqNameForLazyResolve() + testServices.assertions.assertEquals(fqName, classId?.asSingleFqName()) + } + } + } + + private object Directives : SimpleDirectivesContainer() { + val IGNORE_CONSISTENCY_CHECK by stringDirective("Temporary disable test until the issue is fixed") + } + + override fun configureTest(builder: TestConfigurationBuilder) { + super.configureTest(builder) + builder.useDirectives(Directives) + } +} + +abstract class AbstractSourceClassIdConsistencyTest : AbstractClassIdConsistencyTest() { + override val configurator: AnalysisApiTestConfigurator = AnalysisApiFirSourceTestConfigurator(analyseInDependentSession = false) +} + +abstract class AbstractScriptClassIdConsistencyTest : AbstractClassIdConsistencyTest() { + override val configurator: AnalysisApiTestConfigurator = AnalysisApiFirScriptTestConfigurator(analyseInDependentSession = false) +} diff --git a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/AbstractClassIdTest.kt b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/AbstractClassIdTest.kt index 0afe04b04dd..fb35c7033c8 100644 --- a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/AbstractClassIdTest.kt +++ b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/AbstractClassIdTest.kt @@ -13,6 +13,7 @@ import org.jetbrains.kotlin.analysis.low.level.api.fir.test.base.AbstractLowLeve import org.jetbrains.kotlin.analysis.low.level.api.fir.test.configurators.AnalysisApiFirScriptTestConfigurator import org.jetbrains.kotlin.analysis.low.level.api.fir.test.configurators.AnalysisApiFirSourceTestConfigurator import org.jetbrains.kotlin.analysis.test.framework.test.configurators.AnalysisApiTestConfigurator +import org.jetbrains.kotlin.lexer.KtTokens import org.jetbrains.kotlin.psi.KtClassLikeDeclaration import org.jetbrains.kotlin.psi.KtFile import org.jetbrains.kotlin.test.services.TestModuleStructure @@ -35,7 +36,13 @@ abstract class AbstractClassIdTest : AbstractLowLevelApiSingleFileTest() { element.acceptChildren(this) } - override fun visitComment(comment: PsiComment) {} + override fun visitComment(comment: PsiComment) { + if (comment.tokenType == KtTokens.BLOCK_COMMENT) { + return + } + + super.visitComment(comment) + } }) } diff --git a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/ScriptClassIdConsistencyTestGenerated.java b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/ScriptClassIdConsistencyTestGenerated.java new file mode 100644 index 00000000000..70fdb1f003a --- /dev/null +++ b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/ScriptClassIdConsistencyTestGenerated.java @@ -0,0 +1,62 @@ +/* + * Copyright 2010-2023 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. + */ + +package org.jetbrains.kotlin.analysis.low.level.api.fir; + +import com.intellij.testFramework.TestDataPath; +import org.jetbrains.kotlin.test.util.KtTestUtil; +import org.jetbrains.kotlin.test.TestMetadata; +import org.junit.jupiter.api.Nested; +import org.junit.jupiter.api.Test; + +import java.io.File; +import java.util.regex.Pattern; + +/** This class is generated by {@link org.jetbrains.kotlin.generators.tests.analysis.api.GenerateAnalysisApiTestsKt}. DO NOT MODIFY MANUALLY */ +@SuppressWarnings("all") +@TestMetadata("analysis/low-level-api-fir/testdata/classId") +@TestDataPath("$PROJECT_ROOT") +public class ScriptClassIdConsistencyTestGenerated extends AbstractScriptClassIdConsistencyTest { + @Test + public void testAllFilesPresentInClassId() throws Exception { + KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("analysis/low-level-api-fir/testdata/classId"), Pattern.compile("^(.+)\\.(kts)$"), null, true); + } + + @Test + @TestMetadata("classWithMembers.kts") + public void testClassWithMembers() throws Exception { + runTest("analysis/low-level-api-fir/testdata/classId/classWithMembers.kts"); + } + + @Test + @TestMetadata("classWithMembersWithPackage.kts") + public void testClassWithMembersWithPackage() throws Exception { + runTest("analysis/low-level-api-fir/testdata/classId/classWithMembersWithPackage.kts"); + } + + @Test + @TestMetadata("enum.kts") + public void testEnum() throws Exception { + runTest("analysis/low-level-api-fir/testdata/classId/enum.kts"); + } + + @Test + @TestMetadata("enumEntry.kts") + public void testEnumEntry() throws Exception { + runTest("analysis/low-level-api-fir/testdata/classId/enumEntry.kts"); + } + + @Test + @TestMetadata("namelessClasses.kts") + public void testNamelessClasses() throws Exception { + runTest("analysis/low-level-api-fir/testdata/classId/namelessClasses.kts"); + } + + @Test + @TestMetadata("namelessInsideNamelessClasses.kts") + public void testNamelessInsideNamelessClasses() throws Exception { + runTest("analysis/low-level-api-fir/testdata/classId/namelessInsideNamelessClasses.kts"); + } +} diff --git a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/ScriptClassIdTestGenerated.java b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/ScriptClassIdTestGenerated.java index 940ef7753e5..4e3a801a97d 100644 --- a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/ScriptClassIdTestGenerated.java +++ b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/ScriptClassIdTestGenerated.java @@ -35,4 +35,28 @@ public class ScriptClassIdTestGenerated extends AbstractScriptClassIdTest { public void testClassWithMembersWithPackage() throws Exception { runTest("analysis/low-level-api-fir/testdata/classId/classWithMembersWithPackage.kts"); } + + @Test + @TestMetadata("enum.kts") + public void testEnum() throws Exception { + runTest("analysis/low-level-api-fir/testdata/classId/enum.kts"); + } + + @Test + @TestMetadata("enumEntry.kts") + public void testEnumEntry() throws Exception { + runTest("analysis/low-level-api-fir/testdata/classId/enumEntry.kts"); + } + + @Test + @TestMetadata("namelessClasses.kts") + public void testNamelessClasses() throws Exception { + runTest("analysis/low-level-api-fir/testdata/classId/namelessClasses.kts"); + } + + @Test + @TestMetadata("namelessInsideNamelessClasses.kts") + public void testNamelessInsideNamelessClasses() throws Exception { + runTest("analysis/low-level-api-fir/testdata/classId/namelessInsideNamelessClasses.kts"); + } } diff --git a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/SourceClassIdConsistencyTestGenerated.java b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/SourceClassIdConsistencyTestGenerated.java new file mode 100644 index 00000000000..ab168b44a5d --- /dev/null +++ b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/SourceClassIdConsistencyTestGenerated.java @@ -0,0 +1,74 @@ +/* + * Copyright 2010-2023 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. + */ + +package org.jetbrains.kotlin.analysis.low.level.api.fir; + +import com.intellij.testFramework.TestDataPath; +import org.jetbrains.kotlin.test.util.KtTestUtil; +import org.jetbrains.kotlin.test.TestMetadata; +import org.junit.jupiter.api.Nested; +import org.junit.jupiter.api.Test; + +import java.io.File; +import java.util.regex.Pattern; + +/** This class is generated by {@link org.jetbrains.kotlin.generators.tests.analysis.api.GenerateAnalysisApiTestsKt}. DO NOT MODIFY MANUALLY */ +@SuppressWarnings("all") +@TestMetadata("analysis/low-level-api-fir/testdata/classId") +@TestDataPath("$PROJECT_ROOT") +public class SourceClassIdConsistencyTestGenerated extends AbstractSourceClassIdConsistencyTest { + @Test + public void testAllFilesPresentInClassId() throws Exception { + KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("analysis/low-level-api-fir/testdata/classId"), Pattern.compile("^(.+)\\.(kt)$"), null, true); + } + + @Test + @TestMetadata("classWithMembers.kt") + public void testClassWithMembers() throws Exception { + runTest("analysis/low-level-api-fir/testdata/classId/classWithMembers.kt"); + } + + @Test + @TestMetadata("enum.kt") + public void testEnum() throws Exception { + runTest("analysis/low-level-api-fir/testdata/classId/enum.kt"); + } + + @Test + @TestMetadata("enumEntry.kt") + public void testEnumEntry() throws Exception { + runTest("analysis/low-level-api-fir/testdata/classId/enumEntry.kt"); + } + + @Test + @TestMetadata("localClassInsideFunctionLiteral.kt") + public void testLocalClassInsideFunctionLiteral() throws Exception { + runTest("analysis/low-level-api-fir/testdata/classId/localClassInsideFunctionLiteral.kt"); + } + + @Test + @TestMetadata("localClassInsideLambdaCallInsideStringTemplate.kt") + public void testLocalClassInsideLambdaCallInsideStringTemplate() throws Exception { + runTest("analysis/low-level-api-fir/testdata/classId/localClassInsideLambdaCallInsideStringTemplate.kt"); + } + + @Test + @TestMetadata("localClassInsideSuperEntryCall.kt") + public void testLocalClassInsideSuperEntryCall() throws Exception { + runTest("analysis/low-level-api-fir/testdata/classId/localClassInsideSuperEntryCall.kt"); + } + + @Test + @TestMetadata("namelessClasses.kt") + public void testNamelessClasses() throws Exception { + runTest("analysis/low-level-api-fir/testdata/classId/namelessClasses.kt"); + } + + @Test + @TestMetadata("namelessInsideNamelessClasses.kt") + public void testNamelessInsideNamelessClasses() throws Exception { + runTest("analysis/low-level-api-fir/testdata/classId/namelessInsideNamelessClasses.kt"); + } +} diff --git a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/SourceClassIdTestGenerated.java b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/SourceClassIdTestGenerated.java index e87fd9a3104..9d418f268b0 100644 --- a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/SourceClassIdTestGenerated.java +++ b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/SourceClassIdTestGenerated.java @@ -30,6 +30,18 @@ public class SourceClassIdTestGenerated extends AbstractSourceClassIdTest { runTest("analysis/low-level-api-fir/testdata/classId/classWithMembers.kt"); } + @Test + @TestMetadata("enum.kt") + public void testEnum() throws Exception { + runTest("analysis/low-level-api-fir/testdata/classId/enum.kt"); + } + + @Test + @TestMetadata("enumEntry.kt") + public void testEnumEntry() throws Exception { + runTest("analysis/low-level-api-fir/testdata/classId/enumEntry.kt"); + } + @Test @TestMetadata("localClassInsideFunctionLiteral.kt") public void testLocalClassInsideFunctionLiteral() throws Exception { @@ -47,4 +59,16 @@ public class SourceClassIdTestGenerated extends AbstractSourceClassIdTest { public void testLocalClassInsideSuperEntryCall() throws Exception { runTest("analysis/low-level-api-fir/testdata/classId/localClassInsideSuperEntryCall.kt"); } + + @Test + @TestMetadata("namelessClasses.kt") + public void testNamelessClasses() throws Exception { + runTest("analysis/low-level-api-fir/testdata/classId/namelessClasses.kt"); + } + + @Test + @TestMetadata("namelessInsideNamelessClasses.kt") + public void testNamelessInsideNamelessClasses() throws Exception { + runTest("analysis/low-level-api-fir/testdata/classId/namelessInsideNamelessClasses.kt"); + } } diff --git a/generators/analysis-api-generator/tests/org/jetbrains/kotlin/generators/tests/analysis/api/firLowLevel.kt b/generators/analysis-api-generator/tests/org/jetbrains/kotlin/generators/tests/analysis/api/firLowLevel.kt index 637f0b3993c..b60182c066e 100644 --- a/generators/analysis-api-generator/tests/org/jetbrains/kotlin/generators/tests/analysis/api/firLowLevel.kt +++ b/generators/analysis-api-generator/tests/org/jetbrains/kotlin/generators/tests/analysis/api/firLowLevel.kt @@ -175,6 +175,14 @@ internal fun TestGroupSuite.generateFirLowLevelApiTests() { model("classId", pattern = TestGeneratorUtil.KTS) } + testClass { + model("classId", pattern = TestGeneratorUtil.KT) + } + + testClass { + model("classId", pattern = TestGeneratorUtil.KTS) + } + testClass { model("compilationPeers") }