diff --git a/analysis/analysis-api-fe10/tests-gen/org/jetbrains/kotlin/analysis/api/fe10/test/cases/generated/cases/components/psiTypeProvider/Fe10IdeNormalAnalysisSourceModuleAnalysisApiPsiTypeProviderMultiModuleTestGenerated.java b/analysis/analysis-api-fe10/tests-gen/org/jetbrains/kotlin/analysis/api/fe10/test/cases/generated/cases/components/psiTypeProvider/Fe10IdeNormalAnalysisSourceModuleAnalysisApiPsiTypeProviderMultiModuleTestGenerated.java new file mode 100644 index 00000000000..9eefa6b3368 --- /dev/null +++ b/analysis/analysis-api-fe10/tests-gen/org/jetbrains/kotlin/analysis/api/fe10/test/cases/generated/cases/components/psiTypeProvider/Fe10IdeNormalAnalysisSourceModuleAnalysisApiPsiTypeProviderMultiModuleTestGenerated.java @@ -0,0 +1,60 @@ +/* + * 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.fe10.test.cases.generated.cases.components.psiTypeProvider; + +import com.intellij.testFramework.TestDataPath; +import org.jetbrains.kotlin.test.util.KtTestUtil; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.kotlin.analysis.api.fe10.test.configurator.AnalysisApiFe10TestConfiguratorFactory; +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.components.psiTypeProvider.AbstractAnalysisApiPsiTypeProviderMultiModuleTest; +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/components/psiTypeProvider/psiType/multiModule") +@TestDataPath("$PROJECT_ROOT") +public class Fe10IdeNormalAnalysisSourceModuleAnalysisApiPsiTypeProviderMultiModuleTestGenerated extends AbstractAnalysisApiPsiTypeProviderMultiModuleTest { + @NotNull + @Override + public AnalysisApiTestConfigurator getConfigurator() { + return AnalysisApiFe10TestConfiguratorFactory.INSTANCE.createConfigurator( + new AnalysisApiTestConfiguratorFactoryData( + FrontendKind.Fe10, + TestModuleKind.Source, + AnalysisSessionMode.Normal, + AnalysisApiMode.Ide + ) + ); + } + + @Test + @TestMetadata("actual_jvmInline_typealias.kt") + public void testActual_jvmInline_typealias() throws Exception { + runTest("analysis/analysis-api/testData/components/psiTypeProvider/psiType/multiModule/actual_jvmInline_typealias.kt"); + } + + @Test + @TestMetadata("actual_typealias.kt") + public void testActual_typealias() throws Exception { + runTest("analysis/analysis-api/testData/components/psiTypeProvider/psiType/multiModule/actual_typealias.kt"); + } + + @Test + public void testAllFilesPresentInMultiModule() throws Exception { + KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("analysis/analysis-api/testData/components/psiTypeProvider/psiType/multiModule"), Pattern.compile("^(.+)\\.kt$"), null, true); + } +} diff --git a/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/components/psiTypeProvider/FirIdeDependentAnalysisSourceModuleAnalysisApiPsiTypeProviderMultiModuleTestGenerated.java b/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/components/psiTypeProvider/FirIdeDependentAnalysisSourceModuleAnalysisApiPsiTypeProviderMultiModuleTestGenerated.java new file mode 100644 index 00000000000..c80a0a32757 --- /dev/null +++ b/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/components/psiTypeProvider/FirIdeDependentAnalysisSourceModuleAnalysisApiPsiTypeProviderMultiModuleTestGenerated.java @@ -0,0 +1,60 @@ +/* + * 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.fir.test.cases.generated.cases.components.psiTypeProvider; + +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.components.psiTypeProvider.AbstractAnalysisApiPsiTypeProviderMultiModuleTest; +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/components/psiTypeProvider/psiType/multiModule") +@TestDataPath("$PROJECT_ROOT") +public class FirIdeDependentAnalysisSourceModuleAnalysisApiPsiTypeProviderMultiModuleTestGenerated extends AbstractAnalysisApiPsiTypeProviderMultiModuleTest { + @NotNull + @Override + public AnalysisApiTestConfigurator getConfigurator() { + return AnalysisApiFirTestConfiguratorFactory.INSTANCE.createConfigurator( + new AnalysisApiTestConfiguratorFactoryData( + FrontendKind.Fir, + TestModuleKind.Source, + AnalysisSessionMode.Dependent, + AnalysisApiMode.Ide + ) + ); + } + + @Test + @TestMetadata("actual_jvmInline_typealias.kt") + public void testActual_jvmInline_typealias() throws Exception { + runTest("analysis/analysis-api/testData/components/psiTypeProvider/psiType/multiModule/actual_jvmInline_typealias.kt"); + } + + @Test + @TestMetadata("actual_typealias.kt") + public void testActual_typealias() throws Exception { + runTest("analysis/analysis-api/testData/components/psiTypeProvider/psiType/multiModule/actual_typealias.kt"); + } + + @Test + public void testAllFilesPresentInMultiModule() throws Exception { + KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("analysis/analysis-api/testData/components/psiTypeProvider/psiType/multiModule"), Pattern.compile("^(.+)\\.kt$"), null, true); + } +} diff --git a/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/components/psiTypeProvider/FirIdeNormalAnalysisSourceModuleAnalysisApiPsiTypeProviderMultiModuleTestGenerated.java b/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/components/psiTypeProvider/FirIdeNormalAnalysisSourceModuleAnalysisApiPsiTypeProviderMultiModuleTestGenerated.java new file mode 100644 index 00000000000..c8ee16e3805 --- /dev/null +++ b/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/components/psiTypeProvider/FirIdeNormalAnalysisSourceModuleAnalysisApiPsiTypeProviderMultiModuleTestGenerated.java @@ -0,0 +1,60 @@ +/* + * 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.fir.test.cases.generated.cases.components.psiTypeProvider; + +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.components.psiTypeProvider.AbstractAnalysisApiPsiTypeProviderMultiModuleTest; +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/components/psiTypeProvider/psiType/multiModule") +@TestDataPath("$PROJECT_ROOT") +public class FirIdeNormalAnalysisSourceModuleAnalysisApiPsiTypeProviderMultiModuleTestGenerated extends AbstractAnalysisApiPsiTypeProviderMultiModuleTest { + @NotNull + @Override + public AnalysisApiTestConfigurator getConfigurator() { + return AnalysisApiFirTestConfiguratorFactory.INSTANCE.createConfigurator( + new AnalysisApiTestConfiguratorFactoryData( + FrontendKind.Fir, + TestModuleKind.Source, + AnalysisSessionMode.Normal, + AnalysisApiMode.Ide + ) + ); + } + + @Test + @TestMetadata("actual_jvmInline_typealias.kt") + public void testActual_jvmInline_typealias() throws Exception { + runTest("analysis/analysis-api/testData/components/psiTypeProvider/psiType/multiModule/actual_jvmInline_typealias.kt"); + } + + @Test + @TestMetadata("actual_typealias.kt") + public void testActual_typealias() throws Exception { + runTest("analysis/analysis-api/testData/components/psiTypeProvider/psiType/multiModule/actual_typealias.kt"); + } + + @Test + public void testAllFilesPresentInMultiModule() throws Exception { + KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("analysis/analysis-api/testData/components/psiTypeProvider/psiType/multiModule"), Pattern.compile("^(.+)\\.kt$"), null, true); + } +} diff --git a/analysis/analysis-api-impl-base/tests/org/jetbrains/kotlin/analysis/api/impl/base/test/cases/components/psiTypeProvider/AbstractAnalysisApiPsiTypeProviderMultiModuleTest.kt b/analysis/analysis-api-impl-base/tests/org/jetbrains/kotlin/analysis/api/impl/base/test/cases/components/psiTypeProvider/AbstractAnalysisApiPsiTypeProviderMultiModuleTest.kt new file mode 100644 index 00000000000..694209e4628 --- /dev/null +++ b/analysis/analysis-api-impl-base/tests/org/jetbrains/kotlin/analysis/api/impl/base/test/cases/components/psiTypeProvider/AbstractAnalysisApiPsiTypeProviderMultiModuleTest.kt @@ -0,0 +1,40 @@ +/* + * 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.components.psiTypeProvider + +import org.jetbrains.kotlin.analysis.api.analyze +import org.jetbrains.kotlin.analysis.api.impl.base.test.cases.components.psiTypeProvider.AnalysisApiPsiTypeProviderTestUtils.findLightDeclarationContext +import org.jetbrains.kotlin.analysis.test.framework.base.AbstractAnalysisApiBasedTest +import org.jetbrains.kotlin.analysis.test.framework.project.structure.ktModuleProvider +import org.jetbrains.kotlin.analysis.test.framework.services.expressionMarkerProvider +import org.jetbrains.kotlin.analysis.test.framework.utils.executeOnPooledThreadInReadAction +import org.jetbrains.kotlin.psi.KtDeclaration +import org.jetbrains.kotlin.psi.KtFile +import org.jetbrains.kotlin.test.services.TestModuleStructure +import org.jetbrains.kotlin.test.services.TestServices +import org.jetbrains.kotlin.test.services.assertions + +abstract class AbstractAnalysisApiPsiTypeProviderMultiModuleTest : AbstractAnalysisApiBasedTest() { + override fun doTestByModuleStructure(moduleStructure: TestModuleStructure, testServices: TestServices) { + val (declaration, ktFile) = moduleStructure.modules.flatMap { module -> + val ktFiles = testServices.ktModuleProvider.getModuleFiles(module).filterIsInstance() + testServices.expressionMarkerProvider.getElementsOfTypeAtCarets(ktFiles) + }.single() + val containingClass = AnalysisApiPsiTypeProviderTestUtils.getContainingKtLightClass(declaration, ktFile) + val psiContext = containingClass.findLightDeclarationContext(declaration) + ?: error("Can't find psi context for $declaration") + val actual = buildString { + executeOnPooledThreadInReadAction { + analyze(declaration) { + val ktType = declaration.getReturnKtType() + appendLine("KtType: ${ktType.render()}") + appendLine("PsiType: ${ktType.asPsiType(psiContext)}") + } + } + } + testServices.assertions.assertEqualsToTestDataFileSibling(actual) + } +} \ 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/components/psiTypeProvider/FirStandaloneNormalAnalysisSourceModuleAnalysisApiPsiTypeProviderMultiModuleTestGenerated.java b/analysis/analysis-api-standalone/tests-gen/org/jetbrains/kotlin/analysis/api/standalone/fir/test/cases/generated/cases/components/psiTypeProvider/FirStandaloneNormalAnalysisSourceModuleAnalysisApiPsiTypeProviderMultiModuleTestGenerated.java new file mode 100644 index 00000000000..7b52e17ec1c --- /dev/null +++ b/analysis/analysis-api-standalone/tests-gen/org/jetbrains/kotlin/analysis/api/standalone/fir/test/cases/generated/cases/components/psiTypeProvider/FirStandaloneNormalAnalysisSourceModuleAnalysisApiPsiTypeProviderMultiModuleTestGenerated.java @@ -0,0 +1,60 @@ +/* + * 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.standalone.fir.test.cases.generated.cases.components.psiTypeProvider; + +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.components.psiTypeProvider.AbstractAnalysisApiPsiTypeProviderMultiModuleTest; +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/components/psiTypeProvider/psiType/multiModule") +@TestDataPath("$PROJECT_ROOT") +public class FirStandaloneNormalAnalysisSourceModuleAnalysisApiPsiTypeProviderMultiModuleTestGenerated extends AbstractAnalysisApiPsiTypeProviderMultiModuleTest { + @NotNull + @Override + public AnalysisApiTestConfigurator getConfigurator() { + return AnalysisApiFirStandaloneModeTestConfiguratorFactory.INSTANCE.createConfigurator( + new AnalysisApiTestConfiguratorFactoryData( + FrontendKind.Fir, + TestModuleKind.Source, + AnalysisSessionMode.Normal, + AnalysisApiMode.Standalone + ) + ); + } + + @Test + @TestMetadata("actual_jvmInline_typealias.kt") + public void testActual_jvmInline_typealias() throws Exception { + runTest("analysis/analysis-api/testData/components/psiTypeProvider/psiType/multiModule/actual_jvmInline_typealias.kt"); + } + + @Test + @TestMetadata("actual_typealias.kt") + public void testActual_typealias() throws Exception { + runTest("analysis/analysis-api/testData/components/psiTypeProvider/psiType/multiModule/actual_typealias.kt"); + } + + @Test + public void testAllFilesPresentInMultiModule() throws Exception { + KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("analysis/analysis-api/testData/components/psiTypeProvider/psiType/multiModule"), Pattern.compile("^(.+)\\.kt$"), null, true); + } +} diff --git a/analysis/analysis-api/testData/components/psiTypeProvider/psiType/multiModule/actual_jvmInline_typealias.descriptors.txt b/analysis/analysis-api/testData/components/psiTypeProvider/psiType/multiModule/actual_jvmInline_typealias.descriptors.txt new file mode 100644 index 00000000000..d91a9e4f7e2 --- /dev/null +++ b/analysis/analysis-api/testData/components/psiTypeProvider/psiType/multiModule/actual_jvmInline_typealias.descriptors.txt @@ -0,0 +1,2 @@ +KtType: ERROR_TYPE +PsiType: null diff --git a/analysis/analysis-api/testData/components/psiTypeProvider/psiType/multiModule/actual_jvmInline_typealias.kt b/analysis/analysis-api/testData/components/psiTypeProvider/psiType/multiModule/actual_jvmInline_typealias.kt new file mode 100644 index 00000000000..ea62568964b --- /dev/null +++ b/analysis/analysis-api/testData/components/psiTypeProvider/psiType/multiModule/actual_jvmInline_typealias.kt @@ -0,0 +1,21 @@ +// !LANGUAGE: +MultiPlatformProjects +// MODULE: commonMain +// FILE: PointerEvent.kt + +expect class PointerEvent { + val keyboardModifiers: PointerKeyboardModifiers +} + +expect class NativePointerKeyboardModifiers + +@kotlin.jvm.JvmInline +value class PointerKeyboardModifiers(internal val packedValue: NativePointerKeyboardModifiers) + +// MODULE: androidMain(commonMain) +// FILE: PointerEvent.android.kt + +actual class PointerEvent { + actual val keyboardModifiers = PointerKeyboardModifiers(42) +} + +internal actual typealias NativePointerKeyboardModifiers = Int diff --git a/analysis/analysis-api/testData/components/psiTypeProvider/psiType/multiModule/actual_jvmInline_typealias.txt b/analysis/analysis-api/testData/components/psiTypeProvider/psiType/multiModule/actual_jvmInline_typealias.txt new file mode 100644 index 00000000000..18cfd0dd787 --- /dev/null +++ b/analysis/analysis-api/testData/components/psiTypeProvider/psiType/multiModule/actual_jvmInline_typealias.txt @@ -0,0 +1,2 @@ +KtType: PointerKeyboardModifiers +PsiType: PsiType:int diff --git a/analysis/analysis-api/testData/components/psiTypeProvider/psiType/multiModule/actual_typealias.kt b/analysis/analysis-api/testData/components/psiTypeProvider/psiType/multiModule/actual_typealias.kt new file mode 100644 index 00000000000..c1b7588ea87 --- /dev/null +++ b/analysis/analysis-api/testData/components/psiTypeProvider/psiType/multiModule/actual_typealias.kt @@ -0,0 +1,16 @@ +// !LANGUAGE: +MultiPlatformProjects +// MODULE: commonMain +// FILE: foo.kt + +expect class Foo + +// MODULE: androidMain(commonMain) +// FILE: foo.android.kt + +actual typealias Foo = Int + +// FILE: main.kt + +fun box(): Foo { + return 42 +} diff --git a/analysis/analysis-api/testData/components/psiTypeProvider/psiType/multiModule/actual_typealias.txt b/analysis/analysis-api/testData/components/psiTypeProvider/psiType/multiModule/actual_typealias.txt new file mode 100644 index 00000000000..5c50edd022c --- /dev/null +++ b/analysis/analysis-api/testData/components/psiTypeProvider/psiType/multiModule/actual_typealias.txt @@ -0,0 +1,2 @@ +KtType: Foo +PsiType: PsiType:int diff --git a/analysis/analysis-test-framework/tests/org/jetbrains/kotlin/analysis/test/framework/services/ExpressionMarkersSourceFilePreprocessor.kt b/analysis/analysis-test-framework/tests/org/jetbrains/kotlin/analysis/test/framework/services/ExpressionMarkersSourceFilePreprocessor.kt index 0745b4b6234..3d1f61419d0 100644 --- a/analysis/analysis-test-framework/tests/org/jetbrains/kotlin/analysis/test/framework/services/ExpressionMarkersSourceFilePreprocessor.kt +++ b/analysis/analysis-test-framework/tests/org/jetbrains/kotlin/analysis/test/framework/services/ExpressionMarkersSourceFilePreprocessor.kt @@ -86,13 +86,27 @@ class ExpressionMarkerProvider : TestService { } - inline fun getElementOfTypeAtCaret(file: KtFile, caretName: String? = null): P { - val offset = getCaretPosition(file, caretName) + inline fun getElementOfTypeAtCaret(file: KtFile, caretTag: String? = null): P { + val offset = getCaretPosition(file, caretTag) return file.findElementAt(offset) - ?.parentOfType

() + ?.parentOfType() ?: error("No expression found at caret") } + @OptIn(PrivateForInline::class) + inline fun getElementsOfTypeAtCarets( + files: Collection, + caretTag: String? = null + ): Collection> { + return files.mapNotNull { file -> + carets.getCaretOffset(file.name, caretTag)?.let { offset -> + file.findElementAt(offset)?.parentOfType

()?.let { element -> + element to file + } + } + } + } + fun getSelectedElement(file: KtFile): KtElement { val range = selected[file.name] ?: error("No selected expression found in 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 e016682a39b..9ddac40750d 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 @@ -23,6 +23,7 @@ import org.jetbrains.kotlin.analysis.api.impl.base.test.cases.components.express import org.jetbrains.kotlin.analysis.api.impl.base.test.cases.components.expressionTypeProvider.AbstractHLExpressionTypeTest import org.jetbrains.kotlin.analysis.api.impl.base.test.cases.components.importOptimizer.AbstractAnalysisApiImportOptimizerTest import org.jetbrains.kotlin.analysis.api.impl.base.test.cases.components.psiTypeProvider.AbstractAnalysisApiExpressionPsiTypeProviderTest +import org.jetbrains.kotlin.analysis.api.impl.base.test.cases.components.psiTypeProvider.AbstractAnalysisApiPsiTypeProviderMultiModuleTest import org.jetbrains.kotlin.analysis.api.impl.base.test.cases.components.psiTypeProvider.AbstractAnalysisApiPsiTypeProviderTest import org.jetbrains.kotlin.analysis.api.impl.base.test.cases.components.signatureSubstitution.AbstractAnalysisApiSignatureContractsTest import org.jetbrains.kotlin.analysis.api.impl.base.test.cases.components.signatureSubstitution.AbstractAnalysisApiSignatureSubstitutionTest @@ -262,6 +263,10 @@ private fun AnalysisApiTestGroup.generateAnalysisApiComponentsTests() { model("psiType/forDeclaration") } + test(AbstractAnalysisApiPsiTypeProviderMultiModuleTest::class) { + model("psiType/multiModule") + } + test(AbstractAnalysisApiExpressionPsiTypeProviderTest::class, filter = frontendIs(FrontendKind.Fir)) { model("psiType/forExpression") }