From e650ba9855587f274f60e46ff0501ca4bdf6b6b1 Mon Sep 17 00:00:00 2001 From: Anna Kozlova Date: Mon, 26 Feb 2024 13:49:33 +0100 Subject: [PATCH] [AA] return expect declaration for "implicit" actual If actual declaration is broken (missing explicit `actual` keyword), expect declaration still makes sense. This way, we allow refactorings on broken code ^KT-65191 fixed --- ...isSourceModuleExpectForActualTestGenerated.java | 6 ++++++ .../components/KtFirMultiplatformInfoProvider.kt | 8 ++------ ...isSourceModuleExpectForActualTestGenerated.java | 6 ++++++ ...isSourceModuleExpectForActualTestGenerated.java | 6 ++++++ ...isSourceModuleExpectForActualTestGenerated.java | 6 ++++++ .../actual_primaryConstructor.descriptors.txt | 1 + .../expectForActual/actual_primaryConstructor.kt | 14 ++++++++++++++ .../expectForActual/actual_primaryConstructor.txt | 2 ++ 8 files changed, 43 insertions(+), 6 deletions(-) create mode 100644 analysis/analysis-api/testData/components/multiplatformInfoProvider/expectForActual/actual_primaryConstructor.descriptors.txt create mode 100644 analysis/analysis-api/testData/components/multiplatformInfoProvider/expectForActual/actual_primaryConstructor.kt create mode 100644 analysis/analysis-api/testData/components/multiplatformInfoProvider/expectForActual/actual_primaryConstructor.txt diff --git a/analysis/analysis-api-fe10/tests-gen/org/jetbrains/kotlin/analysis/api/fe10/test/cases/generated/cases/components/multiplatformInfoProvider/Fe10IdeNormalAnalysisSourceModuleExpectForActualTestGenerated.java b/analysis/analysis-api-fe10/tests-gen/org/jetbrains/kotlin/analysis/api/fe10/test/cases/generated/cases/components/multiplatformInfoProvider/Fe10IdeNormalAnalysisSourceModuleExpectForActualTestGenerated.java index 31e6f142d95..fce4528c4d7 100644 --- a/analysis/analysis-api-fe10/tests-gen/org/jetbrains/kotlin/analysis/api/fe10/test/cases/generated/cases/components/multiplatformInfoProvider/Fe10IdeNormalAnalysisSourceModuleExpectForActualTestGenerated.java +++ b/analysis/analysis-api-fe10/tests-gen/org/jetbrains/kotlin/analysis/api/fe10/test/cases/generated/cases/components/multiplatformInfoProvider/Fe10IdeNormalAnalysisSourceModuleExpectForActualTestGenerated.java @@ -47,6 +47,12 @@ public class Fe10IdeNormalAnalysisSourceModuleExpectForActualTestGenerated exten runTest("analysis/analysis-api/testData/components/multiplatformInfoProvider/expectForActual/actual_object.kt"); } + @Test + @TestMetadata("actual_primaryConstructor.kt") + public void testActual_primaryConstructor() { + runTest("analysis/analysis-api/testData/components/multiplatformInfoProvider/expectForActual/actual_primaryConstructor.kt"); + } + @Test public void testAllFilesPresentInExpectForActual() { KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("analysis/analysis-api/testData/components/multiplatformInfoProvider/expectForActual"), Pattern.compile("^(.+)\\.kt$"), null, true); diff --git a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/components/KtFirMultiplatformInfoProvider.kt b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/components/KtFirMultiplatformInfoProvider.kt index 6af6dfbe4c5..351b468c597 100644 --- a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/components/KtFirMultiplatformInfoProvider.kt +++ b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/components/KtFirMultiplatformInfoProvider.kt @@ -23,13 +23,9 @@ internal class KtFirMultiplatformInfoProvider( override fun getExpectForActual(actual: KtDeclarationSymbol): List { require(actual is KtFirSymbol<*>) val firSymbol = actual.firSymbol - val status = when (firSymbol) { - is FirCallableSymbol -> firSymbol.rawStatus - is FirClassSymbol -> firSymbol.rawStatus - is FirTypeAliasSymbol -> firSymbol.rawStatus - else -> null + if (firSymbol !is FirCallableSymbol && firSymbol !is FirClassSymbol && firSymbol !is FirTypeAliasSymbol) { + return emptyList() } - if (status?.isActual != true) return emptyList() return firSymbol.expectForActual?.get(ExpectActualMatchingCompatibility.MatchedSuccessfully) ?.map { analysisSession.firSymbolBuilder.buildSymbol(it) as KtDeclarationSymbol }.orEmpty() diff --git a/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/components/multiplatformInfoProvider/FirIdeDependentAnalysisSourceModuleExpectForActualTestGenerated.java b/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/components/multiplatformInfoProvider/FirIdeDependentAnalysisSourceModuleExpectForActualTestGenerated.java index 3861505a90f..ac3c60b80d8 100644 --- a/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/components/multiplatformInfoProvider/FirIdeDependentAnalysisSourceModuleExpectForActualTestGenerated.java +++ b/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/components/multiplatformInfoProvider/FirIdeDependentAnalysisSourceModuleExpectForActualTestGenerated.java @@ -47,6 +47,12 @@ public class FirIdeDependentAnalysisSourceModuleExpectForActualTestGenerated ext runTest("analysis/analysis-api/testData/components/multiplatformInfoProvider/expectForActual/actual_object.kt"); } + @Test + @TestMetadata("actual_primaryConstructor.kt") + public void testActual_primaryConstructor() { + runTest("analysis/analysis-api/testData/components/multiplatformInfoProvider/expectForActual/actual_primaryConstructor.kt"); + } + @Test public void testAllFilesPresentInExpectForActual() { KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("analysis/analysis-api/testData/components/multiplatformInfoProvider/expectForActual"), 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/multiplatformInfoProvider/FirIdeNormalAnalysisSourceModuleExpectForActualTestGenerated.java b/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/components/multiplatformInfoProvider/FirIdeNormalAnalysisSourceModuleExpectForActualTestGenerated.java index db46d35eabe..3fa9b9f7d0d 100644 --- a/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/components/multiplatformInfoProvider/FirIdeNormalAnalysisSourceModuleExpectForActualTestGenerated.java +++ b/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/components/multiplatformInfoProvider/FirIdeNormalAnalysisSourceModuleExpectForActualTestGenerated.java @@ -47,6 +47,12 @@ public class FirIdeNormalAnalysisSourceModuleExpectForActualTestGenerated extend runTest("analysis/analysis-api/testData/components/multiplatformInfoProvider/expectForActual/actual_object.kt"); } + @Test + @TestMetadata("actual_primaryConstructor.kt") + public void testActual_primaryConstructor() { + runTest("analysis/analysis-api/testData/components/multiplatformInfoProvider/expectForActual/actual_primaryConstructor.kt"); + } + @Test public void testAllFilesPresentInExpectForActual() { KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("analysis/analysis-api/testData/components/multiplatformInfoProvider/expectForActual"), Pattern.compile("^(.+)\\.kt$"), null, true); diff --git a/analysis/analysis-api-standalone/tests-gen/org/jetbrains/kotlin/analysis/api/standalone/fir/test/cases/generated/cases/components/multiplatformInfoProvider/FirStandaloneNormalAnalysisSourceModuleExpectForActualTestGenerated.java b/analysis/analysis-api-standalone/tests-gen/org/jetbrains/kotlin/analysis/api/standalone/fir/test/cases/generated/cases/components/multiplatformInfoProvider/FirStandaloneNormalAnalysisSourceModuleExpectForActualTestGenerated.java index d4d2cf4dc85..720f5b1e66b 100644 --- a/analysis/analysis-api-standalone/tests-gen/org/jetbrains/kotlin/analysis/api/standalone/fir/test/cases/generated/cases/components/multiplatformInfoProvider/FirStandaloneNormalAnalysisSourceModuleExpectForActualTestGenerated.java +++ b/analysis/analysis-api-standalone/tests-gen/org/jetbrains/kotlin/analysis/api/standalone/fir/test/cases/generated/cases/components/multiplatformInfoProvider/FirStandaloneNormalAnalysisSourceModuleExpectForActualTestGenerated.java @@ -47,6 +47,12 @@ public class FirStandaloneNormalAnalysisSourceModuleExpectForActualTestGenerated runTest("analysis/analysis-api/testData/components/multiplatformInfoProvider/expectForActual/actual_object.kt"); } + @Test + @TestMetadata("actual_primaryConstructor.kt") + public void testActual_primaryConstructor() { + runTest("analysis/analysis-api/testData/components/multiplatformInfoProvider/expectForActual/actual_primaryConstructor.kt"); + } + @Test public void testAllFilesPresentInExpectForActual() { KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("analysis/analysis-api/testData/components/multiplatformInfoProvider/expectForActual"), Pattern.compile("^(.+)\\.kt$"), null, true); diff --git a/analysis/analysis-api/testData/components/multiplatformInfoProvider/expectForActual/actual_primaryConstructor.descriptors.txt b/analysis/analysis-api/testData/components/multiplatformInfoProvider/expectForActual/actual_primaryConstructor.descriptors.txt new file mode 100644 index 00000000000..e755e4f5b33 --- /dev/null +++ b/analysis/analysis-api/testData/components/multiplatformInfoProvider/expectForActual/actual_primaryConstructor.descriptors.txt @@ -0,0 +1 @@ +expected symbols: diff --git a/analysis/analysis-api/testData/components/multiplatformInfoProvider/expectForActual/actual_primaryConstructor.kt b/analysis/analysis-api/testData/components/multiplatformInfoProvider/expectForActual/actual_primaryConstructor.kt new file mode 100644 index 00000000000..5d565999405 --- /dev/null +++ b/analysis/analysis-api/testData/components/multiplatformInfoProvider/expectForActual/actual_primaryConstructor.kt @@ -0,0 +1,14 @@ +// !LANGUAGE: +MultiPlatformProjects +// MODULE: commonMain +// FILE: Common.kt + +package sample +expect class Foo(n: Int) + +// MODULE: androidMain()()(commonMain) +// FILE: JvmAndroid.kt + +package sample +actual class Foo(n: Int) { + val k = n +} \ No newline at end of file diff --git a/analysis/analysis-api/testData/components/multiplatformInfoProvider/expectForActual/actual_primaryConstructor.txt b/analysis/analysis-api/testData/components/multiplatformInfoProvider/expectForActual/actual_primaryConstructor.txt new file mode 100644 index 00000000000..30279a4b4b5 --- /dev/null +++ b/analysis/analysis-api/testData/components/multiplatformInfoProvider/expectForActual/actual_primaryConstructor.txt @@ -0,0 +1,2 @@ +expected symbols: +Common.kt : constructor(n: kotlin.Int)