From 734b87b97e541cab3caf9662568454d051801f39 Mon Sep 17 00:00:00 2001 From: Justin Paupore Date: Wed, 14 Jun 2023 23:49:03 -0700 Subject: [PATCH] [AA] Allow specifying REx file contents in testdata. Tests can now specify the code generated by a resolve extension from within the test's testdata. Module-level directives control whether resolve extensions are enabled for that module, as well as package names and source shadowing regexes. File-level directives allow a `// FILE:` block within the testdata to be converted into a KtResolveExtensionFile and removed from the module as a whole. (This requires a new `ModuleStructureTransformer`, because we need to be able to entirely remove the files in question.) Any test can add support for these directives by calling `KtResolveExtensionTestSupport.configure` from within their `configureTest` stanza. This allows this functionality to be used in conjuction with any test base class. ^KT-59329 --- ...olveWithResolveExtensionTestGenerated.java | 94 ----------- ...olveWithResolveExtensionTestGenerated.java | 150 ++++++++++++++++++ ...olveWithResolveExtensionTestGenerated.java | 84 ---------- ...eferenceResolveWithResolveExtensionTest.kt | 24 --- ...eferenceResolveWithResolveExtensionTest.kt | 66 +------- ...eferenceResolveWithResolveExtensionTest.kt | 21 --- .../extensions}/KtResolveExtensionForTest.kt | 48 ++---- .../KtResolveExtensionTestSupport.kt | 141 ++++++++++++++++ ...olveWithResolveExtensionTestGenerated.java | 94 ----------- ...olveWithResolveExtensionTestGenerated.java | 150 ++++++++++++++++++ ...olveWithResolveExtensionTestGenerated.java | 84 ---------- .../extendedModuleDependency/classMember.kt | 11 -- .../extensionFunction.kt | 10 -- .../topLevelFunction.kt | 10 -- .../referenceResolve/classMember.kt | 6 - .../referenceResolve/extensionFunction.kt | 5 - .../extendedModuleDependency/classMember.kt | 29 ++++ .../extendedModuleDependency/classMember.txt | 0 .../extensionFunction.kt | 19 +++ .../extensionFunction.txt | 0 .../shadowedDeclaration.kt | 4 + .../extendedModuleDependency/shadowedJava.kt | 4 + .../shadowedOverload.kt | 11 ++ .../shadowedOverload.txt | 0 .../topLevelFunction.kt | 31 ++++ .../topLevelFunction.txt | 0 .../referenceResolve/shadowedOverload.kt | 11 -- .../singleModule/classMember.kt | 26 +++ .../{ => singleModule}/classMember.txt | 0 .../singleModule/extensionFunction.kt | 16 ++ .../{ => singleModule}/extensionFunction.txt | 0 .../{ => singleModule}/shadowedDeclaration.kt | 3 + .../{ => singleModule}/shadowedJava.kt | 3 + .../singleModule/shadowedOverload.kt | 22 +++ .../{ => singleModule}/shadowedOverload.txt | 0 .../singleModule/topLevelFunction.kt | 28 ++++ .../{ => singleModule}/topLevelFunction.txt | 0 .../referenceResolve/topLevelFunction.kt | 5 - .../test/builders/TestConfigurationBuilder.kt | 11 +- .../kotlin/test/impl/TestConfigurationImpl.kt | 4 +- .../tests/analysis/api/analysisApi.kt | 6 +- 41 files changed, 666 insertions(+), 565 deletions(-) delete mode 100644 analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/references/FirIdeNormalAnalysisSourceModuleMultiModuleReferenceResolveWithResolveExtensionTestGenerated.java create mode 100644 analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/references/FirIdeNormalAnalysisSourceModuleReferenceResolveWithResolveExtensionTestGenerated.java delete mode 100644 analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/references/FirIdeNormalAnalysisSourceModuleSingleModuleReferenceResolveWithResolveExtensionTestGenerated.java delete mode 100644 analysis/analysis-api-impl-base/tests/org/jetbrains/kotlin/analysis/api/impl/base/test/cases/references/AbstractMultiModuleReferenceResolveWithResolveExtensionTest.kt delete mode 100644 analysis/analysis-api-impl-base/tests/org/jetbrains/kotlin/analysis/api/impl/base/test/cases/references/AbstractSingleModuleReferenceResolveWithResolveExtensionTest.kt rename analysis/analysis-api-impl-base/tests/org/jetbrains/kotlin/analysis/api/impl/base/test/{util => cases/resolve/extensions}/KtResolveExtensionForTest.kt (68%) create mode 100644 analysis/analysis-api-impl-base/tests/org/jetbrains/kotlin/analysis/api/impl/base/test/cases/resolve/extensions/KtResolveExtensionTestSupport.kt delete mode 100644 analysis/analysis-api-standalone/tests-gen/org/jetbrains/kotlin/analysis/api/standalone/fir/test/cases/generated/cases/references/FirStandaloneNormalAnalysisSourceModuleMultiModuleReferenceResolveWithResolveExtensionTestGenerated.java create mode 100644 analysis/analysis-api-standalone/tests-gen/org/jetbrains/kotlin/analysis/api/standalone/fir/test/cases/generated/cases/references/FirStandaloneNormalAnalysisSourceModuleReferenceResolveWithResolveExtensionTestGenerated.java delete mode 100644 analysis/analysis-api-standalone/tests-gen/org/jetbrains/kotlin/analysis/api/standalone/fir/test/cases/generated/cases/references/FirStandaloneNormalAnalysisSourceModuleSingleModuleReferenceResolveWithResolveExtensionTestGenerated.java delete mode 100644 analysis/analysis-api/testData/resolveExtensions/multiModule/referenceResolve/extendedModuleDependency/classMember.kt delete mode 100644 analysis/analysis-api/testData/resolveExtensions/multiModule/referenceResolve/extendedModuleDependency/extensionFunction.kt delete mode 100644 analysis/analysis-api/testData/resolveExtensions/multiModule/referenceResolve/extendedModuleDependency/topLevelFunction.kt delete mode 100644 analysis/analysis-api/testData/resolveExtensions/referenceResolve/classMember.kt delete mode 100644 analysis/analysis-api/testData/resolveExtensions/referenceResolve/extensionFunction.kt create mode 100644 analysis/analysis-api/testData/resolveExtensions/referenceResolve/multiModule/extendedModuleDependency/classMember.kt rename analysis/analysis-api/testData/resolveExtensions/{multiModule/referenceResolve => referenceResolve/multiModule}/extendedModuleDependency/classMember.txt (100%) create mode 100644 analysis/analysis-api/testData/resolveExtensions/referenceResolve/multiModule/extendedModuleDependency/extensionFunction.kt rename analysis/analysis-api/testData/resolveExtensions/{multiModule/referenceResolve => referenceResolve/multiModule}/extendedModuleDependency/extensionFunction.txt (100%) rename analysis/analysis-api/testData/resolveExtensions/{multiModule/referenceResolve => referenceResolve/multiModule}/extendedModuleDependency/shadowedDeclaration.kt (68%) rename analysis/analysis-api/testData/resolveExtensions/{multiModule/referenceResolve => referenceResolve/multiModule}/extendedModuleDependency/shadowedJava.kt (71%) rename analysis/analysis-api/testData/resolveExtensions/{multiModule/referenceResolve => referenceResolve/multiModule}/extendedModuleDependency/shadowedOverload.kt (51%) rename analysis/analysis-api/testData/resolveExtensions/{multiModule/referenceResolve => referenceResolve/multiModule}/extendedModuleDependency/shadowedOverload.txt (100%) create mode 100644 analysis/analysis-api/testData/resolveExtensions/referenceResolve/multiModule/extendedModuleDependency/topLevelFunction.kt rename analysis/analysis-api/testData/resolveExtensions/{multiModule/referenceResolve => referenceResolve/multiModule}/extendedModuleDependency/topLevelFunction.txt (100%) delete mode 100644 analysis/analysis-api/testData/resolveExtensions/referenceResolve/shadowedOverload.kt create mode 100644 analysis/analysis-api/testData/resolveExtensions/referenceResolve/singleModule/classMember.kt rename analysis/analysis-api/testData/resolveExtensions/referenceResolve/{ => singleModule}/classMember.txt (100%) create mode 100644 analysis/analysis-api/testData/resolveExtensions/referenceResolve/singleModule/extensionFunction.kt rename analysis/analysis-api/testData/resolveExtensions/referenceResolve/{ => singleModule}/extensionFunction.txt (100%) rename analysis/analysis-api/testData/resolveExtensions/referenceResolve/{ => singleModule}/shadowedDeclaration.kt (57%) rename analysis/analysis-api/testData/resolveExtensions/referenceResolve/{ => singleModule}/shadowedJava.kt (63%) create mode 100644 analysis/analysis-api/testData/resolveExtensions/referenceResolve/singleModule/shadowedOverload.kt rename analysis/analysis-api/testData/resolveExtensions/referenceResolve/{ => singleModule}/shadowedOverload.txt (100%) create mode 100644 analysis/analysis-api/testData/resolveExtensions/referenceResolve/singleModule/topLevelFunction.kt rename analysis/analysis-api/testData/resolveExtensions/referenceResolve/{ => singleModule}/topLevelFunction.txt (100%) delete mode 100644 analysis/analysis-api/testData/resolveExtensions/referenceResolve/topLevelFunction.kt diff --git a/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/references/FirIdeNormalAnalysisSourceModuleMultiModuleReferenceResolveWithResolveExtensionTestGenerated.java b/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/references/FirIdeNormalAnalysisSourceModuleMultiModuleReferenceResolveWithResolveExtensionTestGenerated.java deleted file mode 100644 index e5786dc648f..00000000000 --- a/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/references/FirIdeNormalAnalysisSourceModuleMultiModuleReferenceResolveWithResolveExtensionTestGenerated.java +++ /dev/null @@ -1,94 +0,0 @@ -/* - * 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.AbstractMultiModuleReferenceResolveWithResolveExtensionTest; -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/multiModule/referenceResolve") -@TestDataPath("$PROJECT_ROOT") -public class FirIdeNormalAnalysisSourceModuleMultiModuleReferenceResolveWithResolveExtensionTestGenerated extends AbstractMultiModuleReferenceResolveWithResolveExtensionTest { - @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/multiModule/referenceResolve"), Pattern.compile("^(.+)\\.kt$"), null, true); - } - - @Nested - @TestMetadata("analysis/analysis-api/testData/resolveExtensions/multiModule/referenceResolve/extendedModuleDependency") - @TestDataPath("$PROJECT_ROOT") - public class ExtendedModuleDependency { - @Test - public void testAllFilesPresentInExtendedModuleDependency() throws Exception { - KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("analysis/analysis-api/testData/resolveExtensions/multiModule/referenceResolve/extendedModuleDependency"), Pattern.compile("^(.+)\\.kt$"), null, true); - } - - @Test - @TestMetadata("classMember.kt") - public void testClassMember() throws Exception { - runTest("analysis/analysis-api/testData/resolveExtensions/multiModule/referenceResolve/extendedModuleDependency/classMember.kt"); - } - - @Test - @TestMetadata("extensionFunction.kt") - public void testExtensionFunction() throws Exception { - runTest("analysis/analysis-api/testData/resolveExtensions/multiModule/referenceResolve/extendedModuleDependency/extensionFunction.kt"); - } - - @Test - @TestMetadata("shadowedDeclaration.kt") - public void testShadowedDeclaration() throws Exception { - runTest("analysis/analysis-api/testData/resolveExtensions/multiModule/referenceResolve/extendedModuleDependency/shadowedDeclaration.kt"); - } - - @Test - @TestMetadata("shadowedJava.kt") - public void testShadowedJava() throws Exception { - runTest("analysis/analysis-api/testData/resolveExtensions/multiModule/referenceResolve/extendedModuleDependency/shadowedJava.kt"); - } - - @Test - @TestMetadata("shadowedOverload.kt") - public void testShadowedOverload() throws Exception { - runTest("analysis/analysis-api/testData/resolveExtensions/multiModule/referenceResolve/extendedModuleDependency/shadowedOverload.kt"); - } - - @Test - @TestMetadata("topLevelFunction.kt") - public void testTopLevelFunction() throws Exception { - runTest("analysis/analysis-api/testData/resolveExtensions/multiModule/referenceResolve/extendedModuleDependency/topLevelFunction.kt"); - } - } -} 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..b75e10cad1b --- /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,150 @@ +/* + * 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); + } + + @Nested + @TestMetadata("analysis/analysis-api/testData/resolveExtensions/referenceResolve/multiModule") + @TestDataPath("$PROJECT_ROOT") + public class MultiModule { + @Test + public void testAllFilesPresentInMultiModule() throws Exception { + KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("analysis/analysis-api/testData/resolveExtensions/referenceResolve/multiModule"), Pattern.compile("^(.+)\\.kt$"), null, true); + } + + @Nested + @TestMetadata("analysis/analysis-api/testData/resolveExtensions/referenceResolve/multiModule/extendedModuleDependency") + @TestDataPath("$PROJECT_ROOT") + public class ExtendedModuleDependency { + @Test + public void testAllFilesPresentInExtendedModuleDependency() throws Exception { + KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("analysis/analysis-api/testData/resolveExtensions/referenceResolve/multiModule/extendedModuleDependency"), Pattern.compile("^(.+)\\.kt$"), null, true); + } + + @Test + @TestMetadata("classMember.kt") + public void testClassMember() throws Exception { + runTest("analysis/analysis-api/testData/resolveExtensions/referenceResolve/multiModule/extendedModuleDependency/classMember.kt"); + } + + @Test + @TestMetadata("extensionFunction.kt") + public void testExtensionFunction() throws Exception { + runTest("analysis/analysis-api/testData/resolveExtensions/referenceResolve/multiModule/extendedModuleDependency/extensionFunction.kt"); + } + + @Test + @TestMetadata("shadowedDeclaration.kt") + public void testShadowedDeclaration() throws Exception { + runTest("analysis/analysis-api/testData/resolveExtensions/referenceResolve/multiModule/extendedModuleDependency/shadowedDeclaration.kt"); + } + + @Test + @TestMetadata("shadowedJava.kt") + public void testShadowedJava() throws Exception { + runTest("analysis/analysis-api/testData/resolveExtensions/referenceResolve/multiModule/extendedModuleDependency/shadowedJava.kt"); + } + + @Test + @TestMetadata("shadowedOverload.kt") + public void testShadowedOverload() throws Exception { + runTest("analysis/analysis-api/testData/resolveExtensions/referenceResolve/multiModule/extendedModuleDependency/shadowedOverload.kt"); + } + + @Test + @TestMetadata("topLevelFunction.kt") + public void testTopLevelFunction() throws Exception { + runTest("analysis/analysis-api/testData/resolveExtensions/referenceResolve/multiModule/extendedModuleDependency/topLevelFunction.kt"); + } + } + } + + @Nested + @TestMetadata("analysis/analysis-api/testData/resolveExtensions/referenceResolve/singleModule") + @TestDataPath("$PROJECT_ROOT") + public class SingleModule { + @Test + public void testAllFilesPresentInSingleModule() throws Exception { + KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("analysis/analysis-api/testData/resolveExtensions/referenceResolve/singleModule"), Pattern.compile("^(.+)\\.kt$"), null, true); + } + + @Test + @TestMetadata("classMember.kt") + public void testClassMember() throws Exception { + runTest("analysis/analysis-api/testData/resolveExtensions/referenceResolve/singleModule/classMember.kt"); + } + + @Test + @TestMetadata("extensionFunction.kt") + public void testExtensionFunction() throws Exception { + runTest("analysis/analysis-api/testData/resolveExtensions/referenceResolve/singleModule/extensionFunction.kt"); + } + + @Test + @TestMetadata("shadowedDeclaration.kt") + public void testShadowedDeclaration() throws Exception { + runTest("analysis/analysis-api/testData/resolveExtensions/referenceResolve/singleModule/shadowedDeclaration.kt"); + } + + @Test + @TestMetadata("shadowedJava.kt") + public void testShadowedJava() throws Exception { + runTest("analysis/analysis-api/testData/resolveExtensions/referenceResolve/singleModule/shadowedJava.kt"); + } + + @Test + @TestMetadata("shadowedOverload.kt") + public void testShadowedOverload() throws Exception { + runTest("analysis/analysis-api/testData/resolveExtensions/referenceResolve/singleModule/shadowedOverload.kt"); + } + + @Test + @TestMetadata("topLevelFunction.kt") + public void testTopLevelFunction() throws Exception { + runTest("analysis/analysis-api/testData/resolveExtensions/referenceResolve/singleModule/topLevelFunction.kt"); + } + } +} diff --git a/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/references/FirIdeNormalAnalysisSourceModuleSingleModuleReferenceResolveWithResolveExtensionTestGenerated.java b/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/references/FirIdeNormalAnalysisSourceModuleSingleModuleReferenceResolveWithResolveExtensionTestGenerated.java deleted file mode 100644 index 9074af9d0df..00000000000 --- a/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/references/FirIdeNormalAnalysisSourceModuleSingleModuleReferenceResolveWithResolveExtensionTestGenerated.java +++ /dev/null @@ -1,84 +0,0 @@ -/* - * 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.AbstractSingleModuleReferenceResolveWithResolveExtensionTest; -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 FirIdeNormalAnalysisSourceModuleSingleModuleReferenceResolveWithResolveExtensionTestGenerated extends AbstractSingleModuleReferenceResolveWithResolveExtensionTest { - @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("shadowedDeclaration.kt") - public void testShadowedDeclaration() throws Exception { - runTest("analysis/analysis-api/testData/resolveExtensions/referenceResolve/shadowedDeclaration.kt"); - } - - @Test - @TestMetadata("shadowedJava.kt") - public void testShadowedJava() throws Exception { - runTest("analysis/analysis-api/testData/resolveExtensions/referenceResolve/shadowedJava.kt"); - } - - @Test - @TestMetadata("shadowedOverload.kt") - public void testShadowedOverload() throws Exception { - runTest("analysis/analysis-api/testData/resolveExtensions/referenceResolve/shadowedOverload.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/AbstractMultiModuleReferenceResolveWithResolveExtensionTest.kt b/analysis/analysis-api-impl-base/tests/org/jetbrains/kotlin/analysis/api/impl/base/test/cases/references/AbstractMultiModuleReferenceResolveWithResolveExtensionTest.kt deleted file mode 100644 index 4f58b7b08e7..00000000000 --- a/analysis/analysis-api-impl-base/tests/org/jetbrains/kotlin/analysis/api/impl/base/test/cases/references/AbstractMultiModuleReferenceResolveWithResolveExtensionTest.kt +++ /dev/null @@ -1,24 +0,0 @@ -/* - * 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.cases.references - -import com.intellij.psi.search.GlobalSearchScope -import org.jetbrains.kotlin.analysis.api.impl.base.test.util.KtMultiModuleResolveExtensionProviderForTest -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.KtSourceModule -import org.jetbrains.kotlin.name.FqName - -abstract class AbstractMultiModuleReferenceResolveWithResolveExtensionTest : AbstractReferenceResolveWithResolveExtensionTest() { - override fun createResolveExtensionProvider( - files: List, - packages: Set, - shadowedScope: GlobalSearchScope, - ): KtResolveExtensionProvider = - KtMultiModuleResolveExtensionProviderForTest(files, packages, shadowedScope) { module -> - module is KtSourceModule && module.moduleName == "extendedModule" - } -} 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 index 9253a9782be..a605d5e33bc 100644 --- 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 @@ -5,74 +5,12 @@ package org.jetbrains.kotlin.analysis.api.impl.base.test.cases.references -import com.intellij.openapi.module.Module -import com.intellij.openapi.vfs.VirtualFile -import com.intellij.psi.search.GlobalSearchScope -import org.jetbrains.kotlin.analysis.api.impl.base.test.util.KtResolveExtensionFileForTests -import org.jetbrains.kotlin.analysis.api.impl.base.test.util.KtResolveExtensionProviderForTestPreAnalysisHandler -import org.jetbrains.kotlin.analysis.api.resolve.extensions.KtResolveExtensionFile -import org.jetbrains.kotlin.analysis.api.resolve.extensions.KtResolveExtensionProvider -import org.jetbrains.kotlin.name.FqName -import org.jetbrains.kotlin.test.bind +import org.jetbrains.kotlin.analysis.api.impl.base.test.cases.resolve.extensions.KtResolveExtensionTestSupport import org.jetbrains.kotlin.test.builders.TestConfigurationBuilder abstract class AbstractReferenceResolveWithResolveExtensionTest : AbstractReferenceResolveTest() { - abstract fun createResolveExtensionProvider( - files: List, - packages: Set, - shadowedScope: GlobalSearchScope, - ): KtResolveExtensionProvider - override fun configureTest(builder: TestConfigurationBuilder) { super.configureTest(builder) - val provider = createResolveExtensionProvider( - files = listOf( - KtResolveExtensionFileForTests( - "extension1.kt", - packageName = FqName("generated"), - topLevelClassifiersNames = setOf("GeneratedClass1"), - topLevelCallableNames = setOf( - "generatedTopLevelFunction1", - "generatedTopLevelExtensionFunction1", - "generatedOverloadedExtensionFunction", - ), - fileText = """|package generated - | - |class GeneratedClass1 { - | fun generatedClassMember1(): Int - |} - | - |fun generatedTopLevelFunction1(): GeneratedClass2 - | - |fun String.generatedTopLevelExtensionFunction1(boolean: Boolean): Int - | - |fun Any.generatedOverloadedExtensionFunction(): Int - """.trimMargin() - ), - KtResolveExtensionFileForTests( - "extension2.kt", - packageName = FqName("generated"), - topLevelClassifiersNames = setOf("GeneratedClass2"), - topLevelCallableNames = setOf(), - fileText = """|package generated - | - |class GeneratedClass2 { - | fun generatedClassMember2(): GeneratedClass1 - |} - """.trimMargin(), - ) - ), - packages = setOf(FqName("generated")), - shadowedScope = object : GlobalSearchScope() { - override fun contains(file: VirtualFile): Boolean = ".hidden." in file.name - - override fun isSearchInModuleContent(aModule: Module): Boolean = false - - override fun isSearchInLibraries(): Boolean = false - } - ) - with(builder) { - usePreAnalysisHandlers(::KtResolveExtensionProviderForTestPreAnalysisHandler.bind(listOf(provider))) - } + KtResolveExtensionTestSupport.configure(builder) } } diff --git a/analysis/analysis-api-impl-base/tests/org/jetbrains/kotlin/analysis/api/impl/base/test/cases/references/AbstractSingleModuleReferenceResolveWithResolveExtensionTest.kt b/analysis/analysis-api-impl-base/tests/org/jetbrains/kotlin/analysis/api/impl/base/test/cases/references/AbstractSingleModuleReferenceResolveWithResolveExtensionTest.kt deleted file mode 100644 index 4b5b3e39309..00000000000 --- a/analysis/analysis-api-impl-base/tests/org/jetbrains/kotlin/analysis/api/impl/base/test/cases/references/AbstractSingleModuleReferenceResolveWithResolveExtensionTest.kt +++ /dev/null @@ -1,21 +0,0 @@ -/* - * 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.cases.references - -import com.intellij.psi.search.GlobalSearchScope -import org.jetbrains.kotlin.analysis.api.impl.base.test.util.KtSingleModuleResolveExtensionProviderForTest -import org.jetbrains.kotlin.analysis.api.resolve.extensions.KtResolveExtensionFile -import org.jetbrains.kotlin.analysis.api.resolve.extensions.KtResolveExtensionProvider -import org.jetbrains.kotlin.name.FqName - -abstract class AbstractSingleModuleReferenceResolveWithResolveExtensionTest : AbstractReferenceResolveWithResolveExtensionTest() { - override fun createResolveExtensionProvider( - files: List, - packages: Set, - shadowedScope: GlobalSearchScope, - ): KtResolveExtensionProvider = - KtSingleModuleResolveExtensionProviderForTest(files, packages, shadowedScope) -} 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/cases/resolve/extensions/KtResolveExtensionForTest.kt similarity index 68% rename from analysis/analysis-api-impl-base/tests/org/jetbrains/kotlin/analysis/api/impl/base/test/util/KtResolveExtensionForTest.kt rename to analysis/analysis-api-impl-base/tests/org/jetbrains/kotlin/analysis/api/impl/base/test/cases/resolve/extensions/KtResolveExtensionForTest.kt index ce0ae399c73..3e8e6a6eb4a 100644 --- 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/cases/resolve/extensions/KtResolveExtensionForTest.kt @@ -3,7 +3,7 @@ * 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 +package org.jetbrains.kotlin.analysis.api.impl.base.test.cases.resolve.extensions import com.intellij.mock.MockProject import com.intellij.openapi.util.ModificationTracker @@ -19,46 +19,26 @@ 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 KtSingleModuleResolveExtensionProviderForTest( +class KtResolveExtensionProviderForTest( private val files: List, private val packages: Set, private val shadowedScope: GlobalSearchScope, -) : KtResolveExtensionProvider() { - override fun provideExtensionsFor(module: KtModule): List { - return listOf(KtResolveExtensionForTest(files, packages, shadowedScope)) - } -} - -class KtMultiModuleResolveExtensionProviderForTest( - private val files: List, - private val packages: Set, - private val shadowedScope: GlobalSearchScope, - private val hasResolveExtension: (KtModule) -> Boolean, + private val hasResolveExtension: (KtModule) -> Boolean = { true } ) : KtResolveExtensionProvider() { override fun provideExtensionsFor(module: KtModule): List { if (!hasResolveExtension(module)) return emptyList() return listOf(KtResolveExtensionForTest(files, packages, shadowedScope)) } -} -class KtResolveExtensionProviderForTestPreAnalysisHandler( - testServices: TestServices, - private val providers: List, -) : PreAnalysisHandler(testServices) { - override fun preprocessModuleStructure(moduleStructure: TestModuleStructure) { + fun register(testServices: TestServices) { val project = testServices.environmentManager.getProject() as MockProject - val extensionPoint = project.extensionArea.getExtensionPoint(KtResolveExtensionProvider.EP_NAME) - for (provider in providers) { - extensionPoint.registerExtension(provider, project) - } + val extensionPoint = project.extensionArea.getExtensionPoint(EP_NAME) + extensionPoint.registerExtension(this, project) } } - class KtResolveExtensionForTest( private val files: List, private val packages: Set, @@ -76,6 +56,7 @@ class KtResolveExtensionFileForTests( topLevelClassifiersNames: Set, topLevelCallableNames: Set, private val fileText: String, + private val psiTargetProvider: KtResolveExtensionReferencePsiTargetsProvider? = null ) : KtResolveExtensionFile() { private val topLevelClassifiersNames: Set = topLevelClassifiersNames.mapTo(mutableSetOf()) { Name.identifier(it) } @@ -87,11 +68,12 @@ class KtResolveExtensionFileForTests( override fun buildFileText(): String = fileText - override fun createPsiTargetsProvider(): KtResolveExtensionReferencePsiTargetsProvider { - return object : KtResolveExtensionReferencePsiTargetsProvider() { - override fun KtAnalysisSession.getReferenceTargetsForSymbol(symbol: KtSymbol): Collection { - return emptyList() - } - } + private object EmptyReferencePsiTargetsProvider : KtResolveExtensionReferencePsiTargetsProvider() { + override fun KtAnalysisSession.getReferenceTargetsForSymbol(symbol: KtSymbol): Collection = + emptyList() } -} \ No newline at end of file + + override fun createPsiTargetsProvider(): KtResolveExtensionReferencePsiTargetsProvider = + psiTargetProvider ?: EmptyReferencePsiTargetsProvider +} + diff --git a/analysis/analysis-api-impl-base/tests/org/jetbrains/kotlin/analysis/api/impl/base/test/cases/resolve/extensions/KtResolveExtensionTestSupport.kt b/analysis/analysis-api-impl-base/tests/org/jetbrains/kotlin/analysis/api/impl/base/test/cases/resolve/extensions/KtResolveExtensionTestSupport.kt new file mode 100644 index 00000000000..d35767f993d --- /dev/null +++ b/analysis/analysis-api-impl-base/tests/org/jetbrains/kotlin/analysis/api/impl/base/test/cases/resolve/extensions/KtResolveExtensionTestSupport.kt @@ -0,0 +1,141 @@ +/* + * 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.cases.resolve.extensions + +import com.intellij.openapi.module.Module +import com.intellij.openapi.vfs.VirtualFile +import com.intellij.psi.search.GlobalSearchScope +import org.jetbrains.kotlin.analysis.api.resolve.extensions.KtResolveExtensionFile +import org.jetbrains.kotlin.analysis.project.structure.KtSourceModule +import org.jetbrains.kotlin.name.FqName +import org.jetbrains.kotlin.test.TestInfrastructureInternals +import org.jetbrains.kotlin.test.builders.TestConfigurationBuilder +import org.jetbrains.kotlin.test.directives.ConfigurationDirectives +import org.jetbrains.kotlin.test.directives.model.DirectiveApplicability +import org.jetbrains.kotlin.test.directives.model.SimpleDirectivesContainer +import org.jetbrains.kotlin.test.model.TestFile +import org.jetbrains.kotlin.test.model.TestModule +import org.jetbrains.kotlin.test.services.ModuleStructureTransformer +import org.jetbrains.kotlin.test.services.TestModuleStructure +import org.jetbrains.kotlin.test.services.TestServices +import org.jetbrains.kotlin.test.services.impl.TestModuleStructureImpl + +object KtResolveExtensionTestSupport { + object Directives : SimpleDirectivesContainer() { + val WITH_RESOLVE_EXTENSION by directive( + "Enable resolve extension for this module", + DirectiveApplicability.Module, + ) + + val RESOLVE_EXTENSION_PACKAGE by valueDirective( + "Package name for resolve extension or resolve extension file", + DirectiveApplicability.Any, + ::FqName, + ) + val RESOLVE_EXTENSION_SHADOWED by valueDirective( + "File name regex(es) to shadow in resolve extension", + DirectiveApplicability.Module, + ::Regex, + ) + + val RESOLVE_EXTENSION_FILE by directive( + "Treat this file as a KtResolveExtensionFile and remove it from the module", + DirectiveApplicability.File, + ) + val RESOLVE_EXTENSION_CLASSIFIER by stringDirective( + "Name(s) of top-level classifier(s) in this resolve extension file", + DirectiveApplicability.File, + ) + val RESOLVE_EXTENSION_CALLABLE by stringDirective( + "Names of top-level callables in this resolve extension file", + DirectiveApplicability.File, + ) + } + + @OptIn(TestInfrastructureInternals::class) + private class ResolveExtensionDirectiveModuleStructureTransformer( + private val testServices: TestServices, + ) : ModuleStructureTransformer() { + override fun transformModuleStructure(moduleStructure: TestModuleStructure): TestModuleStructure { + check(Directives.WITH_RESOLVE_EXTENSION in moduleStructure.allDirectives) { + "configureResolveExtensions() was called, but no modules specify WITH_RESOLVE_EXTENSION." + } + + return TestModuleStructureImpl( + moduleStructure.modules.map { it.transformAndRegisterResolveExtension() }, + moduleStructure.originalTestDataFiles, + ) + } + + private fun TestModule.transformAndRegisterResolveExtension(): TestModule { + val (resolveExtensionTestFiles, regularFiles) = files.partition { Directives.RESOLVE_EXTENSION_FILE in it.directives } + if (Directives.WITH_RESOLVE_EXTENSION !in directives) { + check(resolveExtensionTestFiles.isEmpty()) { + "Module $name has resolve extension files, but does not specify WITH_RESOLVE_EXTENSION" + } + return this + } + + val packageNames = directives[Directives.RESOLVE_EXTENSION_PACKAGE].toSet() + check(packageNames.isNotEmpty()) { + "Module $name does not specify any RESOLVE_EXTENSION_PACKAGE" + } + + val shadowedPatterns = directives[Directives.RESOLVE_EXTENSION_SHADOWED] + val shadowedScope = if (shadowedPatterns.isNotEmpty()) { + object : GlobalSearchScope() { + override fun contains(file: VirtualFile): Boolean = + shadowedPatterns.any { it.containsMatchIn(file.name) } + + override fun isSearchInModuleContent(module: Module): Boolean = true + + override fun isSearchInLibraries(): Boolean = true + } + } else { + GlobalSearchScope.EMPTY_SCOPE + } + + val singleModulePackageName = packageNames.singleOrNull() + val ktResolveExtensionFiles = + resolveExtensionTestFiles.map { it.toKtResolveExtensionFile(singleModulePackageName) } + + val provider = KtResolveExtensionProviderForTest(ktResolveExtensionFiles, packageNames, shadowedScope) { + it is KtSourceModule && it.moduleName == name + } + provider.register(testServices) + + return this.copy(files = regularFiles) + } + + private fun TestFile.toKtResolveExtensionFile(moduleSinglePackageName: FqName?): KtResolveExtensionFile { + val packageName = directives[Directives.RESOLVE_EXTENSION_PACKAGE].singleOrNull() + ?: moduleSinglePackageName + ?: error("Extension file $name must specify exactly one RESOLVE_EXTENSION_PACKAGE") + val classifierNames = directives[Directives.RESOLVE_EXTENSION_CLASSIFIER].toSet() + val callableNames = directives[Directives.RESOLVE_EXTENSION_CALLABLE].toSet() + check(classifierNames.isNotEmpty() || callableNames.isNotEmpty()) { + "Extension file $name does not specify any RESOLVE_EXTENSION_CLASSIFIER or RESOLVE_EXTENSION_CALLABLE" + } + + return KtResolveExtensionFileForTests( + fileName = name, + packageName = packageName, + topLevelClassifiersNames = classifierNames, + topLevelCallableNames = callableNames, + fileText = originalContent, + ) + } + } + + @OptIn(TestInfrastructureInternals::class) + fun configure(builder: TestConfigurationBuilder) = with(builder) { + defaultDirectives { + +ConfigurationDirectives.WITH_STDLIB + } + useDirectives(Directives) + useModuleStructureTransformers(KtResolveExtensionTestSupport::ResolveExtensionDirectiveModuleStructureTransformer) + } +} \ 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/FirStandaloneNormalAnalysisSourceModuleMultiModuleReferenceResolveWithResolveExtensionTestGenerated.java b/analysis/analysis-api-standalone/tests-gen/org/jetbrains/kotlin/analysis/api/standalone/fir/test/cases/generated/cases/references/FirStandaloneNormalAnalysisSourceModuleMultiModuleReferenceResolveWithResolveExtensionTestGenerated.java deleted file mode 100644 index 76967f1c4e1..00000000000 --- a/analysis/analysis-api-standalone/tests-gen/org/jetbrains/kotlin/analysis/api/standalone/fir/test/cases/generated/cases/references/FirStandaloneNormalAnalysisSourceModuleMultiModuleReferenceResolveWithResolveExtensionTestGenerated.java +++ /dev/null @@ -1,94 +0,0 @@ -/* - * 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.AbstractMultiModuleReferenceResolveWithResolveExtensionTest; -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/multiModule/referenceResolve") -@TestDataPath("$PROJECT_ROOT") -public class FirStandaloneNormalAnalysisSourceModuleMultiModuleReferenceResolveWithResolveExtensionTestGenerated extends AbstractMultiModuleReferenceResolveWithResolveExtensionTest { - @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/multiModule/referenceResolve"), Pattern.compile("^(.+)\\.kt$"), null, true); - } - - @Nested - @TestMetadata("analysis/analysis-api/testData/resolveExtensions/multiModule/referenceResolve/extendedModuleDependency") - @TestDataPath("$PROJECT_ROOT") - public class ExtendedModuleDependency { - @Test - public void testAllFilesPresentInExtendedModuleDependency() throws Exception { - KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("analysis/analysis-api/testData/resolveExtensions/multiModule/referenceResolve/extendedModuleDependency"), Pattern.compile("^(.+)\\.kt$"), null, true); - } - - @Test - @TestMetadata("classMember.kt") - public void testClassMember() throws Exception { - runTest("analysis/analysis-api/testData/resolveExtensions/multiModule/referenceResolve/extendedModuleDependency/classMember.kt"); - } - - @Test - @TestMetadata("extensionFunction.kt") - public void testExtensionFunction() throws Exception { - runTest("analysis/analysis-api/testData/resolveExtensions/multiModule/referenceResolve/extendedModuleDependency/extensionFunction.kt"); - } - - @Test - @TestMetadata("shadowedDeclaration.kt") - public void testShadowedDeclaration() throws Exception { - runTest("analysis/analysis-api/testData/resolveExtensions/multiModule/referenceResolve/extendedModuleDependency/shadowedDeclaration.kt"); - } - - @Test - @TestMetadata("shadowedJava.kt") - public void testShadowedJava() throws Exception { - runTest("analysis/analysis-api/testData/resolveExtensions/multiModule/referenceResolve/extendedModuleDependency/shadowedJava.kt"); - } - - @Test - @TestMetadata("shadowedOverload.kt") - public void testShadowedOverload() throws Exception { - runTest("analysis/analysis-api/testData/resolveExtensions/multiModule/referenceResolve/extendedModuleDependency/shadowedOverload.kt"); - } - - @Test - @TestMetadata("topLevelFunction.kt") - public void testTopLevelFunction() throws Exception { - runTest("analysis/analysis-api/testData/resolveExtensions/multiModule/referenceResolve/extendedModuleDependency/topLevelFunction.kt"); - } - } -} 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..9ce21eaeeb8 --- /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,150 @@ +/* + * 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); + } + + @Nested + @TestMetadata("analysis/analysis-api/testData/resolveExtensions/referenceResolve/multiModule") + @TestDataPath("$PROJECT_ROOT") + public class MultiModule { + @Test + public void testAllFilesPresentInMultiModule() throws Exception { + KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("analysis/analysis-api/testData/resolveExtensions/referenceResolve/multiModule"), Pattern.compile("^(.+)\\.kt$"), null, true); + } + + @Nested + @TestMetadata("analysis/analysis-api/testData/resolveExtensions/referenceResolve/multiModule/extendedModuleDependency") + @TestDataPath("$PROJECT_ROOT") + public class ExtendedModuleDependency { + @Test + public void testAllFilesPresentInExtendedModuleDependency() throws Exception { + KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("analysis/analysis-api/testData/resolveExtensions/referenceResolve/multiModule/extendedModuleDependency"), Pattern.compile("^(.+)\\.kt$"), null, true); + } + + @Test + @TestMetadata("classMember.kt") + public void testClassMember() throws Exception { + runTest("analysis/analysis-api/testData/resolveExtensions/referenceResolve/multiModule/extendedModuleDependency/classMember.kt"); + } + + @Test + @TestMetadata("extensionFunction.kt") + public void testExtensionFunction() throws Exception { + runTest("analysis/analysis-api/testData/resolveExtensions/referenceResolve/multiModule/extendedModuleDependency/extensionFunction.kt"); + } + + @Test + @TestMetadata("shadowedDeclaration.kt") + public void testShadowedDeclaration() throws Exception { + runTest("analysis/analysis-api/testData/resolveExtensions/referenceResolve/multiModule/extendedModuleDependency/shadowedDeclaration.kt"); + } + + @Test + @TestMetadata("shadowedJava.kt") + public void testShadowedJava() throws Exception { + runTest("analysis/analysis-api/testData/resolveExtensions/referenceResolve/multiModule/extendedModuleDependency/shadowedJava.kt"); + } + + @Test + @TestMetadata("shadowedOverload.kt") + public void testShadowedOverload() throws Exception { + runTest("analysis/analysis-api/testData/resolveExtensions/referenceResolve/multiModule/extendedModuleDependency/shadowedOverload.kt"); + } + + @Test + @TestMetadata("topLevelFunction.kt") + public void testTopLevelFunction() throws Exception { + runTest("analysis/analysis-api/testData/resolveExtensions/referenceResolve/multiModule/extendedModuleDependency/topLevelFunction.kt"); + } + } + } + + @Nested + @TestMetadata("analysis/analysis-api/testData/resolveExtensions/referenceResolve/singleModule") + @TestDataPath("$PROJECT_ROOT") + public class SingleModule { + @Test + public void testAllFilesPresentInSingleModule() throws Exception { + KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("analysis/analysis-api/testData/resolveExtensions/referenceResolve/singleModule"), Pattern.compile("^(.+)\\.kt$"), null, true); + } + + @Test + @TestMetadata("classMember.kt") + public void testClassMember() throws Exception { + runTest("analysis/analysis-api/testData/resolveExtensions/referenceResolve/singleModule/classMember.kt"); + } + + @Test + @TestMetadata("extensionFunction.kt") + public void testExtensionFunction() throws Exception { + runTest("analysis/analysis-api/testData/resolveExtensions/referenceResolve/singleModule/extensionFunction.kt"); + } + + @Test + @TestMetadata("shadowedDeclaration.kt") + public void testShadowedDeclaration() throws Exception { + runTest("analysis/analysis-api/testData/resolveExtensions/referenceResolve/singleModule/shadowedDeclaration.kt"); + } + + @Test + @TestMetadata("shadowedJava.kt") + public void testShadowedJava() throws Exception { + runTest("analysis/analysis-api/testData/resolveExtensions/referenceResolve/singleModule/shadowedJava.kt"); + } + + @Test + @TestMetadata("shadowedOverload.kt") + public void testShadowedOverload() throws Exception { + runTest("analysis/analysis-api/testData/resolveExtensions/referenceResolve/singleModule/shadowedOverload.kt"); + } + + @Test + @TestMetadata("topLevelFunction.kt") + public void testTopLevelFunction() throws Exception { + runTest("analysis/analysis-api/testData/resolveExtensions/referenceResolve/singleModule/topLevelFunction.kt"); + } + } +} diff --git a/analysis/analysis-api-standalone/tests-gen/org/jetbrains/kotlin/analysis/api/standalone/fir/test/cases/generated/cases/references/FirStandaloneNormalAnalysisSourceModuleSingleModuleReferenceResolveWithResolveExtensionTestGenerated.java b/analysis/analysis-api-standalone/tests-gen/org/jetbrains/kotlin/analysis/api/standalone/fir/test/cases/generated/cases/references/FirStandaloneNormalAnalysisSourceModuleSingleModuleReferenceResolveWithResolveExtensionTestGenerated.java deleted file mode 100644 index 4e746e053f2..00000000000 --- a/analysis/analysis-api-standalone/tests-gen/org/jetbrains/kotlin/analysis/api/standalone/fir/test/cases/generated/cases/references/FirStandaloneNormalAnalysisSourceModuleSingleModuleReferenceResolveWithResolveExtensionTestGenerated.java +++ /dev/null @@ -1,84 +0,0 @@ -/* - * 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.AbstractSingleModuleReferenceResolveWithResolveExtensionTest; -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 FirStandaloneNormalAnalysisSourceModuleSingleModuleReferenceResolveWithResolveExtensionTestGenerated extends AbstractSingleModuleReferenceResolveWithResolveExtensionTest { - @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("shadowedDeclaration.kt") - public void testShadowedDeclaration() throws Exception { - runTest("analysis/analysis-api/testData/resolveExtensions/referenceResolve/shadowedDeclaration.kt"); - } - - @Test - @TestMetadata("shadowedJava.kt") - public void testShadowedJava() throws Exception { - runTest("analysis/analysis-api/testData/resolveExtensions/referenceResolve/shadowedJava.kt"); - } - - @Test - @TestMetadata("shadowedOverload.kt") - public void testShadowedOverload() throws Exception { - runTest("analysis/analysis-api/testData/resolveExtensions/referenceResolve/shadowedOverload.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/multiModule/referenceResolve/extendedModuleDependency/classMember.kt b/analysis/analysis-api/testData/resolveExtensions/multiModule/referenceResolve/extendedModuleDependency/classMember.kt deleted file mode 100644 index 116500425fe..00000000000 --- a/analysis/analysis-api/testData/resolveExtensions/multiModule/referenceResolve/extendedModuleDependency/classMember.kt +++ /dev/null @@ -1,11 +0,0 @@ -// MODULE: extendedModule - -// MODULE: dependency2 - -// MODULE: main(extendedModule, dependency2)()() -import generated.* - -fun main() { - val a = GeneratedClass2() - a.generatedClassMember2() -} diff --git a/analysis/analysis-api/testData/resolveExtensions/multiModule/referenceResolve/extendedModuleDependency/extensionFunction.kt b/analysis/analysis-api/testData/resolveExtensions/multiModule/referenceResolve/extendedModuleDependency/extensionFunction.kt deleted file mode 100644 index 40dc4799713..00000000000 --- a/analysis/analysis-api/testData/resolveExtensions/multiModule/referenceResolve/extendedModuleDependency/extensionFunction.kt +++ /dev/null @@ -1,10 +0,0 @@ -// MODULE: extendedModule - -// MODULE: dependency2 - -// MODULE: main(extendedModule, dependency2)()() -import generated.* - -fun main() { - "string".generatedTopLevelExtensionFunction1(true) -} diff --git a/analysis/analysis-api/testData/resolveExtensions/multiModule/referenceResolve/extendedModuleDependency/topLevelFunction.kt b/analysis/analysis-api/testData/resolveExtensions/multiModule/referenceResolve/extendedModuleDependency/topLevelFunction.kt deleted file mode 100644 index 5e24e813076..00000000000 --- a/analysis/analysis-api/testData/resolveExtensions/multiModule/referenceResolve/extendedModuleDependency/topLevelFunction.kt +++ /dev/null @@ -1,10 +0,0 @@ -// MODULE: extendedModule - -// MODULE: dependency2 - -// MODULE: main(extendedModule, dependency2)()() -import generated.* - -fun main() { - generatedTopLevelFunction1() -} diff --git a/analysis/analysis-api/testData/resolveExtensions/referenceResolve/classMember.kt b/analysis/analysis-api/testData/resolveExtensions/referenceResolve/classMember.kt deleted file mode 100644 index ff518d8a726..00000000000 --- a/analysis/analysis-api/testData/resolveExtensions/referenceResolve/classMember.kt +++ /dev/null @@ -1,6 +0,0 @@ -import generated.* - -fun main() { - val a = GeneratedClass2() - a.generatedClassMember2() -} \ No newline at end of file diff --git a/analysis/analysis-api/testData/resolveExtensions/referenceResolve/extensionFunction.kt b/analysis/analysis-api/testData/resolveExtensions/referenceResolve/extensionFunction.kt deleted file mode 100644 index 0d7a0f8f1a2..00000000000 --- a/analysis/analysis-api/testData/resolveExtensions/referenceResolve/extensionFunction.kt +++ /dev/null @@ -1,5 +0,0 @@ -import generated.* - -fun main() { - "string".generatedTopLevelExtensionFunction1(true) -} \ No newline at end of file diff --git a/analysis/analysis-api/testData/resolveExtensions/referenceResolve/multiModule/extendedModuleDependency/classMember.kt b/analysis/analysis-api/testData/resolveExtensions/referenceResolve/multiModule/extendedModuleDependency/classMember.kt new file mode 100644 index 00000000000..1e1a2fa1dc4 --- /dev/null +++ b/analysis/analysis-api/testData/resolveExtensions/referenceResolve/multiModule/extendedModuleDependency/classMember.kt @@ -0,0 +1,29 @@ +// MODULE: extendedModule +// WITH_RESOLVE_EXTENSION +// RESOLVE_EXTENSION_PACKAGE: generated + +// FILE: resolve1.kt +// RESOLVE_EXTENSION_FILE +package generated + +// RESOLVE_EXTENSION_CLASSIFIER: GeneratedClass1 +class GeneratedClass1 + +// FILE: resolve2.kt +// RESOLVE_EXTENSION_FILE +package generated + +// RESOLVE_EXTENSION_CLASSIFIER: GeneratedClass2 +class GeneratedClass2() { + fun generatedClassMember2(): GeneratedClass1 = TODO() +} + +// MODULE: dependency2 + +// MODULE: main(extendedModule, dependency2)()() +import generated.* + +fun main() { + val a = GeneratedClass2() + a.generatedClassMember2() +} diff --git a/analysis/analysis-api/testData/resolveExtensions/multiModule/referenceResolve/extendedModuleDependency/classMember.txt b/analysis/analysis-api/testData/resolveExtensions/referenceResolve/multiModule/extendedModuleDependency/classMember.txt similarity index 100% rename from analysis/analysis-api/testData/resolveExtensions/multiModule/referenceResolve/extendedModuleDependency/classMember.txt rename to analysis/analysis-api/testData/resolveExtensions/referenceResolve/multiModule/extendedModuleDependency/classMember.txt diff --git a/analysis/analysis-api/testData/resolveExtensions/referenceResolve/multiModule/extendedModuleDependency/extensionFunction.kt b/analysis/analysis-api/testData/resolveExtensions/referenceResolve/multiModule/extendedModuleDependency/extensionFunction.kt new file mode 100644 index 00000000000..a28d6f736e9 --- /dev/null +++ b/analysis/analysis-api/testData/resolveExtensions/referenceResolve/multiModule/extendedModuleDependency/extensionFunction.kt @@ -0,0 +1,19 @@ +// MODULE: extendedModule +// WITH_RESOLVE_EXTENSION +// RESOLVE_EXTENSION_PACKAGE: generated + +// FILE: extension.kt +// RESOLVE_EXTENSION_FILE +package generated + +// RESOLVE_EXTENSION_CALLABLE: generatedTopLevelExtensionFunction1 +fun String.generatedTopLevelExtensionFunction1(boolean: Boolean): Int + +// MODULE: dependency2 + +// MODULE: main(extendedModule, dependency2)()() +import generated.* + +fun main() { + "string".generatedTopLevelExtensionFunction1(true) +} diff --git a/analysis/analysis-api/testData/resolveExtensions/multiModule/referenceResolve/extendedModuleDependency/extensionFunction.txt b/analysis/analysis-api/testData/resolveExtensions/referenceResolve/multiModule/extendedModuleDependency/extensionFunction.txt similarity index 100% rename from analysis/analysis-api/testData/resolveExtensions/multiModule/referenceResolve/extendedModuleDependency/extensionFunction.txt rename to analysis/analysis-api/testData/resolveExtensions/referenceResolve/multiModule/extendedModuleDependency/extensionFunction.txt diff --git a/analysis/analysis-api/testData/resolveExtensions/multiModule/referenceResolve/extendedModuleDependency/shadowedDeclaration.kt b/analysis/analysis-api/testData/resolveExtensions/referenceResolve/multiModule/extendedModuleDependency/shadowedDeclaration.kt similarity index 68% rename from analysis/analysis-api/testData/resolveExtensions/multiModule/referenceResolve/extendedModuleDependency/shadowedDeclaration.kt rename to analysis/analysis-api/testData/resolveExtensions/referenceResolve/multiModule/extendedModuleDependency/shadowedDeclaration.kt index efff20c908e..d76582d4d65 100644 --- a/analysis/analysis-api/testData/resolveExtensions/multiModule/referenceResolve/extendedModuleDependency/shadowedDeclaration.kt +++ b/analysis/analysis-api/testData/resolveExtensions/referenceResolve/multiModule/extendedModuleDependency/shadowedDeclaration.kt @@ -1,6 +1,10 @@ // UNRESOLVED_REFERENCE // MODULE: extendedModule +// WITH_RESOLVE_EXTENSION +// RESOLVE_EXTENSION_PACKAGE: generated +// RESOLVE_EXTENSION_SHADOWED: \.hidden\.kt$ + // FILE: declarations.hidden.kt package foo diff --git a/analysis/analysis-api/testData/resolveExtensions/multiModule/referenceResolve/extendedModuleDependency/shadowedJava.kt b/analysis/analysis-api/testData/resolveExtensions/referenceResolve/multiModule/extendedModuleDependency/shadowedJava.kt similarity index 71% rename from analysis/analysis-api/testData/resolveExtensions/multiModule/referenceResolve/extendedModuleDependency/shadowedJava.kt rename to analysis/analysis-api/testData/resolveExtensions/referenceResolve/multiModule/extendedModuleDependency/shadowedJava.kt index a47c38e0782..7c0c8cd65b5 100644 --- a/analysis/analysis-api/testData/resolveExtensions/multiModule/referenceResolve/extendedModuleDependency/shadowedJava.kt +++ b/analysis/analysis-api/testData/resolveExtensions/referenceResolve/multiModule/extendedModuleDependency/shadowedJava.kt @@ -1,6 +1,10 @@ // UNRESOLVED_REFERENCE // MODULE: extendedModule +// WITH_RESOLVE_EXTENSION +// RESOLVE_EXTENSION_PACKAGE: generated +// RESOLVE_EXTENSION_SHADOWED: \.hidden\.[a-z]+$ + // FILE: TestClass.hidden.java package foo; diff --git a/analysis/analysis-api/testData/resolveExtensions/multiModule/referenceResolve/extendedModuleDependency/shadowedOverload.kt b/analysis/analysis-api/testData/resolveExtensions/referenceResolve/multiModule/extendedModuleDependency/shadowedOverload.kt similarity index 51% rename from analysis/analysis-api/testData/resolveExtensions/multiModule/referenceResolve/extendedModuleDependency/shadowedOverload.kt rename to analysis/analysis-api/testData/resolveExtensions/referenceResolve/multiModule/extendedModuleDependency/shadowedOverload.kt index 03d24c7e154..a4bd0b797f7 100644 --- a/analysis/analysis-api/testData/resolveExtensions/multiModule/referenceResolve/extendedModuleDependency/shadowedOverload.kt +++ b/analysis/analysis-api/testData/resolveExtensions/referenceResolve/multiModule/extendedModuleDependency/shadowedOverload.kt @@ -1,4 +1,15 @@ // MODULE: extendedModule +// WITH_RESOLVE_EXTENSION +// RESOLVE_EXTENSION_PACKAGE: generated +// RESOLVE_EXTENSION_SHADOWED: \.hidden\.kt$ + +// FILE: extension.kt +// RESOLVE_EXTENSION_FILE +package generated + +// RESOLVE_EXTENSION_CALLABLE: generatedOverloadedExtensionFunction +fun Any.generatedOverloadedExtensionFunction(): Int = TODO() + // FILE: generated.hidden.kt package generated diff --git a/analysis/analysis-api/testData/resolveExtensions/multiModule/referenceResolve/extendedModuleDependency/shadowedOverload.txt b/analysis/analysis-api/testData/resolveExtensions/referenceResolve/multiModule/extendedModuleDependency/shadowedOverload.txt similarity index 100% rename from analysis/analysis-api/testData/resolveExtensions/multiModule/referenceResolve/extendedModuleDependency/shadowedOverload.txt rename to analysis/analysis-api/testData/resolveExtensions/referenceResolve/multiModule/extendedModuleDependency/shadowedOverload.txt diff --git a/analysis/analysis-api/testData/resolveExtensions/referenceResolve/multiModule/extendedModuleDependency/topLevelFunction.kt b/analysis/analysis-api/testData/resolveExtensions/referenceResolve/multiModule/extendedModuleDependency/topLevelFunction.kt new file mode 100644 index 00000000000..155723d1cc0 --- /dev/null +++ b/analysis/analysis-api/testData/resolveExtensions/referenceResolve/multiModule/extendedModuleDependency/topLevelFunction.kt @@ -0,0 +1,31 @@ +// MODULE: extendedModule +// WITH_RESOLVE_EXTENSION +// RESOLVE_EXTENSION_PACKAGE: generated + +// FILE: extension.kt +// RESOLVE_EXTENSION_FILE +package generated + +// RESOLVE_EXTENSION_CLASSIFIER: GeneratedClass1 +class GeneratedClass1 + +// RESOLVE_EXTENSION_CALLABLE: generatedTopLevelFunction1 +fun generatedTopLevelFunction1(): GeneratedClass2 + +// FILE: extension2.kt +// RESOLVE_EXTENSION_FILE +package generated + +// RESOLVE_EXTENSION_CLASSIFIER: GeneratedClass2 +class GeneratedClass2 { + fun generatedClassMember2(): GeneratedClass1 +} + +// MODULE: dependency2 + +// MODULE: main(extendedModule, dependency2)()() +import generated.* + +fun main() { + generatedTopLevelFunction1() +} diff --git a/analysis/analysis-api/testData/resolveExtensions/multiModule/referenceResolve/extendedModuleDependency/topLevelFunction.txt b/analysis/analysis-api/testData/resolveExtensions/referenceResolve/multiModule/extendedModuleDependency/topLevelFunction.txt similarity index 100% rename from analysis/analysis-api/testData/resolveExtensions/multiModule/referenceResolve/extendedModuleDependency/topLevelFunction.txt rename to analysis/analysis-api/testData/resolveExtensions/referenceResolve/multiModule/extendedModuleDependency/topLevelFunction.txt diff --git a/analysis/analysis-api/testData/resolveExtensions/referenceResolve/shadowedOverload.kt b/analysis/analysis-api/testData/resolveExtensions/referenceResolve/shadowedOverload.kt deleted file mode 100644 index 2354781ef6d..00000000000 --- a/analysis/analysis-api/testData/resolveExtensions/referenceResolve/shadowedOverload.kt +++ /dev/null @@ -1,11 +0,0 @@ -// FILE: generated.hidden.kt -package generated - -fun String.generatedOverloadedExtensionFunction(): Int = TODO() - -// FILE: main.kt -import generated.* - -fun main() { - "string".generatedOverloadedExtensionFunction() -} \ No newline at end of file diff --git a/analysis/analysis-api/testData/resolveExtensions/referenceResolve/singleModule/classMember.kt b/analysis/analysis-api/testData/resolveExtensions/referenceResolve/singleModule/classMember.kt new file mode 100644 index 00000000000..143c938cbbd --- /dev/null +++ b/analysis/analysis-api/testData/resolveExtensions/referenceResolve/singleModule/classMember.kt @@ -0,0 +1,26 @@ +// WITH_RESOLVE_EXTENSION +// RESOLVE_EXTENSION_PACKAGE: generated + +// FILE: resolve1.kt +// RESOLVE_EXTENSION_FILE +package generated + +// RESOLVE_EXTENSION_CLASSIFIER: GeneratedClass1 +class GeneratedClass1 + +// FILE: resolve2.kt +// RESOLVE_EXTENSION_FILE +package generated + +// RESOLVE_EXTENSION_CLASSIFIER: GeneratedClass2 +class GeneratedClass2() { + fun generatedClassMember2(): GeneratedClass1 = TODO() +} + +// FILE: main.kt +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/singleModule/classMember.txt similarity index 100% rename from analysis/analysis-api/testData/resolveExtensions/referenceResolve/classMember.txt rename to analysis/analysis-api/testData/resolveExtensions/referenceResolve/singleModule/classMember.txt diff --git a/analysis/analysis-api/testData/resolveExtensions/referenceResolve/singleModule/extensionFunction.kt b/analysis/analysis-api/testData/resolveExtensions/referenceResolve/singleModule/extensionFunction.kt new file mode 100644 index 00000000000..36822e33b92 --- /dev/null +++ b/analysis/analysis-api/testData/resolveExtensions/referenceResolve/singleModule/extensionFunction.kt @@ -0,0 +1,16 @@ +// WITH_RESOLVE_EXTENSION +// RESOLVE_EXTENSION_PACKAGE: generated + +// FILE: extension.kt +// RESOLVE_EXTENSION_FILE +package generated + +// RESOLVE_EXTENSION_CALLABLE: generatedTopLevelExtensionFunction1 +fun String.generatedTopLevelExtensionFunction1(boolean: Boolean): Int + +// FILE: main.kt +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/singleModule/extensionFunction.txt similarity index 100% rename from analysis/analysis-api/testData/resolveExtensions/referenceResolve/extensionFunction.txt rename to analysis/analysis-api/testData/resolveExtensions/referenceResolve/singleModule/extensionFunction.txt diff --git a/analysis/analysis-api/testData/resolveExtensions/referenceResolve/shadowedDeclaration.kt b/analysis/analysis-api/testData/resolveExtensions/referenceResolve/singleModule/shadowedDeclaration.kt similarity index 57% rename from analysis/analysis-api/testData/resolveExtensions/referenceResolve/shadowedDeclaration.kt rename to analysis/analysis-api/testData/resolveExtensions/referenceResolve/singleModule/shadowedDeclaration.kt index 94a6ec38473..cd867dacc00 100644 --- a/analysis/analysis-api/testData/resolveExtensions/referenceResolve/shadowedDeclaration.kt +++ b/analysis/analysis-api/testData/resolveExtensions/referenceResolve/singleModule/shadowedDeclaration.kt @@ -1,3 +1,6 @@ +// WITH_RESOLVE_EXTENSION +// RESOLVE_EXTENSION_PACKAGE: generated +// RESOLVE_EXTENSION_SHADOWED: \.hidden\.kt$ // UNRESOLVED_REFERENCE // FILE: declarations.hidden.kt diff --git a/analysis/analysis-api/testData/resolveExtensions/referenceResolve/shadowedJava.kt b/analysis/analysis-api/testData/resolveExtensions/referenceResolve/singleModule/shadowedJava.kt similarity index 63% rename from analysis/analysis-api/testData/resolveExtensions/referenceResolve/shadowedJava.kt rename to analysis/analysis-api/testData/resolveExtensions/referenceResolve/singleModule/shadowedJava.kt index 36a4a5bee60..1d511a16930 100644 --- a/analysis/analysis-api/testData/resolveExtensions/referenceResolve/shadowedJava.kt +++ b/analysis/analysis-api/testData/resolveExtensions/referenceResolve/singleModule/shadowedJava.kt @@ -1,3 +1,6 @@ +// WITH_RESOLVE_EXTENSION +// RESOLVE_EXTENSION_PACKAGE: generated +// RESOLVE_EXTENSION_SHADOWED: \.hidden\.[a-z]+$ // UNRESOLVED_REFERENCE // FILE: TestClass.hidden.java diff --git a/analysis/analysis-api/testData/resolveExtensions/referenceResolve/singleModule/shadowedOverload.kt b/analysis/analysis-api/testData/resolveExtensions/referenceResolve/singleModule/shadowedOverload.kt new file mode 100644 index 00000000000..3c7fb69969f --- /dev/null +++ b/analysis/analysis-api/testData/resolveExtensions/referenceResolve/singleModule/shadowedOverload.kt @@ -0,0 +1,22 @@ +// WITH_RESOLVE_EXTENSION +// RESOLVE_EXTENSION_PACKAGE: generated +// RESOLVE_EXTENSION_SHADOWED: \.hidden\.kt$ + +// FILE: extension.kt +// RESOLVE_EXTENSION_FILE +package generated + +// RESOLVE_EXTENSION_CALLABLE: generatedOverloadedExtensionFunction +fun Any.generatedOverloadedExtensionFunction(): Int = TODO() + +// FILE: generated.hidden.kt +package generated + +fun String.generatedOverloadedExtensionFunction(): Int = TODO() + +// FILE: main.kt +import generated.* + +fun main() { + "string".generatedOverloadedExtensionFunction() +} \ No newline at end of file diff --git a/analysis/analysis-api/testData/resolveExtensions/referenceResolve/shadowedOverload.txt b/analysis/analysis-api/testData/resolveExtensions/referenceResolve/singleModule/shadowedOverload.txt similarity index 100% rename from analysis/analysis-api/testData/resolveExtensions/referenceResolve/shadowedOverload.txt rename to analysis/analysis-api/testData/resolveExtensions/referenceResolve/singleModule/shadowedOverload.txt diff --git a/analysis/analysis-api/testData/resolveExtensions/referenceResolve/singleModule/topLevelFunction.kt b/analysis/analysis-api/testData/resolveExtensions/referenceResolve/singleModule/topLevelFunction.kt new file mode 100644 index 00000000000..403e3060bac --- /dev/null +++ b/analysis/analysis-api/testData/resolveExtensions/referenceResolve/singleModule/topLevelFunction.kt @@ -0,0 +1,28 @@ +// WITH_RESOLVE_EXTENSION +// RESOLVE_EXTENSION_PACKAGE: generated + +// FILE: extension.kt +// RESOLVE_EXTENSION_FILE +package generated + +// RESOLVE_EXTENSION_CLASSIFIER: GeneratedClass1 +class GeneratedClass1 + +// RESOLVE_EXTENSION_CALLABLE: generatedTopLevelFunction1 +fun generatedTopLevelFunction1(): GeneratedClass2 + +// FILE: extension2.kt +// RESOLVE_EXTENSION_FILE +package generated + +// RESOLVE_EXTENSION_CLASSIFIER: GeneratedClass2 +class GeneratedClass2 { + fun generatedClassMember2(): GeneratedClass1 +} + +// FILE: main.kt +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/singleModule/topLevelFunction.txt similarity index 100% rename from analysis/analysis-api/testData/resolveExtensions/referenceResolve/topLevelFunction.txt rename to analysis/analysis-api/testData/resolveExtensions/referenceResolve/singleModule/topLevelFunction.txt diff --git a/analysis/analysis-api/testData/resolveExtensions/referenceResolve/topLevelFunction.kt b/analysis/analysis-api/testData/resolveExtensions/referenceResolve/topLevelFunction.kt deleted file mode 100644 index 3f08943ee3e..00000000000 --- a/analysis/analysis-api/testData/resolveExtensions/referenceResolve/topLevelFunction.kt +++ /dev/null @@ -1,5 +0,0 @@ -import generated.* - -fun main() { - generatedTopLevelFunction1() -} \ No newline at end of file diff --git a/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/builders/TestConfigurationBuilder.kt b/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/builders/TestConfigurationBuilder.kt index 935e96c1dd0..d629ec55f05 100644 --- a/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/builders/TestConfigurationBuilder.kt +++ b/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/builders/TestConfigurationBuilder.kt @@ -32,7 +32,7 @@ class TestConfigurationBuilder { private val preAnalysisHandlers: MutableList> = mutableListOf() private val additionalSourceProviders: MutableList> = mutableListOf() - private val moduleStructureTransformers: MutableList = mutableListOf() + private val moduleStructureTransformers: MutableList> = mutableListOf() private val metaTestConfigurators: MutableList> = mutableListOf() private val afterAnalysisCheckers: MutableList> = mutableListOf() @@ -180,6 +180,13 @@ class TestConfigurationBuilder { @TestInfrastructureInternals fun useModuleStructureTransformers(vararg transformers: ModuleStructureTransformer) { + for (transformer in transformers) { + moduleStructureTransformers += { _ -> transformer } + } + } + + @TestInfrastructureInternals + fun useModuleStructureTransformers(vararg transformers: Constructor) { moduleStructureTransformers += transformers } @@ -265,7 +272,7 @@ class TestConfigurationBuilder { get() = builder.preAnalysisHandlers val additionalSourceProviders: List> get() = builder.additionalSourceProviders - val moduleStructureTransformers: List + val moduleStructureTransformers: List> get() = builder.moduleStructureTransformers val metaTestConfigurators: List> get() = builder.metaTestConfigurators diff --git a/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/impl/TestConfigurationImpl.kt b/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/impl/TestConfigurationImpl.kt index 141897c03c1..e6bc94f6a60 100644 --- a/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/impl/TestConfigurationImpl.kt +++ b/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/impl/TestConfigurationImpl.kt @@ -34,7 +34,7 @@ class TestConfigurationImpl( additionalSourceProviders: List>, preAnalysisHandlers: List>, - moduleStructureTransformers: List, + moduleStructureTransformers: List>, metaTestConfigurators: List>, afterAnalysisCheckers: List>, @@ -83,7 +83,7 @@ class TestConfigurationImpl( additionalSourceProviders .map { it.invoke(testServices) } .also { it.registerDirectivesAndServices() }, - moduleStructureTransformers, + moduleStructureTransformers.map { it(testServices) }, this.environmentConfigurators ) 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 c3172ab75cd..2df8673993e 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 @@ -90,13 +90,9 @@ private fun AnalysisApiTestGroup.generateResolveExtensionsTests() { frontendIs(FrontendKind.Fir) and testModuleKindIs(TestModuleKind.Source) ) { - test(AbstractSingleModuleReferenceResolveWithResolveExtensionTest::class) { + test(AbstractReferenceResolveWithResolveExtensionTest::class) { model("referenceResolve") } - - test(AbstractMultiModuleReferenceResolveWithResolveExtensionTest::class) { - model("multiModule/referenceResolve") - } } }