[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
This commit is contained in:
Anna Kozlova
2024-02-26 13:49:33 +01:00
committed by Space Team
parent 98dba48fde
commit e650ba9855
8 changed files with 43 additions and 6 deletions
@@ -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);
@@ -23,13 +23,9 @@ internal class KtFirMultiplatformInfoProvider(
override fun getExpectForActual(actual: KtDeclarationSymbol): List<KtDeclarationSymbol> {
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()
@@ -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);
@@ -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);
@@ -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);
@@ -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<caret>(n: Int) {
val k = n
}
@@ -0,0 +1,2 @@
expected symbols:
Common.kt : constructor(n: kotlin.Int)