From 51eaa3f9cf4f1c8aa48c68f443f090d4e956e38e Mon Sep 17 00:00:00 2001 From: Ilya Kirillov Date: Mon, 17 Apr 2023 18:13:00 +0200 Subject: [PATCH] [Analysis API] provide tests for the KtResolveExtensionProvider ^KT-57930 --- ...olveWithResolveExtensionTestGenerated.java | 66 ++++++++++++++++++ ...eferenceResolveWithResolveExtensionTest.kt | 55 +++++++++++++++ .../AnalysisApiBaseTestServiceRegistrar.kt | 12 +++- .../test/util/KtResolveExtensionForTest.kt | 69 +++++++++++++++++++ ...olveWithResolveExtensionTestGenerated.java | 66 ++++++++++++++++++ .../referenceResolve/classMember.kt | 6 ++ .../referenceResolve/classMember.txt | 2 + .../referenceResolve/extensionFunction.kt | 5 ++ .../referenceResolve/extensionFunction.txt | 2 + .../referenceResolve/topLevelFunction.kt | 5 ++ .../referenceResolve/topLevelFunction.txt | 2 + .../tests/analysis/api/analysisApi.kt | 15 ++++ 12 files changed, 304 insertions(+), 1 deletion(-) create mode 100644 analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/references/FirIdeNormalAnalysisSourceModuleReferenceResolveWithResolveExtensionTestGenerated.java create mode 100644 analysis/analysis-api-impl-base/tests/org/jetbrains/kotlin/analysis/api/impl/base/test/cases/references/AbstractReferenceResolveWithResolveExtensionTest.kt create mode 100644 analysis/analysis-api-impl-base/tests/org/jetbrains/kotlin/analysis/api/impl/base/test/util/KtResolveExtensionForTest.kt create mode 100644 analysis/analysis-api-standalone/tests-gen/org/jetbrains/kotlin/analysis/api/standalone/fir/test/cases/generated/cases/references/FirStandaloneNormalAnalysisSourceModuleReferenceResolveWithResolveExtensionTestGenerated.java create mode 100644 analysis/analysis-api/testData/resolveExtensions/referenceResolve/classMember.kt create mode 100644 analysis/analysis-api/testData/resolveExtensions/referenceResolve/classMember.txt create mode 100644 analysis/analysis-api/testData/resolveExtensions/referenceResolve/extensionFunction.kt create mode 100644 analysis/analysis-api/testData/resolveExtensions/referenceResolve/extensionFunction.txt create mode 100644 analysis/analysis-api/testData/resolveExtensions/referenceResolve/topLevelFunction.kt create mode 100644 analysis/analysis-api/testData/resolveExtensions/referenceResolve/topLevelFunction.txt diff --git a/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/references/FirIdeNormalAnalysisSourceModuleReferenceResolveWithResolveExtensionTestGenerated.java b/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/references/FirIdeNormalAnalysisSourceModuleReferenceResolveWithResolveExtensionTestGenerated.java new file mode 100644 index 00000000000..c6acbd32295 --- /dev/null +++ b/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/references/FirIdeNormalAnalysisSourceModuleReferenceResolveWithResolveExtensionTestGenerated.java @@ -0,0 +1,66 @@ +/* + * 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.api.fir.test.cases.generated.cases.references; + +import com.intellij.testFramework.TestDataPath; +import org.jetbrains.kotlin.test.util.KtTestUtil; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.kotlin.analysis.api.fir.test.configurators.AnalysisApiFirTestConfiguratorFactory; +import org.jetbrains.kotlin.analysis.test.framework.test.configurators.AnalysisApiTestConfiguratorFactoryData; +import org.jetbrains.kotlin.analysis.test.framework.test.configurators.AnalysisApiTestConfigurator; +import org.jetbrains.kotlin.analysis.test.framework.test.configurators.TestModuleKind; +import org.jetbrains.kotlin.analysis.test.framework.test.configurators.FrontendKind; +import org.jetbrains.kotlin.analysis.test.framework.test.configurators.AnalysisSessionMode; +import org.jetbrains.kotlin.analysis.test.framework.test.configurators.AnalysisApiMode; +import org.jetbrains.kotlin.analysis.api.impl.base.test.cases.references.AbstractReferenceResolveWithResolveExtensionTest; +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/analysis-api/testData/resolveExtensions/referenceResolve") +@TestDataPath("$PROJECT_ROOT") +public class FirIdeNormalAnalysisSourceModuleReferenceResolveWithResolveExtensionTestGenerated extends AbstractReferenceResolveWithResolveExtensionTest { + @NotNull + @Override + public AnalysisApiTestConfigurator getConfigurator() { + return AnalysisApiFirTestConfiguratorFactory.INSTANCE.createConfigurator( + new AnalysisApiTestConfiguratorFactoryData( + FrontendKind.Fir, + TestModuleKind.Source, + AnalysisSessionMode.Normal, + AnalysisApiMode.Ide + ) + ); + } + + @Test + public void testAllFilesPresentInReferenceResolve() throws Exception { + KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("analysis/analysis-api/testData/resolveExtensions/referenceResolve"), Pattern.compile("^(.+)\\.kt$"), null, true); + } + + @Test + @TestMetadata("classMember.kt") + public void testClassMember() throws Exception { + runTest("analysis/analysis-api/testData/resolveExtensions/referenceResolve/classMember.kt"); + } + + @Test + @TestMetadata("extensionFunction.kt") + public void testExtensionFunction() throws Exception { + runTest("analysis/analysis-api/testData/resolveExtensions/referenceResolve/extensionFunction.kt"); + } + + @Test + @TestMetadata("topLevelFunction.kt") + public void testTopLevelFunction() throws Exception { + runTest("analysis/analysis-api/testData/resolveExtensions/referenceResolve/topLevelFunction.kt"); + } +} diff --git a/analysis/analysis-api-impl-base/tests/org/jetbrains/kotlin/analysis/api/impl/base/test/cases/references/AbstractReferenceResolveWithResolveExtensionTest.kt b/analysis/analysis-api-impl-base/tests/org/jetbrains/kotlin/analysis/api/impl/base/test/cases/references/AbstractReferenceResolveWithResolveExtensionTest.kt new file mode 100644 index 00000000000..c45ae541411 --- /dev/null +++ b/analysis/analysis-api-impl-base/tests/org/jetbrains/kotlin/analysis/api/impl/base/test/cases/references/AbstractReferenceResolveWithResolveExtensionTest.kt @@ -0,0 +1,55 @@ +/* + * Copyright 2010-2022 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.api.impl.base.test.cases.references + +import org.jetbrains.kotlin.analysis.api.impl.base.test.util.KtResolveExtensionProviderForTest +import org.jetbrains.kotlin.analysis.api.impl.base.test.util.KtResolveExtensionProviderForTestPreAnalysisHandler +import org.jetbrains.kotlin.analysis.api.impl.base.test.util.KtResolveExtensionFileForTests +import org.jetbrains.kotlin.name.FqName +import org.jetbrains.kotlin.test.bind +import org.jetbrains.kotlin.test.builders.TestConfigurationBuilder + +abstract class AbstractReferenceResolveWithResolveExtensionTest : AbstractReferenceResolveTest() { + override fun configureTest(builder: TestConfigurationBuilder) { + super.configureTest(builder) + val provider = KtResolveExtensionProviderForTest( + listOf( + KtResolveExtensionFileForTests( + "extension1.kt", + packageName = FqName("generated"), + topLevelClassifiersNames = setOf("GeneratedClass1"), + topLevelCallableNames = setOf("generatedTopLevelFunction1", "generatedTopLevelExtensionFunction1"), + fileText = """|package generated + | + |class GeneratedClass1 { + | fun generatedClassMember1(): Int + |} + | + |fun generatedTopLevelFunction1(): GeneratedClass2 + | + |fun String.generatedTopLevelExtensionFunction1(boolean: Boolean): Int + """.trimMargin() + ), + KtResolveExtensionFileForTests( + "extension2.kt", + packageName = FqName("generated"), + topLevelClassifiersNames = setOf("GeneratedClass2"), + topLevelCallableNames = setOf(), + fileText = """|package generated + | + |class GeneratedClass2 { + | fun generatedClassMember2(): GeneratedClass1 + |} + """.trimMargin(), + ) + ), + setOf(FqName("generated")) + ) + with(builder) { + usePreAnalysisHandlers(::KtResolveExtensionProviderForTestPreAnalysisHandler.bind(listOf(provider))) + } + } +} diff --git a/analysis/analysis-api-impl-base/tests/org/jetbrains/kotlin/analysis/api/impl/base/test/configurators/AnalysisApiBaseTestServiceRegistrar.kt b/analysis/analysis-api-impl-base/tests/org/jetbrains/kotlin/analysis/api/impl/base/test/configurators/AnalysisApiBaseTestServiceRegistrar.kt index 43c1805aaee..0e7e67dd609 100644 --- a/analysis/analysis-api-impl-base/tests/org/jetbrains/kotlin/analysis/api/impl/base/test/configurators/AnalysisApiBaseTestServiceRegistrar.kt +++ b/analysis/analysis-api-impl-base/tests/org/jetbrains/kotlin/analysis/api/impl/base/test/configurators/AnalysisApiBaseTestServiceRegistrar.kt @@ -7,10 +7,12 @@ package org.jetbrains.kotlin.analysis.api.impl.base.test.configurators import com.intellij.mock.MockApplication import com.intellij.mock.MockProject +import com.intellij.openapi.extensions.ExtensionPoint import org.jetbrains.kotlin.analysis.api.KtAnalysisApiInternals import org.jetbrains.kotlin.analysis.api.impl.base.references.HLApiReferenceProviderService import org.jetbrains.kotlin.analysis.api.lifetime.KtDefaultLifetimeTokenProvider import org.jetbrains.kotlin.analysis.api.lifetime.KtReadActionConfinementDefaultLifetimeTokenProvider +import org.jetbrains.kotlin.analysis.api.resolve.extensions.KtResolveExtensionProvider import org.jetbrains.kotlin.analysis.project.structure.KtModuleScopeProvider import org.jetbrains.kotlin.analysis.project.structure.KtModuleScopeProviderImpl import org.jetbrains.kotlin.analysis.providers.* @@ -22,7 +24,15 @@ import org.jetbrains.kotlin.psi.KtFile import org.jetbrains.kotlin.test.services.TestServices object AnalysisApiBaseTestServiceRegistrar: AnalysisApiTestServiceRegistrar() { - override fun registerProjectExtensionPoints(project: MockProject, testServices: TestServices) {} + override fun registerProjectExtensionPoints(project: MockProject, testServices: TestServices) { + project.extensionArea.apply { + registerExtensionPoint( + KtResolveExtensionProvider.EP_NAME.name, + KtResolveExtensionProvider::class.java.name, + ExtensionPoint.Kind.INTERFACE, + ) + } + } @OptIn(KtAnalysisApiInternals::class) override fun registerProjectServices(project: MockProject, testServices: TestServices) { diff --git a/analysis/analysis-api-impl-base/tests/org/jetbrains/kotlin/analysis/api/impl/base/test/util/KtResolveExtensionForTest.kt b/analysis/analysis-api-impl-base/tests/org/jetbrains/kotlin/analysis/api/impl/base/test/util/KtResolveExtensionForTest.kt new file mode 100644 index 00000000000..252af85f3f0 --- /dev/null +++ b/analysis/analysis-api-impl-base/tests/org/jetbrains/kotlin/analysis/api/impl/base/test/util/KtResolveExtensionForTest.kt @@ -0,0 +1,69 @@ +/* + * 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.api.impl.base.test.util + +import com.intellij.mock.MockProject +import com.intellij.openapi.util.ModificationTracker +import org.jetbrains.kotlin.analysis.api.resolve.extensions.KtResolveExtension +import org.jetbrains.kotlin.analysis.api.resolve.extensions.KtResolveExtensionFile +import org.jetbrains.kotlin.analysis.api.resolve.extensions.KtResolveExtensionProvider +import org.jetbrains.kotlin.analysis.project.structure.KtModule +import org.jetbrains.kotlin.analysis.test.framework.services.environmentManager +import org.jetbrains.kotlin.name.FqName +import org.jetbrains.kotlin.name.Name +import org.jetbrains.kotlin.test.services.PreAnalysisHandler +import org.jetbrains.kotlin.test.services.TestModuleStructure +import org.jetbrains.kotlin.test.services.TestServices + +class KtResolveExtensionProviderForTest( + private val files: List, + private val packages: Set, +) : KtResolveExtensionProvider() { + override fun provideExtensionsFor(module: KtModule): List { + return listOf(KtResolveExtensionForTest(files, packages)) + } +} + +class KtResolveExtensionProviderForTestPreAnalysisHandler( + testServices: TestServices, + private val providers: List, +) : PreAnalysisHandler(testServices) { + override fun preprocessModuleStructure(moduleStructure: TestModuleStructure) { + val project = testServices.environmentManager.getProject() as MockProject + val extensionPoint = project.extensionArea.getExtensionPoint(KtResolveExtensionProvider.EP_NAME) + for (provider in providers) { + extensionPoint.registerExtension(provider, project) + } + } +} + + +class KtResolveExtensionForTest( + private val files: List, + private val packages: Set, +) : KtResolveExtension() { + override fun getKtFiles(): List = files + override fun getModificationTracker(): ModificationTracker = ModificationTracker.NEVER_CHANGED + override fun getContainedPackages(): Set = packages +} + +class KtResolveExtensionFileForTests( + private val fileName: String, + private val packageName: FqName, + topLevelClassifiersNames: Set, + topLevelCallableNames: Set, + private val fileText: String, +) : KtResolveExtensionFile() { + + private val topLevelClassifiersNames: Set = topLevelClassifiersNames.mapTo(mutableSetOf()) { Name.identifier(it) } + private val topLevelCallableNames: Set = topLevelCallableNames.mapTo(mutableSetOf()) { Name.identifier(it) } + override fun getFileName(): String = fileName + override fun getFilePackageName(): FqName = packageName + override fun getTopLevelClassifierNames(): Set = topLevelClassifiersNames + override fun getTopLevelCallableNames(): Set = topLevelCallableNames + + override fun buildFileText(): String = fileText +} \ No newline at end of file diff --git a/analysis/analysis-api-standalone/tests-gen/org/jetbrains/kotlin/analysis/api/standalone/fir/test/cases/generated/cases/references/FirStandaloneNormalAnalysisSourceModuleReferenceResolveWithResolveExtensionTestGenerated.java b/analysis/analysis-api-standalone/tests-gen/org/jetbrains/kotlin/analysis/api/standalone/fir/test/cases/generated/cases/references/FirStandaloneNormalAnalysisSourceModuleReferenceResolveWithResolveExtensionTestGenerated.java new file mode 100644 index 00000000000..4c06c36ed2f --- /dev/null +++ b/analysis/analysis-api-standalone/tests-gen/org/jetbrains/kotlin/analysis/api/standalone/fir/test/cases/generated/cases/references/FirStandaloneNormalAnalysisSourceModuleReferenceResolveWithResolveExtensionTestGenerated.java @@ -0,0 +1,66 @@ +/* + * 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.api.standalone.fir.test.cases.generated.cases.references; + +import com.intellij.testFramework.TestDataPath; +import org.jetbrains.kotlin.test.util.KtTestUtil; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.kotlin.analysis.api.standalone.fir.test.AnalysisApiFirStandaloneModeTestConfiguratorFactory; +import org.jetbrains.kotlin.analysis.test.framework.test.configurators.AnalysisApiTestConfiguratorFactoryData; +import org.jetbrains.kotlin.analysis.test.framework.test.configurators.AnalysisApiTestConfigurator; +import org.jetbrains.kotlin.analysis.test.framework.test.configurators.TestModuleKind; +import org.jetbrains.kotlin.analysis.test.framework.test.configurators.FrontendKind; +import org.jetbrains.kotlin.analysis.test.framework.test.configurators.AnalysisSessionMode; +import org.jetbrains.kotlin.analysis.test.framework.test.configurators.AnalysisApiMode; +import org.jetbrains.kotlin.analysis.api.impl.base.test.cases.references.AbstractReferenceResolveWithResolveExtensionTest; +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/analysis-api/testData/resolveExtensions/referenceResolve") +@TestDataPath("$PROJECT_ROOT") +public class FirStandaloneNormalAnalysisSourceModuleReferenceResolveWithResolveExtensionTestGenerated extends AbstractReferenceResolveWithResolveExtensionTest { + @NotNull + @Override + public AnalysisApiTestConfigurator getConfigurator() { + return AnalysisApiFirStandaloneModeTestConfiguratorFactory.INSTANCE.createConfigurator( + new AnalysisApiTestConfiguratorFactoryData( + FrontendKind.Fir, + TestModuleKind.Source, + AnalysisSessionMode.Normal, + AnalysisApiMode.Standalone + ) + ); + } + + @Test + public void testAllFilesPresentInReferenceResolve() throws Exception { + KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("analysis/analysis-api/testData/resolveExtensions/referenceResolve"), Pattern.compile("^(.+)\\.kt$"), null, true); + } + + @Test + @TestMetadata("classMember.kt") + public void testClassMember() throws Exception { + runTest("analysis/analysis-api/testData/resolveExtensions/referenceResolve/classMember.kt"); + } + + @Test + @TestMetadata("extensionFunction.kt") + public void testExtensionFunction() throws Exception { + runTest("analysis/analysis-api/testData/resolveExtensions/referenceResolve/extensionFunction.kt"); + } + + @Test + @TestMetadata("topLevelFunction.kt") + public void testTopLevelFunction() throws Exception { + runTest("analysis/analysis-api/testData/resolveExtensions/referenceResolve/topLevelFunction.kt"); + } +} diff --git a/analysis/analysis-api/testData/resolveExtensions/referenceResolve/classMember.kt b/analysis/analysis-api/testData/resolveExtensions/referenceResolve/classMember.kt new file mode 100644 index 00000000000..ff518d8a726 --- /dev/null +++ b/analysis/analysis-api/testData/resolveExtensions/referenceResolve/classMember.kt @@ -0,0 +1,6 @@ +import generated.* + +fun main() { + val a = GeneratedClass2() + a.generatedClassMember2() +} \ No newline at end of file diff --git a/analysis/analysis-api/testData/resolveExtensions/referenceResolve/classMember.txt b/analysis/analysis-api/testData/resolveExtensions/referenceResolve/classMember.txt new file mode 100644 index 00000000000..a4d404579a2 --- /dev/null +++ b/analysis/analysis-api/testData/resolveExtensions/referenceResolve/classMember.txt @@ -0,0 +1,2 @@ +Resolved to: +0: (in generated.GeneratedClass2) fun generatedClassMember2(): generated.GeneratedClass1 diff --git a/analysis/analysis-api/testData/resolveExtensions/referenceResolve/extensionFunction.kt b/analysis/analysis-api/testData/resolveExtensions/referenceResolve/extensionFunction.kt new file mode 100644 index 00000000000..0d7a0f8f1a2 --- /dev/null +++ b/analysis/analysis-api/testData/resolveExtensions/referenceResolve/extensionFunction.kt @@ -0,0 +1,5 @@ +import generated.* + +fun main() { + "string".generatedTopLevelExtensionFunction1(true) +} \ No newline at end of file diff --git a/analysis/analysis-api/testData/resolveExtensions/referenceResolve/extensionFunction.txt b/analysis/analysis-api/testData/resolveExtensions/referenceResolve/extensionFunction.txt new file mode 100644 index 00000000000..377c94c0f46 --- /dev/null +++ b/analysis/analysis-api/testData/resolveExtensions/referenceResolve/extensionFunction.txt @@ -0,0 +1,2 @@ +Resolved to: +0: (in generated) fun kotlin.String.generatedTopLevelExtensionFunction1(boolean: kotlin.Boolean): kotlin.Int diff --git a/analysis/analysis-api/testData/resolveExtensions/referenceResolve/topLevelFunction.kt b/analysis/analysis-api/testData/resolveExtensions/referenceResolve/topLevelFunction.kt new file mode 100644 index 00000000000..3f08943ee3e --- /dev/null +++ b/analysis/analysis-api/testData/resolveExtensions/referenceResolve/topLevelFunction.kt @@ -0,0 +1,5 @@ +import generated.* + +fun main() { + generatedTopLevelFunction1() +} \ No newline at end of file diff --git a/analysis/analysis-api/testData/resolveExtensions/referenceResolve/topLevelFunction.txt b/analysis/analysis-api/testData/resolveExtensions/referenceResolve/topLevelFunction.txt new file mode 100644 index 00000000000..c35736a4ba3 --- /dev/null +++ b/analysis/analysis-api/testData/resolveExtensions/referenceResolve/topLevelFunction.txt @@ -0,0 +1,2 @@ +Resolved to: +0: (in generated) fun generatedTopLevelFunction1(): generated.GeneratedClass2 \ No newline at end of file diff --git a/generators/analysis-api-generator/tests/org/jetbrains/kotlin/generators/tests/analysis/api/analysisApi.kt b/generators/analysis-api-generator/tests/org/jetbrains/kotlin/generators/tests/analysis/api/analysisApi.kt index 56c0eb417ca..95717147746 100644 --- a/generators/analysis-api-generator/tests/org/jetbrains/kotlin/generators/tests/analysis/api/analysisApi.kt +++ b/generators/analysis-api-generator/tests/org/jetbrains/kotlin/generators/tests/analysis/api/analysisApi.kt @@ -46,6 +46,7 @@ import org.jetbrains.kotlin.analysis.api.impl.base.test.cases.components.typePro import org.jetbrains.kotlin.analysis.api.impl.base.test.cases.components.typeProvider.AbstractHasCommonSubtypeTest import org.jetbrains.kotlin.analysis.api.impl.base.test.cases.components.typeProvider.AbstractTypeReferenceTest import org.jetbrains.kotlin.analysis.api.impl.base.test.cases.references.AbstractReferenceResolveTest +import org.jetbrains.kotlin.analysis.api.impl.base.test.cases.references.AbstractReferenceResolveWithResolveExtensionTest import org.jetbrains.kotlin.analysis.api.impl.base.test.cases.references.AbstractReferenceShortenerTest import org.jetbrains.kotlin.analysis.api.impl.base.test.cases.symbols.AbstractSingleSymbolByPsi import org.jetbrains.kotlin.analysis.api.impl.base.test.cases.symbols.AbstractSymbolByFqNameTest @@ -86,6 +87,20 @@ internal fun AnalysisApiTestGroup.generateAnalysisApiTests() { group(filter = testModuleKindIs(TestModuleKind.Source)) { generateAnalysisApiComponentsTests() generateAnalysisApiNonComponentsTests() + generateResolveExtensionsTests() + } +} + +private fun AnalysisApiTestGroup.generateResolveExtensionsTests() { + group( + "resolveExtensions", + filter = analysisSessionModeIs(AnalysisSessionMode.Normal) and + frontendIs(FrontendKind.Fir) and + testModuleKindIs(TestModuleKind.Source) + ) { + test(AbstractReferenceResolveWithResolveExtensionTest::class) { + model("referenceResolve") + } } }