From a1ce8ac1752130ea3cd008f4e4a3b09891159ffc Mon Sep 17 00:00:00 2001 From: Nikita Bobko Date: Wed, 15 Nov 2023 19:25:18 +0100 Subject: [PATCH] [FIR] 1/2 match and check expect fake-overrides vs actuals ^KT-63550 Fixed Review: https://jetbrains.team/p/kt/reviews/13094/timeline Now it's required to create a new ScopeSession when searching for expect members for actuals. If you keep reusing actualScopeSession then members declared in platform may "slip into" the search results, resulting an incorrect expect for actual (e.g. it happens in supertypeIsExpectActual_covariantOverrideOfInjectedFromSuper_transitiveSubstitutionFakeOverride.fir.kt) I suppose that it always has been a bug that we reused actualScopeSession because we were mixing actualScopeSession and expect FirSession (which is a bad idea), but we simply didn't have cases where this bug could be observed. Now after we started matching fake-overrides, we have such cases. But creating a new ScopeSession every time is a suboptimal solution. We need to design a scope caching KT-63773 --- ...CompilerTestFE10TestdataTestGenerated.java | 6 ++++ ...sticCompilerFE10TestDataTestGenerated.java | 6 ++++ ...DiagnosticsWithLightTreeTestGenerated.java | 6 ++++ ...endMPPDiagnosticsWithPsiTestGenerated.java | 6 ++++ .../fir/FirExpectActualMatchingContext.kt | 5 ++-- .../mpp/FirExpectActualMatcherTransformer.kt | 5 ++-- .../mpp/FirExpectActualMatchingContextImpl.kt | 19 +++++++----- .../mpp/FirExpectActualResolver.kt | 14 +++++---- .../calls/mpp/AbstractExpectActualChecker.kt | 2 -- .../calls/mpp/AbstractExpectActualMatcher.kt | 2 -- ...unctionTypeParameterNamesInOverride.fir.kt | 2 +- ...FunctionTypeParameterNamesInOverride.ll.kt | 2 +- .../changeLateinitInOverride.fir.kt | 2 +- .../changeLateinitInOverride.ll.kt | 2 +- ...dalityFromAbstractToFinalInOverride.fir.kt | 2 +- ...odalityFromAbstractToFinalInOverride.ll.kt | 2 +- ...odalityFromAbstractToOpenInOverride.fir.kt | 2 +- ...ModalityFromAbstractToOpenInOverride.ll.kt | 2 +- ...odalityFromOpenToAbstractInOverride.fir.kt | 2 +- ...ModalityFromOpenToAbstractInOverride.ll.kt | 2 +- ...geModalityFromOpenToFinalInOverride.fir.kt | 2 +- ...ngeModalityFromOpenToFinalInOverride.ll.kt | 2 +- ...geModalityOfSubstitutedFakeOverride.fir.kt | 2 +- ...ngeModalityOfSubstitutedFakeOverride.ll.kt | 2 +- .../changeModalityOfToStringInOverride.fir.kt | 2 +- .../changeModalityOfToStringInOverride.ll.kt | 2 +- .../changeParameterNameInOverride.fir.kt | 2 +- .../changeParameterNameInOverride.ll.kt | 2 +- .../changeVarargModifierInOverride.fir.kt | 2 +- .../changeVarargModifierInOverride.ll.kt | 2 +- .../changeVisibilityInOverride.fir.kt | 2 +- .../changeVisibilityInOverride.ll.kt | 2 +- .../covariantFunctionOverride.fir.kt | 2 +- .../covariantFunctionOverride.ll.kt | 2 +- .../covariantOverrideGenericUpperBound.fir.kt | 2 +- .../covariantOverrideGenericUpperBound.ll.kt | 2 +- .../covariantOverrideGenerics.fir.kt | 2 +- .../covariantOverrideGenerics.ll.kt | 2 +- .../covariantPropertyOverride.fir.kt | 2 +- .../covariantPropertyOverride.ll.kt | 2 +- .../flexibleTypesMatching.fir.kt | 2 +- .../flexibleTypesMatching.ll.kt | 2 +- .../propertyKindOverride.fir.kt | 2 +- .../propertyKindOverride.ll.kt | 2 +- .../severalMismatches.fir.kt | 2 +- .../severalMismatches.ll.kt | 2 +- .../actualTypealiasForNotExpectClass.fir.kt | 29 +++++++++++++++++++ .../actualTypealiasForNotExpectClass.kt | 29 +++++++++++++++++++ .../equalsOverrideInActualInterface.fir.kt | 2 +- .../equalsOverrideInActualInterface.ll.kt | 2 +- ...licitActualFakeOverride_AbstractMap.fir.kt | 2 +- ...plicitActualFakeOverride_AbstractMap.ll.kt | 2 +- .../typealias/actualTypealiasToNothing.fir.kt | 4 +-- .../typealias/actualTypealiasToNothing.ll.kt | 4 +-- ...pealiasToNothing_oldLanguageVersion.fir.kt | 4 +-- ...ypealiasToNothing_oldLanguageVersion.ll.kt | 4 +-- .../actualTypealiasToNothing/output.txt | 20 +++++++++++++ .../test/runners/DiagnosticTestGenerated.java | 6 ++++ 58 files changed, 182 insertions(+), 69 deletions(-) create mode 100644 compiler/testData/diagnostics/tests/multiplatform/actualTypealiasForNotExpectClass.fir.kt create mode 100644 compiler/testData/diagnostics/tests/multiplatform/actualTypealiasForNotExpectClass.kt diff --git a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/DiagnosticCompilerTestFE10TestdataTestGenerated.java b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/DiagnosticCompilerTestFE10TestdataTestGenerated.java index 3964c90a2e5..a19850db5ef 100644 --- a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/DiagnosticCompilerTestFE10TestdataTestGenerated.java +++ b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/DiagnosticCompilerTestFE10TestdataTestGenerated.java @@ -23707,6 +23707,12 @@ public class DiagnosticCompilerTestFE10TestdataTestGenerated extends AbstractDia runTest("compiler/testData/diagnostics/tests/multiplatform/actualFakeOverride_transitiveFakeOverrides_incompatible.kt"); } + @Test + @TestMetadata("actualTypealiasForNotExpectClass.kt") + public void testActualTypealiasForNotExpectClass() throws Exception { + runTest("compiler/testData/diagnostics/tests/multiplatform/actualTypealiasForNotExpectClass.kt"); + } + @Test @TestMetadata("actualTypealiasToSpecialAnnotation.kt") public void testActualTypealiasToSpecialAnnotation() throws Exception { diff --git a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/LLFirPreresolvedReversedDiagnosticCompilerFE10TestDataTestGenerated.java b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/LLFirPreresolvedReversedDiagnosticCompilerFE10TestDataTestGenerated.java index 58c2d2c004f..5d4012b2ecb 100644 --- a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/LLFirPreresolvedReversedDiagnosticCompilerFE10TestDataTestGenerated.java +++ b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/LLFirPreresolvedReversedDiagnosticCompilerFE10TestDataTestGenerated.java @@ -23707,6 +23707,12 @@ public class LLFirPreresolvedReversedDiagnosticCompilerFE10TestDataTestGenerated runTest("compiler/testData/diagnostics/tests/multiplatform/actualFakeOverride_transitiveFakeOverrides_incompatible.kt"); } + @Test + @TestMetadata("actualTypealiasForNotExpectClass.kt") + public void testActualTypealiasForNotExpectClass() throws Exception { + runTest("compiler/testData/diagnostics/tests/multiplatform/actualTypealiasForNotExpectClass.kt"); + } + @Test @TestMetadata("actualTypealiasToSpecialAnnotation.kt") public void testActualTypealiasToSpecialAnnotation() throws Exception { diff --git a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirOldFrontendMPPDiagnosticsWithLightTreeTestGenerated.java b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirOldFrontendMPPDiagnosticsWithLightTreeTestGenerated.java index b23a3284bca..5171b29f0b4 100644 --- a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirOldFrontendMPPDiagnosticsWithLightTreeTestGenerated.java +++ b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirOldFrontendMPPDiagnosticsWithLightTreeTestGenerated.java @@ -68,6 +68,12 @@ public class FirOldFrontendMPPDiagnosticsWithLightTreeTestGenerated extends Abst runTest("compiler/testData/diagnostics/tests/multiplatform/actualFakeOverride_transitiveFakeOverrides_incompatible.kt"); } + @Test + @TestMetadata("actualTypealiasForNotExpectClass.kt") + public void testActualTypealiasForNotExpectClass() throws Exception { + runTest("compiler/testData/diagnostics/tests/multiplatform/actualTypealiasForNotExpectClass.kt"); + } + @Test @TestMetadata("actualTypealiasToSpecialAnnotation.kt") public void testActualTypealiasToSpecialAnnotation() throws Exception { diff --git a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirOldFrontendMPPDiagnosticsWithPsiTestGenerated.java b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirOldFrontendMPPDiagnosticsWithPsiTestGenerated.java index 6eb490ba943..6bf64a99c1a 100644 --- a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirOldFrontendMPPDiagnosticsWithPsiTestGenerated.java +++ b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirOldFrontendMPPDiagnosticsWithPsiTestGenerated.java @@ -68,6 +68,12 @@ public class FirOldFrontendMPPDiagnosticsWithPsiTestGenerated extends AbstractFi runTest("compiler/testData/diagnostics/tests/multiplatform/actualFakeOverride_transitiveFakeOverrides_incompatible.kt"); } + @Test + @TestMetadata("actualTypealiasForNotExpectClass.kt") + public void testActualTypealiasForNotExpectClass() throws Exception { + runTest("compiler/testData/diagnostics/tests/multiplatform/actualTypealiasForNotExpectClass.kt"); + } + @Test @TestMetadata("actualTypealiasToSpecialAnnotation.kt") public void testActualTypealiasToSpecialAnnotation() throws Exception { diff --git a/compiler/fir/providers/src/org/jetbrains/kotlin/fir/FirExpectActualMatchingContext.kt b/compiler/fir/providers/src/org/jetbrains/kotlin/fir/FirExpectActualMatchingContext.kt index ac64514565b..05153878ee1 100644 --- a/compiler/fir/providers/src/org/jetbrains/kotlin/fir/FirExpectActualMatchingContext.kt +++ b/compiler/fir/providers/src/org/jetbrains/kotlin/fir/FirExpectActualMatchingContext.kt @@ -20,13 +20,14 @@ interface FirExpectActualMatchingContext : ExpectActualMatchingContext + val expectScopeSession: ScopeSession override fun RegularClassSymbolMarker.getMembersForExpectClass(name: Name): List> } interface FirExpectActualMatchingContextFactory : FirSessionComponent { fun create( - session: FirSession, - scopeSession: ScopeSession, + actualSession: FirSession, + actualScopeSession: ScopeSession, allowedWritingMemberExpectForActualMapping: Boolean = false, ): FirExpectActualMatchingContext } diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/mpp/FirExpectActualMatcherTransformer.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/mpp/FirExpectActualMatcherTransformer.kt index 5a57057cd79..27b488229ac 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/mpp/FirExpectActualMatcherTransformer.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/mpp/FirExpectActualMatcherTransformer.kt @@ -41,11 +41,11 @@ class FirExpectActualMatcherProcessor( */ open class FirExpectActualMatcherTransformer( final override val session: FirSession, - private val scopeSession: ScopeSession, + private val actualScopeSession: ScopeSession, ) : FirAbstractTreeTransformer(FirResolvePhase.EXPECT_ACTUAL_MATCHING) { private val expectActualMatchingContext = session.expectActualMatchingContextFactory.create( - session, scopeSession, + session, actualScopeSession, allowedWritingMemberExpectForActualMapping = true, ) @@ -102,7 +102,6 @@ open class FirExpectActualMatcherTransformer( val expectForActualData = FirExpectActualResolver.findExpectForActual( actualSymbol, session, - scopeSession, expectActualMatchingContext, ) memberDeclaration.expectForActual = expectForActualData diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/mpp/FirExpectActualMatchingContextImpl.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/mpp/FirExpectActualMatchingContextImpl.kt index b7e0d1d40ab..944a905f3b2 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/mpp/FirExpectActualMatchingContextImpl.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/mpp/FirExpectActualMatchingContextImpl.kt @@ -40,7 +40,7 @@ import org.jetbrains.kotlin.utils.zipIfSizesAreEqual class FirExpectActualMatchingContextImpl private constructor( private val actualSession: FirSession, - private val scopeSession: ScopeSession, + private val actualScopeSession: ScopeSession, private val allowedWritingMemberExpectForActualMapping: Boolean, ) : FirExpectActualMatchingContext, TypeSystemContext by actualSession.typeContext { override val shouldCheckAbsenceOfDefaultParamsInActual: Boolean @@ -52,6 +52,11 @@ class FirExpectActualMatchingContextImpl private constructor( override val allowTransitiveSupertypesActualization: Boolean get() = true + override val expectScopeSession: ScopeSession + // todo KT-63773 design a way for managing scope sessions for common scopes during matching. + // Right now we create a new session every time + get() = ScopeSession() + private fun DeclarationSymbolMarker.asSymbol(): FirBasedSymbol<*> = this as FirBasedSymbol<*> private fun CallableSymbolMarker.asSymbol(): FirCallableSymbol<*> = this as FirCallableSymbol<*> private fun FunctionSymbolMarker.asSymbol(): FirFunctionSymbol<*> = this as FirFunctionSymbol<*> @@ -170,7 +175,7 @@ class FirExpectActualMatchingContextImpl private constructor( val scope = symbol.defaultType().scope( useSiteSession = session, - scopeSession, + if (isActualDeclaration) actualScopeSession else expectScopeSession, CallableCopyTypeCalculator.DoNothing, requiredMembersPhase = FirResolvePhase.STATUS, ) ?: return emptyList() @@ -196,7 +201,7 @@ class FirExpectActualMatchingContextImpl private constructor( val symbol = asSymbol() val scope = symbol.defaultType().scope( useSiteSession = symbol.moduleData.session, - scopeSession, + expectScopeSession, CallableCopyTypeCalculator.DoNothing, requiredMembersPhase = FirResolvePhase.STATUS, ) ?: return emptyList() @@ -259,7 +264,7 @@ class FirExpectActualMatchingContextImpl private constructor( val session = symbol.moduleData.session val containingClass = symbol.containingClassLookupTag()?.toFirRegularClassSymbol(session) ?: return sequenceOf(symbol) - (sequenceOf(symbol) + symbol.overriddenFunctions(containingClass, session, scopeSession).asSequence()) + (sequenceOf(symbol) + symbol.overriddenFunctions(containingClass, session, actualScopeSession).asSequence()) // Tests work even if you don't filter out fake-overrides. Filtering fake-overrides is needed because // the returned descriptors are compared by `equals`. And `equals` for fake-overrides is weird. // I didn't manage to invent a test that would check this condition @@ -354,7 +359,7 @@ class FirExpectActualMatchingContextImpl private constructor( override fun RegularClassSymbolMarker.isNotSamInterface(): Boolean { val type = asSymbol().defaultType() - val isSam = FirSamResolver(actualSession, scopeSession).isSamType(type) + val isSam = FirSamResolver(actualSession, actualScopeSession).isSamType(type) return !isSam } @@ -613,9 +618,9 @@ class FirExpectActualMatchingContextImpl private constructor( object Factory : FirExpectActualMatchingContextFactory { override fun create( - session: FirSession, scopeSession: ScopeSession, + actualSession: FirSession, actualScopeSession: ScopeSession, allowedWritingMemberExpectForActualMapping: Boolean, ): FirExpectActualMatchingContextImpl = - FirExpectActualMatchingContextImpl(session, scopeSession, allowedWritingMemberExpectForActualMapping) + FirExpectActualMatchingContextImpl(actualSession, actualScopeSession, allowedWritingMemberExpectForActualMapping) } } diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/mpp/FirExpectActualResolver.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/mpp/FirExpectActualResolver.kt index 3634b0b5333..b285c96df62 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/mpp/FirExpectActualResolver.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/mpp/FirExpectActualResolver.kt @@ -9,6 +9,7 @@ import org.jetbrains.kotlin.fir.FirExpectActualMatchingContext import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.declarations.ExpectForActualMatchingData import org.jetbrains.kotlin.fir.declarations.fullyExpandedClass +import org.jetbrains.kotlin.fir.declarations.utils.isExpect import org.jetbrains.kotlin.fir.resolve.ScopeSession import org.jetbrains.kotlin.fir.resolve.providers.dependenciesSymbolProvider import org.jetbrains.kotlin.fir.resolve.providers.symbolProvider @@ -26,7 +27,6 @@ object FirExpectActualResolver { fun findExpectForActual( actualSymbol: FirBasedSymbol<*>, useSiteSession: FirSession, - scopeSession: ScopeSession, context: FirExpectActualMatchingContext, ): ExpectForActualMatchingData { with(context) { @@ -45,7 +45,7 @@ object FirExpectActualResolver { ?.fullyExpandedClass(useSiteSession) when (actualSymbol) { - is FirConstructorSymbol -> expectContainingClass?.getConstructors(scopeSession) + is FirConstructorSymbol -> expectContainingClass?.getConstructors(expectScopeSession) else -> expectContainingClass?.getMembersForExpectClass(actualSymbol.name) }.orEmpty() } @@ -59,7 +59,7 @@ object FirExpectActualResolver { } } candidates.filter { expectSymbol -> - actualSymbol != expectSymbol && expectSymbol.isExpect + actualSymbol != expectSymbol && (expectContainingClass != null /*match fake overrides*/ || expectSymbol.isExpect) }.groupBy { expectDeclaration -> AbstractExpectActualMatcher.getCallablesMatchingCompatibility( expectDeclaration, @@ -79,8 +79,12 @@ object FirExpectActualResolver { is FirClassLikeSymbol<*> -> { val expectClassSymbol = useSiteSession.dependenciesSymbolProvider .getClassLikeSymbolByClassId(actualSymbol.classId) as? FirRegularClassSymbol ?: return emptyMap() - val compatibility = AbstractExpectActualMatcher.matchClassifiers(expectClassSymbol, actualSymbol, context) - mapOf(compatibility to listOf(expectClassSymbol)) + if (expectClassSymbol.isExpect) { + val compatibility = AbstractExpectActualMatcher.matchClassifiers(expectClassSymbol, actualSymbol, context) + mapOf(compatibility to listOf(expectClassSymbol)) + } else { + emptyMap() + } } else -> emptyMap() } diff --git a/compiler/resolution.common/src/org/jetbrains/kotlin/resolve/calls/mpp/AbstractExpectActualChecker.kt b/compiler/resolution.common/src/org/jetbrains/kotlin/resolve/calls/mpp/AbstractExpectActualChecker.kt index e56a2aff79d..9bb15e1a30d 100644 --- a/compiler/resolution.common/src/org/jetbrains/kotlin/resolve/calls/mpp/AbstractExpectActualChecker.kt +++ b/compiler/resolution.common/src/org/jetbrains/kotlin/resolve/calls/mpp/AbstractExpectActualChecker.kt @@ -217,8 +217,6 @@ object AbstractExpectActualChecker { val actualMembersByName = actualClassSymbol.collectAllMembers(isActualDeclaration = true).groupBy { it.name } outer@ for (expectMember in expectClassSymbol.collectAllMembers(isActualDeclaration = false)) { - if (expectMember is CallableSymbolMarker && expectMember.shouldSkipMatching(expectClassSymbol)) continue - val actualMembers = getPossibleActualsByExpectName(expectMember, actualMembersByName) val matched = AbstractExpectActualMatcher.matchSingleExpectAgainstPotentialActuals( diff --git a/compiler/resolution.common/src/org/jetbrains/kotlin/resolve/calls/mpp/AbstractExpectActualMatcher.kt b/compiler/resolution.common/src/org/jetbrains/kotlin/resolve/calls/mpp/AbstractExpectActualMatcher.kt index 5361fd1bdec..3a023156c47 100644 --- a/compiler/resolution.common/src/org/jetbrains/kotlin/resolve/calls/mpp/AbstractExpectActualMatcher.kt +++ b/compiler/resolution.common/src/org/jetbrains/kotlin/resolve/calls/mpp/AbstractExpectActualMatcher.kt @@ -89,8 +89,6 @@ object AbstractExpectActualMatcher { val actualMembersByName = actualClassSymbol.collectAllMembers(isActualDeclaration = true).groupBy { it.name } outer@ for (expectMember in expectClassSymbol.collectAllMembers(isActualDeclaration = false)) { - if (expectMember is CallableSymbolMarker && expectMember.shouldSkipMatching(expectClassSymbol)) continue - val actualMembers = getPossibleActualsByExpectName(expectMember, actualMembersByName) matchSingleExpectAgainstPotentialActuals( diff --git a/compiler/testData/diagnostics/tests/multiplatform/actualClassifierMustHasTheSameMembersAsNonFinalExpectClassifierChecker/changeFunctionTypeParameterNamesInOverride.fir.kt b/compiler/testData/diagnostics/tests/multiplatform/actualClassifierMustHasTheSameMembersAsNonFinalExpectClassifierChecker/changeFunctionTypeParameterNamesInOverride.fir.kt index 9f01c201355..da3763e56d9 100644 --- a/compiler/testData/diagnostics/tests/multiplatform/actualClassifierMustHasTheSameMembersAsNonFinalExpectClassifierChecker/changeFunctionTypeParameterNamesInOverride.fir.kt +++ b/compiler/testData/diagnostics/tests/multiplatform/actualClassifierMustHasTheSameMembersAsNonFinalExpectClassifierChecker/changeFunctionTypeParameterNamesInOverride.fir.kt @@ -10,6 +10,6 @@ open class Base { // MODULE: m2-jvm()()(m1-common) // FILE: jvm.kt -actual open class Foo : Base() { +actual open class Foo : Base() { override fun foo(t: R) {} } diff --git a/compiler/testData/diagnostics/tests/multiplatform/actualClassifierMustHasTheSameMembersAsNonFinalExpectClassifierChecker/changeFunctionTypeParameterNamesInOverride.ll.kt b/compiler/testData/diagnostics/tests/multiplatform/actualClassifierMustHasTheSameMembersAsNonFinalExpectClassifierChecker/changeFunctionTypeParameterNamesInOverride.ll.kt index d8a7c2b9c8b..52a42d06611 100644 --- a/compiler/testData/diagnostics/tests/multiplatform/actualClassifierMustHasTheSameMembersAsNonFinalExpectClassifierChecker/changeFunctionTypeParameterNamesInOverride.ll.kt +++ b/compiler/testData/diagnostics/tests/multiplatform/actualClassifierMustHasTheSameMembersAsNonFinalExpectClassifierChecker/changeFunctionTypeParameterNamesInOverride.ll.kt @@ -10,6 +10,6 @@ expect open class Foo : Base // MODULE: m2-jvm()()(m1-common) // FILE: jvm.kt -actual open class Foo : Base() { +actual open class Foo : Base() { override fun foo(t: R) {} } diff --git a/compiler/testData/diagnostics/tests/multiplatform/actualClassifierMustHasTheSameMembersAsNonFinalExpectClassifierChecker/changeLateinitInOverride.fir.kt b/compiler/testData/diagnostics/tests/multiplatform/actualClassifierMustHasTheSameMembersAsNonFinalExpectClassifierChecker/changeLateinitInOverride.fir.kt index 7453bd4f69e..826a7c01909 100644 --- a/compiler/testData/diagnostics/tests/multiplatform/actualClassifierMustHasTheSameMembersAsNonFinalExpectClassifierChecker/changeLateinitInOverride.fir.kt +++ b/compiler/testData/diagnostics/tests/multiplatform/actualClassifierMustHasTheSameMembersAsNonFinalExpectClassifierChecker/changeLateinitInOverride.fir.kt @@ -13,7 +13,7 @@ open class Base { // MODULE: m2-jvm()()(m1-common) // FILE: jvm.kt -actual open class Foo : Base() { +actual open class Foo : Base() { override lateinit var red1: String override var red2: String = "" override lateinit var green: String diff --git a/compiler/testData/diagnostics/tests/multiplatform/actualClassifierMustHasTheSameMembersAsNonFinalExpectClassifierChecker/changeLateinitInOverride.ll.kt b/compiler/testData/diagnostics/tests/multiplatform/actualClassifierMustHasTheSameMembersAsNonFinalExpectClassifierChecker/changeLateinitInOverride.ll.kt index f954695bfba..f86d922c82d 100644 --- a/compiler/testData/diagnostics/tests/multiplatform/actualClassifierMustHasTheSameMembersAsNonFinalExpectClassifierChecker/changeLateinitInOverride.ll.kt +++ b/compiler/testData/diagnostics/tests/multiplatform/actualClassifierMustHasTheSameMembersAsNonFinalExpectClassifierChecker/changeLateinitInOverride.ll.kt @@ -13,7 +13,7 @@ expect open class Foo : Base { // MODULE: m2-jvm()()(m1-common) // FILE: jvm.kt -actual open class Foo : Base() { +actual open class Foo : Base() { override lateinit var red1: String override var red2: String = "" override lateinit var green: String diff --git a/compiler/testData/diagnostics/tests/multiplatform/actualClassifierMustHasTheSameMembersAsNonFinalExpectClassifierChecker/changeModalityFromAbstractToFinalInOverride.fir.kt b/compiler/testData/diagnostics/tests/multiplatform/actualClassifierMustHasTheSameMembersAsNonFinalExpectClassifierChecker/changeModalityFromAbstractToFinalInOverride.fir.kt index 1224bfa64d6..2a8d316d932 100644 --- a/compiler/testData/diagnostics/tests/multiplatform/actualClassifierMustHasTheSameMembersAsNonFinalExpectClassifierChecker/changeModalityFromAbstractToFinalInOverride.fir.kt +++ b/compiler/testData/diagnostics/tests/multiplatform/actualClassifierMustHasTheSameMembersAsNonFinalExpectClassifierChecker/changeModalityFromAbstractToFinalInOverride.fir.kt @@ -10,6 +10,6 @@ interface Base { // MODULE: m2-jvm()()(m1-common) // FILE: jvm.kt -actual open class Foo : Base { +actual open class Foo : Base { final override fun foo() {} } diff --git a/compiler/testData/diagnostics/tests/multiplatform/actualClassifierMustHasTheSameMembersAsNonFinalExpectClassifierChecker/changeModalityFromAbstractToFinalInOverride.ll.kt b/compiler/testData/diagnostics/tests/multiplatform/actualClassifierMustHasTheSameMembersAsNonFinalExpectClassifierChecker/changeModalityFromAbstractToFinalInOverride.ll.kt index fecad3d145e..6d2f7135e69 100644 --- a/compiler/testData/diagnostics/tests/multiplatform/actualClassifierMustHasTheSameMembersAsNonFinalExpectClassifierChecker/changeModalityFromAbstractToFinalInOverride.ll.kt +++ b/compiler/testData/diagnostics/tests/multiplatform/actualClassifierMustHasTheSameMembersAsNonFinalExpectClassifierChecker/changeModalityFromAbstractToFinalInOverride.ll.kt @@ -10,6 +10,6 @@ expect open class Foo : Base // MODULE: m2-jvm()()(m1-common) // FILE: jvm.kt -actual open class Foo : Base { +actual open class Foo : Base { final override fun foo() {} } diff --git a/compiler/testData/diagnostics/tests/multiplatform/actualClassifierMustHasTheSameMembersAsNonFinalExpectClassifierChecker/changeModalityFromAbstractToOpenInOverride.fir.kt b/compiler/testData/diagnostics/tests/multiplatform/actualClassifierMustHasTheSameMembersAsNonFinalExpectClassifierChecker/changeModalityFromAbstractToOpenInOverride.fir.kt index 378a3e3a5b2..bb2ff8f7337 100644 --- a/compiler/testData/diagnostics/tests/multiplatform/actualClassifierMustHasTheSameMembersAsNonFinalExpectClassifierChecker/changeModalityFromAbstractToOpenInOverride.fir.kt +++ b/compiler/testData/diagnostics/tests/multiplatform/actualClassifierMustHasTheSameMembersAsNonFinalExpectClassifierChecker/changeModalityFromAbstractToOpenInOverride.fir.kt @@ -12,6 +12,6 @@ interface Base { // Mismatched scope must be reported here. But it's false negative checker in K1. // For some reason, K1 says that modality of `exect_Foo.foo` is `abstract`. // https://youtrack.jetbrains.com/issue/KT-59739 -actual open class Foo : Base { +actual open class Foo : Base { override fun foo() {} } diff --git a/compiler/testData/diagnostics/tests/multiplatform/actualClassifierMustHasTheSameMembersAsNonFinalExpectClassifierChecker/changeModalityFromAbstractToOpenInOverride.ll.kt b/compiler/testData/diagnostics/tests/multiplatform/actualClassifierMustHasTheSameMembersAsNonFinalExpectClassifierChecker/changeModalityFromAbstractToOpenInOverride.ll.kt index dca99f75dfc..ca65742a582 100644 --- a/compiler/testData/diagnostics/tests/multiplatform/actualClassifierMustHasTheSameMembersAsNonFinalExpectClassifierChecker/changeModalityFromAbstractToOpenInOverride.ll.kt +++ b/compiler/testData/diagnostics/tests/multiplatform/actualClassifierMustHasTheSameMembersAsNonFinalExpectClassifierChecker/changeModalityFromAbstractToOpenInOverride.ll.kt @@ -12,6 +12,6 @@ expect open class Foo() : Base // Mismatched scope must be reported here. But it's false negative checker in K1. // For some reason, K1 says that modality of `exect_Foo.foo` is `abstract`. // https://youtrack.jetbrains.com/issue/KT-59739 -actual open class Foo : Base { +actual open class Foo : Base { override fun foo() {} } diff --git a/compiler/testData/diagnostics/tests/multiplatform/actualClassifierMustHasTheSameMembersAsNonFinalExpectClassifierChecker/changeModalityFromOpenToAbstractInOverride.fir.kt b/compiler/testData/diagnostics/tests/multiplatform/actualClassifierMustHasTheSameMembersAsNonFinalExpectClassifierChecker/changeModalityFromOpenToAbstractInOverride.fir.kt index 59275dc00c5..e2d521b0c69 100644 --- a/compiler/testData/diagnostics/tests/multiplatform/actualClassifierMustHasTheSameMembersAsNonFinalExpectClassifierChecker/changeModalityFromOpenToAbstractInOverride.fir.kt +++ b/compiler/testData/diagnostics/tests/multiplatform/actualClassifierMustHasTheSameMembersAsNonFinalExpectClassifierChecker/changeModalityFromOpenToAbstractInOverride.fir.kt @@ -9,6 +9,6 @@ interface Base { // MODULE: m2-jvm()()(m1-common) // FILE: jvm.kt -actual abstract class Foo : Base { +actual abstract class Foo : Base { abstract override fun foo() } diff --git a/compiler/testData/diagnostics/tests/multiplatform/actualClassifierMustHasTheSameMembersAsNonFinalExpectClassifierChecker/changeModalityFromOpenToAbstractInOverride.ll.kt b/compiler/testData/diagnostics/tests/multiplatform/actualClassifierMustHasTheSameMembersAsNonFinalExpectClassifierChecker/changeModalityFromOpenToAbstractInOverride.ll.kt index 7288c9e75d1..80c2a8b8943 100644 --- a/compiler/testData/diagnostics/tests/multiplatform/actualClassifierMustHasTheSameMembersAsNonFinalExpectClassifierChecker/changeModalityFromOpenToAbstractInOverride.ll.kt +++ b/compiler/testData/diagnostics/tests/multiplatform/actualClassifierMustHasTheSameMembersAsNonFinalExpectClassifierChecker/changeModalityFromOpenToAbstractInOverride.ll.kt @@ -9,6 +9,6 @@ expect abstract class Foo() : Base // MODULE: m2-jvm()()(m1-common) // FILE: jvm.kt -actual abstract class Foo : Base { +actual abstract class Foo : Base { abstract override fun foo() } diff --git a/compiler/testData/diagnostics/tests/multiplatform/actualClassifierMustHasTheSameMembersAsNonFinalExpectClassifierChecker/changeModalityFromOpenToFinalInOverride.fir.kt b/compiler/testData/diagnostics/tests/multiplatform/actualClassifierMustHasTheSameMembersAsNonFinalExpectClassifierChecker/changeModalityFromOpenToFinalInOverride.fir.kt index 5fcc8f7e000..37a86b6915b 100644 --- a/compiler/testData/diagnostics/tests/multiplatform/actualClassifierMustHasTheSameMembersAsNonFinalExpectClassifierChecker/changeModalityFromOpenToFinalInOverride.fir.kt +++ b/compiler/testData/diagnostics/tests/multiplatform/actualClassifierMustHasTheSameMembersAsNonFinalExpectClassifierChecker/changeModalityFromOpenToFinalInOverride.fir.kt @@ -10,6 +10,6 @@ open class Base { // MODULE: m2-jvm()()(m1-common) // FILE: jvm.kt -actual open class Foo : Base() { +actual open class Foo : Base() { final override fun foo() {} } diff --git a/compiler/testData/diagnostics/tests/multiplatform/actualClassifierMustHasTheSameMembersAsNonFinalExpectClassifierChecker/changeModalityFromOpenToFinalInOverride.ll.kt b/compiler/testData/diagnostics/tests/multiplatform/actualClassifierMustHasTheSameMembersAsNonFinalExpectClassifierChecker/changeModalityFromOpenToFinalInOverride.ll.kt index 0f120ff95ee..5397ccf17b6 100644 --- a/compiler/testData/diagnostics/tests/multiplatform/actualClassifierMustHasTheSameMembersAsNonFinalExpectClassifierChecker/changeModalityFromOpenToFinalInOverride.ll.kt +++ b/compiler/testData/diagnostics/tests/multiplatform/actualClassifierMustHasTheSameMembersAsNonFinalExpectClassifierChecker/changeModalityFromOpenToFinalInOverride.ll.kt @@ -10,6 +10,6 @@ expect open class Foo : Base // MODULE: m2-jvm()()(m1-common) // FILE: jvm.kt -actual open class Foo : Base() { +actual open class Foo : Base() { final override fun foo() {} } diff --git a/compiler/testData/diagnostics/tests/multiplatform/actualClassifierMustHasTheSameMembersAsNonFinalExpectClassifierChecker/changeModalityOfSubstitutedFakeOverride.fir.kt b/compiler/testData/diagnostics/tests/multiplatform/actualClassifierMustHasTheSameMembersAsNonFinalExpectClassifierChecker/changeModalityOfSubstitutedFakeOverride.fir.kt index afe583b5f93..f024f365461 100644 --- a/compiler/testData/diagnostics/tests/multiplatform/actualClassifierMustHasTheSameMembersAsNonFinalExpectClassifierChecker/changeModalityOfSubstitutedFakeOverride.fir.kt +++ b/compiler/testData/diagnostics/tests/multiplatform/actualClassifierMustHasTheSameMembersAsNonFinalExpectClassifierChecker/changeModalityOfSubstitutedFakeOverride.fir.kt @@ -10,6 +10,6 @@ open class Base { // MODULE: m2-jvm()()(m1-common) // FILE: jvm.kt -actual open class Foo : Base() { +actual open class Foo : Base() { final override fun foo(t: String) {} } diff --git a/compiler/testData/diagnostics/tests/multiplatform/actualClassifierMustHasTheSameMembersAsNonFinalExpectClassifierChecker/changeModalityOfSubstitutedFakeOverride.ll.kt b/compiler/testData/diagnostics/tests/multiplatform/actualClassifierMustHasTheSameMembersAsNonFinalExpectClassifierChecker/changeModalityOfSubstitutedFakeOverride.ll.kt index 97095ce2495..12871c31a97 100644 --- a/compiler/testData/diagnostics/tests/multiplatform/actualClassifierMustHasTheSameMembersAsNonFinalExpectClassifierChecker/changeModalityOfSubstitutedFakeOverride.ll.kt +++ b/compiler/testData/diagnostics/tests/multiplatform/actualClassifierMustHasTheSameMembersAsNonFinalExpectClassifierChecker/changeModalityOfSubstitutedFakeOverride.ll.kt @@ -10,6 +10,6 @@ expect open class Foo : Base // MODULE: m2-jvm()()(m1-common) // FILE: jvm.kt -actual open class Foo : Base() { +actual open class Foo : Base() { final override fun foo(t: String) {} } diff --git a/compiler/testData/diagnostics/tests/multiplatform/actualClassifierMustHasTheSameMembersAsNonFinalExpectClassifierChecker/changeModalityOfToStringInOverride.fir.kt b/compiler/testData/diagnostics/tests/multiplatform/actualClassifierMustHasTheSameMembersAsNonFinalExpectClassifierChecker/changeModalityOfToStringInOverride.fir.kt index 64aacecc60f..2de117e7d9d 100644 --- a/compiler/testData/diagnostics/tests/multiplatform/actualClassifierMustHasTheSameMembersAsNonFinalExpectClassifierChecker/changeModalityOfToStringInOverride.fir.kt +++ b/compiler/testData/diagnostics/tests/multiplatform/actualClassifierMustHasTheSameMembersAsNonFinalExpectClassifierChecker/changeModalityOfToStringInOverride.fir.kt @@ -6,6 +6,6 @@ // MODULE: m2-jvm()()(m1-common) // FILE: jvm.kt -actual open class Foo { +actual open class Foo { final override fun toString() = "Foo" } diff --git a/compiler/testData/diagnostics/tests/multiplatform/actualClassifierMustHasTheSameMembersAsNonFinalExpectClassifierChecker/changeModalityOfToStringInOverride.ll.kt b/compiler/testData/diagnostics/tests/multiplatform/actualClassifierMustHasTheSameMembersAsNonFinalExpectClassifierChecker/changeModalityOfToStringInOverride.ll.kt index a6db51f1d91..a21c39af526 100644 --- a/compiler/testData/diagnostics/tests/multiplatform/actualClassifierMustHasTheSameMembersAsNonFinalExpectClassifierChecker/changeModalityOfToStringInOverride.ll.kt +++ b/compiler/testData/diagnostics/tests/multiplatform/actualClassifierMustHasTheSameMembersAsNonFinalExpectClassifierChecker/changeModalityOfToStringInOverride.ll.kt @@ -6,6 +6,6 @@ expect open class Foo // MODULE: m2-jvm()()(m1-common) // FILE: jvm.kt -actual open class Foo { +actual open class Foo { final override fun toString() = "Foo" } diff --git a/compiler/testData/diagnostics/tests/multiplatform/actualClassifierMustHasTheSameMembersAsNonFinalExpectClassifierChecker/changeParameterNameInOverride.fir.kt b/compiler/testData/diagnostics/tests/multiplatform/actualClassifierMustHasTheSameMembersAsNonFinalExpectClassifierChecker/changeParameterNameInOverride.fir.kt index d0e00538386..365711bc9fa 100644 --- a/compiler/testData/diagnostics/tests/multiplatform/actualClassifierMustHasTheSameMembersAsNonFinalExpectClassifierChecker/changeParameterNameInOverride.fir.kt +++ b/compiler/testData/diagnostics/tests/multiplatform/actualClassifierMustHasTheSameMembersAsNonFinalExpectClassifierChecker/changeParameterNameInOverride.fir.kt @@ -14,7 +14,7 @@ expect open class Foo3 { // MODULE: m2-jvm()()(m1-common) // FILE: jvm.kt -actual open class Foo1 : Base() { +actual open class Foo1 : Base() { override fun foo(paramNameChanged: Int) {} } diff --git a/compiler/testData/diagnostics/tests/multiplatform/actualClassifierMustHasTheSameMembersAsNonFinalExpectClassifierChecker/changeParameterNameInOverride.ll.kt b/compiler/testData/diagnostics/tests/multiplatform/actualClassifierMustHasTheSameMembersAsNonFinalExpectClassifierChecker/changeParameterNameInOverride.ll.kt index 285eec862fb..2ac82ecce9e 100644 --- a/compiler/testData/diagnostics/tests/multiplatform/actualClassifierMustHasTheSameMembersAsNonFinalExpectClassifierChecker/changeParameterNameInOverride.ll.kt +++ b/compiler/testData/diagnostics/tests/multiplatform/actualClassifierMustHasTheSameMembersAsNonFinalExpectClassifierChecker/changeParameterNameInOverride.ll.kt @@ -14,7 +14,7 @@ expect open class Foo3 { // MODULE: m2-jvm()()(m1-common) // FILE: jvm.kt -actual open class Foo1 : Base() { +actual open class Foo1 : Base() { override fun foo(paramNameChanged: Int) {} } diff --git a/compiler/testData/diagnostics/tests/multiplatform/actualClassifierMustHasTheSameMembersAsNonFinalExpectClassifierChecker/changeVarargModifierInOverride.fir.kt b/compiler/testData/diagnostics/tests/multiplatform/actualClassifierMustHasTheSameMembersAsNonFinalExpectClassifierChecker/changeVarargModifierInOverride.fir.kt index 800468af7a7..4a3cca52bb1 100644 --- a/compiler/testData/diagnostics/tests/multiplatform/actualClassifierMustHasTheSameMembersAsNonFinalExpectClassifierChecker/changeVarargModifierInOverride.fir.kt +++ b/compiler/testData/diagnostics/tests/multiplatform/actualClassifierMustHasTheSameMembersAsNonFinalExpectClassifierChecker/changeVarargModifierInOverride.fir.kt @@ -11,6 +11,6 @@ open class Base { // MODULE: m2-jvm()()(m1-common) // FILE: jvm.kt -actual open class Foo : Base() { +actual open class Foo : Base() { override fun foo(bar: IntArray) {} } diff --git a/compiler/testData/diagnostics/tests/multiplatform/actualClassifierMustHasTheSameMembersAsNonFinalExpectClassifierChecker/changeVarargModifierInOverride.ll.kt b/compiler/testData/diagnostics/tests/multiplatform/actualClassifierMustHasTheSameMembersAsNonFinalExpectClassifierChecker/changeVarargModifierInOverride.ll.kt index b4da96e78a6..ee968020e0a 100644 --- a/compiler/testData/diagnostics/tests/multiplatform/actualClassifierMustHasTheSameMembersAsNonFinalExpectClassifierChecker/changeVarargModifierInOverride.ll.kt +++ b/compiler/testData/diagnostics/tests/multiplatform/actualClassifierMustHasTheSameMembersAsNonFinalExpectClassifierChecker/changeVarargModifierInOverride.ll.kt @@ -11,6 +11,6 @@ expect open class Foo : Base { // MODULE: m2-jvm()()(m1-common) // FILE: jvm.kt -actual open class Foo : Base() { +actual open class Foo : Base() { override fun foo(bar: IntArray) {} } diff --git a/compiler/testData/diagnostics/tests/multiplatform/actualClassifierMustHasTheSameMembersAsNonFinalExpectClassifierChecker/changeVisibilityInOverride.fir.kt b/compiler/testData/diagnostics/tests/multiplatform/actualClassifierMustHasTheSameMembersAsNonFinalExpectClassifierChecker/changeVisibilityInOverride.fir.kt index eb4bdb07bff..bcf47c17ed9 100644 --- a/compiler/testData/diagnostics/tests/multiplatform/actualClassifierMustHasTheSameMembersAsNonFinalExpectClassifierChecker/changeVisibilityInOverride.fir.kt +++ b/compiler/testData/diagnostics/tests/multiplatform/actualClassifierMustHasTheSameMembersAsNonFinalExpectClassifierChecker/changeVisibilityInOverride.fir.kt @@ -10,6 +10,6 @@ open class Base { // MODULE: m2-jvm()()(m1-common) // FILE: jvm.kt -actual open class Foo : Base() { +actual open class Foo : Base() { public override fun foo() {} } diff --git a/compiler/testData/diagnostics/tests/multiplatform/actualClassifierMustHasTheSameMembersAsNonFinalExpectClassifierChecker/changeVisibilityInOverride.ll.kt b/compiler/testData/diagnostics/tests/multiplatform/actualClassifierMustHasTheSameMembersAsNonFinalExpectClassifierChecker/changeVisibilityInOverride.ll.kt index 42fb0aa213f..276ced5628b 100644 --- a/compiler/testData/diagnostics/tests/multiplatform/actualClassifierMustHasTheSameMembersAsNonFinalExpectClassifierChecker/changeVisibilityInOverride.ll.kt +++ b/compiler/testData/diagnostics/tests/multiplatform/actualClassifierMustHasTheSameMembersAsNonFinalExpectClassifierChecker/changeVisibilityInOverride.ll.kt @@ -10,6 +10,6 @@ expect open class Foo : Base // MODULE: m2-jvm()()(m1-common) // FILE: jvm.kt -actual open class Foo : Base() { +actual open class Foo : Base() { public override fun foo() {} } diff --git a/compiler/testData/diagnostics/tests/multiplatform/actualClassifierMustHasTheSameMembersAsNonFinalExpectClassifierChecker/covariantFunctionOverride.fir.kt b/compiler/testData/diagnostics/tests/multiplatform/actualClassifierMustHasTheSameMembersAsNonFinalExpectClassifierChecker/covariantFunctionOverride.fir.kt index 1004c75aaf4..19f3153d1d8 100644 --- a/compiler/testData/diagnostics/tests/multiplatform/actualClassifierMustHasTheSameMembersAsNonFinalExpectClassifierChecker/covariantFunctionOverride.fir.kt +++ b/compiler/testData/diagnostics/tests/multiplatform/actualClassifierMustHasTheSameMembersAsNonFinalExpectClassifierChecker/covariantFunctionOverride.fir.kt @@ -12,6 +12,6 @@ open class Base { // MODULE: m2-jvm()()(m1-common) // FILE: jvm.kt -actual open class Foo : Base() { +actual open class Foo : Base() { override fun foo(): String = "" } diff --git a/compiler/testData/diagnostics/tests/multiplatform/actualClassifierMustHasTheSameMembersAsNonFinalExpectClassifierChecker/covariantFunctionOverride.ll.kt b/compiler/testData/diagnostics/tests/multiplatform/actualClassifierMustHasTheSameMembersAsNonFinalExpectClassifierChecker/covariantFunctionOverride.ll.kt index 244520ea4f8..6f974698eb8 100644 --- a/compiler/testData/diagnostics/tests/multiplatform/actualClassifierMustHasTheSameMembersAsNonFinalExpectClassifierChecker/covariantFunctionOverride.ll.kt +++ b/compiler/testData/diagnostics/tests/multiplatform/actualClassifierMustHasTheSameMembersAsNonFinalExpectClassifierChecker/covariantFunctionOverride.ll.kt @@ -12,6 +12,6 @@ expect open class Foo : Base { // MODULE: m2-jvm()()(m1-common) // FILE: jvm.kt -actual open class Foo : Base() { +actual open class Foo : Base() { override fun foo(): String = "" } diff --git a/compiler/testData/diagnostics/tests/multiplatform/actualClassifierMustHasTheSameMembersAsNonFinalExpectClassifierChecker/covariantOverrideGenericUpperBound.fir.kt b/compiler/testData/diagnostics/tests/multiplatform/actualClassifierMustHasTheSameMembersAsNonFinalExpectClassifierChecker/covariantOverrideGenericUpperBound.fir.kt index df9db6e8949..64a95d47c7f 100644 --- a/compiler/testData/diagnostics/tests/multiplatform/actualClassifierMustHasTheSameMembersAsNonFinalExpectClassifierChecker/covariantOverrideGenericUpperBound.fir.kt +++ b/compiler/testData/diagnostics/tests/multiplatform/actualClassifierMustHasTheSameMembersAsNonFinalExpectClassifierChecker/covariantOverrideGenericUpperBound.fir.kt @@ -13,6 +13,6 @@ open class Base { // MODULE: m2-jvm()()(m1-common) // FILE: jvm.kt -actual open class Foo : Base() { +actual open class Foo : Base() { override fun foo(): T = null!! } diff --git a/compiler/testData/diagnostics/tests/multiplatform/actualClassifierMustHasTheSameMembersAsNonFinalExpectClassifierChecker/covariantOverrideGenericUpperBound.ll.kt b/compiler/testData/diagnostics/tests/multiplatform/actualClassifierMustHasTheSameMembersAsNonFinalExpectClassifierChecker/covariantOverrideGenericUpperBound.ll.kt index b0cf8421b07..1d940d71c8c 100644 --- a/compiler/testData/diagnostics/tests/multiplatform/actualClassifierMustHasTheSameMembersAsNonFinalExpectClassifierChecker/covariantOverrideGenericUpperBound.ll.kt +++ b/compiler/testData/diagnostics/tests/multiplatform/actualClassifierMustHasTheSameMembersAsNonFinalExpectClassifierChecker/covariantOverrideGenericUpperBound.ll.kt @@ -13,6 +13,6 @@ expect open class Foo : Base { // MODULE: m2-jvm()()(m1-common) // FILE: jvm.kt -actual open class Foo : Base() { +actual open class Foo : Base() { override fun foo(): T = null!! } diff --git a/compiler/testData/diagnostics/tests/multiplatform/actualClassifierMustHasTheSameMembersAsNonFinalExpectClassifierChecker/covariantOverrideGenerics.fir.kt b/compiler/testData/diagnostics/tests/multiplatform/actualClassifierMustHasTheSameMembersAsNonFinalExpectClassifierChecker/covariantOverrideGenerics.fir.kt index 9259c7d1a6c..d5e95aae690 100644 --- a/compiler/testData/diagnostics/tests/multiplatform/actualClassifierMustHasTheSameMembersAsNonFinalExpectClassifierChecker/covariantOverrideGenerics.fir.kt +++ b/compiler/testData/diagnostics/tests/multiplatform/actualClassifierMustHasTheSameMembersAsNonFinalExpectClassifierChecker/covariantOverrideGenerics.fir.kt @@ -11,6 +11,6 @@ open class Base { // MODULE: m2-jvm()()(m1-common) // FILE: jvm.kt -actual open class Foo : Base() { +actual open class Foo : Base() { override fun foo(): F = null!! } diff --git a/compiler/testData/diagnostics/tests/multiplatform/actualClassifierMustHasTheSameMembersAsNonFinalExpectClassifierChecker/covariantOverrideGenerics.ll.kt b/compiler/testData/diagnostics/tests/multiplatform/actualClassifierMustHasTheSameMembersAsNonFinalExpectClassifierChecker/covariantOverrideGenerics.ll.kt index b2541f52358..804a46fcd56 100644 --- a/compiler/testData/diagnostics/tests/multiplatform/actualClassifierMustHasTheSameMembersAsNonFinalExpectClassifierChecker/covariantOverrideGenerics.ll.kt +++ b/compiler/testData/diagnostics/tests/multiplatform/actualClassifierMustHasTheSameMembersAsNonFinalExpectClassifierChecker/covariantOverrideGenerics.ll.kt @@ -11,6 +11,6 @@ expect open class Foo : Base { // MODULE: m2-jvm()()(m1-common) // FILE: jvm.kt -actual open class Foo : Base() { +actual open class Foo : Base() { override fun foo(): F = null!! } diff --git a/compiler/testData/diagnostics/tests/multiplatform/actualClassifierMustHasTheSameMembersAsNonFinalExpectClassifierChecker/covariantPropertyOverride.fir.kt b/compiler/testData/diagnostics/tests/multiplatform/actualClassifierMustHasTheSameMembersAsNonFinalExpectClassifierChecker/covariantPropertyOverride.fir.kt index 1c5a1354042..6a8fb817d5d 100644 --- a/compiler/testData/diagnostics/tests/multiplatform/actualClassifierMustHasTheSameMembersAsNonFinalExpectClassifierChecker/covariantPropertyOverride.fir.kt +++ b/compiler/testData/diagnostics/tests/multiplatform/actualClassifierMustHasTheSameMembersAsNonFinalExpectClassifierChecker/covariantPropertyOverride.fir.kt @@ -11,6 +11,6 @@ open class Base { // MODULE: m2-jvm()()(m1-common) // FILE: jvm.kt -actual open class Foo : Base() { +actual open class Foo : Base() { override val foo: String = "" } diff --git a/compiler/testData/diagnostics/tests/multiplatform/actualClassifierMustHasTheSameMembersAsNonFinalExpectClassifierChecker/covariantPropertyOverride.ll.kt b/compiler/testData/diagnostics/tests/multiplatform/actualClassifierMustHasTheSameMembersAsNonFinalExpectClassifierChecker/covariantPropertyOverride.ll.kt index 5f350ed7859..3757539525f 100644 --- a/compiler/testData/diagnostics/tests/multiplatform/actualClassifierMustHasTheSameMembersAsNonFinalExpectClassifierChecker/covariantPropertyOverride.ll.kt +++ b/compiler/testData/diagnostics/tests/multiplatform/actualClassifierMustHasTheSameMembersAsNonFinalExpectClassifierChecker/covariantPropertyOverride.ll.kt @@ -11,6 +11,6 @@ expect open class Foo : Base // MODULE: m2-jvm()()(m1-common) // FILE: jvm.kt -actual open class Foo : Base() { +actual open class Foo : Base() { override val foo: String = "" } diff --git a/compiler/testData/diagnostics/tests/multiplatform/actualClassifierMustHasTheSameMembersAsNonFinalExpectClassifierChecker/flexibleTypesMatching.fir.kt b/compiler/testData/diagnostics/tests/multiplatform/actualClassifierMustHasTheSameMembersAsNonFinalExpectClassifierChecker/flexibleTypesMatching.fir.kt index 261b9aadbaf..cfa7ded6e31 100644 --- a/compiler/testData/diagnostics/tests/multiplatform/actualClassifierMustHasTheSameMembersAsNonFinalExpectClassifierChecker/flexibleTypesMatching.fir.kt +++ b/compiler/testData/diagnostics/tests/multiplatform/actualClassifierMustHasTheSameMembersAsNonFinalExpectClassifierChecker/flexibleTypesMatching.fir.kt @@ -14,7 +14,7 @@ expect open class Base { actual typealias Base = BaseJava -actual open class Foo : Base() { +actual open class Foo : Base() { // K1 doesn't report a diagnostic here because when it compares scopes it sees flexible type // K2 will likely report a diagnostic here // I don't think we can fix this 'K1 green -> K2 red'. It must be a rare case anyway. diff --git a/compiler/testData/diagnostics/tests/multiplatform/actualClassifierMustHasTheSameMembersAsNonFinalExpectClassifierChecker/flexibleTypesMatching.ll.kt b/compiler/testData/diagnostics/tests/multiplatform/actualClassifierMustHasTheSameMembersAsNonFinalExpectClassifierChecker/flexibleTypesMatching.ll.kt index 2864d178ad6..51f48c3301b 100644 --- a/compiler/testData/diagnostics/tests/multiplatform/actualClassifierMustHasTheSameMembersAsNonFinalExpectClassifierChecker/flexibleTypesMatching.ll.kt +++ b/compiler/testData/diagnostics/tests/multiplatform/actualClassifierMustHasTheSameMembersAsNonFinalExpectClassifierChecker/flexibleTypesMatching.ll.kt @@ -14,7 +14,7 @@ expect open class Foo : Base { actual typealias Base = BaseJava -actual open class Foo : Base() { +actual open class Foo : Base() { // K1 doesn't report a diagnostic here because when it compares scopes it sees flexible type // K2 will likely report a diagnostic here // I don't think we can fix this 'K1 green -> K2 red'. It must be a rare case anyway. diff --git a/compiler/testData/diagnostics/tests/multiplatform/actualClassifierMustHasTheSameMembersAsNonFinalExpectClassifierChecker/propertyKindOverride.fir.kt b/compiler/testData/diagnostics/tests/multiplatform/actualClassifierMustHasTheSameMembersAsNonFinalExpectClassifierChecker/propertyKindOverride.fir.kt index acab3021d6d..3cc168f5573 100644 --- a/compiler/testData/diagnostics/tests/multiplatform/actualClassifierMustHasTheSameMembersAsNonFinalExpectClassifierChecker/propertyKindOverride.fir.kt +++ b/compiler/testData/diagnostics/tests/multiplatform/actualClassifierMustHasTheSameMembersAsNonFinalExpectClassifierChecker/propertyKindOverride.fir.kt @@ -10,6 +10,6 @@ open class Base { // MODULE: m2-jvm()()(m1-common) // FILE: jvm.kt -actual open class Foo : Base() { +actual open class Foo : Base() { override var foo: Int = 1 } diff --git a/compiler/testData/diagnostics/tests/multiplatform/actualClassifierMustHasTheSameMembersAsNonFinalExpectClassifierChecker/propertyKindOverride.ll.kt b/compiler/testData/diagnostics/tests/multiplatform/actualClassifierMustHasTheSameMembersAsNonFinalExpectClassifierChecker/propertyKindOverride.ll.kt index f49dbac0ac9..2aceb5f6914 100644 --- a/compiler/testData/diagnostics/tests/multiplatform/actualClassifierMustHasTheSameMembersAsNonFinalExpectClassifierChecker/propertyKindOverride.ll.kt +++ b/compiler/testData/diagnostics/tests/multiplatform/actualClassifierMustHasTheSameMembersAsNonFinalExpectClassifierChecker/propertyKindOverride.ll.kt @@ -10,6 +10,6 @@ expect open class Foo : Base // MODULE: m2-jvm()()(m1-common) // FILE: jvm.kt -actual open class Foo : Base() { +actual open class Foo : Base() { override var foo: Int = 1 } diff --git a/compiler/testData/diagnostics/tests/multiplatform/actualClassifierMustHasTheSameMembersAsNonFinalExpectClassifierChecker/severalMismatches.fir.kt b/compiler/testData/diagnostics/tests/multiplatform/actualClassifierMustHasTheSameMembersAsNonFinalExpectClassifierChecker/severalMismatches.fir.kt index 42f73030563..da6eca7a2eb 100644 --- a/compiler/testData/diagnostics/tests/multiplatform/actualClassifierMustHasTheSameMembersAsNonFinalExpectClassifierChecker/severalMismatches.fir.kt +++ b/compiler/testData/diagnostics/tests/multiplatform/actualClassifierMustHasTheSameMembersAsNonFinalExpectClassifierChecker/severalMismatches.fir.kt @@ -16,7 +16,7 @@ open class Base() { // MODULE: m2-jvm()()(m1-common) // FILE: jvm.kt -actual open class Foo : Base() { +actual open class Foo : Base() { actual fun existingMethod() {} actual val existingParam: Int = 904 diff --git a/compiler/testData/diagnostics/tests/multiplatform/actualClassifierMustHasTheSameMembersAsNonFinalExpectClassifierChecker/severalMismatches.ll.kt b/compiler/testData/diagnostics/tests/multiplatform/actualClassifierMustHasTheSameMembersAsNonFinalExpectClassifierChecker/severalMismatches.ll.kt index 62f36af0da1..34d48a99aa3 100644 --- a/compiler/testData/diagnostics/tests/multiplatform/actualClassifierMustHasTheSameMembersAsNonFinalExpectClassifierChecker/severalMismatches.ll.kt +++ b/compiler/testData/diagnostics/tests/multiplatform/actualClassifierMustHasTheSameMembersAsNonFinalExpectClassifierChecker/severalMismatches.ll.kt @@ -16,7 +16,7 @@ expect open class Foo : Base { // MODULE: m2-jvm()()(m1-common) // FILE: jvm.kt -actual open class Foo : Base() { +actual open class Foo : Base() { actual fun existingMethod() {} actual val existingParam: Int = 904 diff --git a/compiler/testData/diagnostics/tests/multiplatform/actualTypealiasForNotExpectClass.fir.kt b/compiler/testData/diagnostics/tests/multiplatform/actualTypealiasForNotExpectClass.fir.kt new file mode 100644 index 00000000000..f0a0bff70d6 --- /dev/null +++ b/compiler/testData/diagnostics/tests/multiplatform/actualTypealiasForNotExpectClass.fir.kt @@ -0,0 +1,29 @@ +// MODULE: m1-common +// FILE: common.kt + +open class A { + open fun foo(): String = "Fail" +} +expect class C1() : A +expect class C2() : A + +// MODULE: m2-jvm()()(m1-common) +// FILE: A_J.java +public class A_J {} + +// FILE: B_J.java +public class B_J extends A_J { + public String foo() { return "O"; } +} + +// FILE: C2_J.java +public class C2_J extends B_J { + public String foo() { return "K"; } +} + +// FILE: main.kt +actual typealias A = A_J + +// Indirect subtyping is allowed in K2 KT-59356 +actual class C1 : B_J() +actual typealias C2 = C2_J diff --git a/compiler/testData/diagnostics/tests/multiplatform/actualTypealiasForNotExpectClass.kt b/compiler/testData/diagnostics/tests/multiplatform/actualTypealiasForNotExpectClass.kt new file mode 100644 index 00000000000..4b66483d291 --- /dev/null +++ b/compiler/testData/diagnostics/tests/multiplatform/actualTypealiasForNotExpectClass.kt @@ -0,0 +1,29 @@ +// MODULE: m1-common +// FILE: common.kt + +open class A { + open fun foo(): String = "Fail" +} +expect class C1() : A +expect class C2() : A + +// MODULE: m2-jvm()()(m1-common) +// FILE: A_J.java +public class A_J {} + +// FILE: B_J.java +public class B_J extends A_J { + public String foo() { return "O"; } +} + +// FILE: C2_J.java +public class C2_J extends B_J { + public String foo() { return "K"; } +} + +// FILE: main.kt +actual typealias A = A_J + +// Indirect subtyping is allowed in K2 KT-59356 +actual class C1 : B_J() +actual typealias C2 = C2_J diff --git a/compiler/testData/diagnostics/tests/multiplatform/headerClass/equalsOverrideInActualInterface.fir.kt b/compiler/testData/diagnostics/tests/multiplatform/headerClass/equalsOverrideInActualInterface.fir.kt index 2a725f1ac29..b0f076249c9 100644 --- a/compiler/testData/diagnostics/tests/multiplatform/headerClass/equalsOverrideInActualInterface.fir.kt +++ b/compiler/testData/diagnostics/tests/multiplatform/headerClass/equalsOverrideInActualInterface.fir.kt @@ -2,6 +2,6 @@ expect interface Base // MODULE: m1-jvm()()(m1-common) -actual interface Base { +actual interface Base { override fun equals(other: Any?): Boolean } diff --git a/compiler/testData/diagnostics/tests/multiplatform/headerClass/equalsOverrideInActualInterface.ll.kt b/compiler/testData/diagnostics/tests/multiplatform/headerClass/equalsOverrideInActualInterface.ll.kt index edc9b346347..2ec7ceac1b7 100644 --- a/compiler/testData/diagnostics/tests/multiplatform/headerClass/equalsOverrideInActualInterface.ll.kt +++ b/compiler/testData/diagnostics/tests/multiplatform/headerClass/equalsOverrideInActualInterface.ll.kt @@ -2,6 +2,6 @@ expect interface Base // MODULE: m1-jvm()()(m1-common) -actual interface Base { +actual interface Base { override fun equals(other: Any?): Boolean } diff --git a/compiler/testData/diagnostics/tests/multiplatform/implicitActualFakeOverride_AbstractMap.fir.kt b/compiler/testData/diagnostics/tests/multiplatform/implicitActualFakeOverride_AbstractMap.fir.kt index 7c1b21fe30a..51a4179d4f1 100644 --- a/compiler/testData/diagnostics/tests/multiplatform/implicitActualFakeOverride_AbstractMap.fir.kt +++ b/compiler/testData/diagnostics/tests/multiplatform/implicitActualFakeOverride_AbstractMap.fir.kt @@ -12,4 +12,4 @@ import java.util.AbstractMap -public actual abstract class AbstractMutableMap() : MutableMap, AbstractMap() +public actual abstract class AbstractMutableMap() : MutableMap, AbstractMap() diff --git a/compiler/testData/diagnostics/tests/multiplatform/implicitActualFakeOverride_AbstractMap.ll.kt b/compiler/testData/diagnostics/tests/multiplatform/implicitActualFakeOverride_AbstractMap.ll.kt index b2c3ad70bd9..3a83499727c 100644 --- a/compiler/testData/diagnostics/tests/multiplatform/implicitActualFakeOverride_AbstractMap.ll.kt +++ b/compiler/testData/diagnostics/tests/multiplatform/implicitActualFakeOverride_AbstractMap.ll.kt @@ -12,4 +12,4 @@ public expect abstract class AbstractMutableMap : MutableMap { import java.util.AbstractMap -public actual abstract class AbstractMutableMap() : MutableMap, AbstractMap() +public actual abstract class AbstractMutableMap() : MutableMap, AbstractMap() diff --git a/compiler/testData/diagnostics/tests/multiplatform/typealias/actualTypealiasToNothing.fir.kt b/compiler/testData/diagnostics/tests/multiplatform/typealias/actualTypealiasToNothing.fir.kt index bbee0f63844..32edc397c50 100644 --- a/compiler/testData/diagnostics/tests/multiplatform/typealias/actualTypealiasToNothing.fir.kt +++ b/compiler/testData/diagnostics/tests/multiplatform/typealias/actualTypealiasToNothing.fir.kt @@ -9,5 +9,5 @@ typealias MyNothing = Nothing -actual typealias E01 = Nothing -actual typealias E02 = MyNothing +actual typealias E01 = Nothing +actual typealias E02 = MyNothing diff --git a/compiler/testData/diagnostics/tests/multiplatform/typealias/actualTypealiasToNothing.ll.kt b/compiler/testData/diagnostics/tests/multiplatform/typealias/actualTypealiasToNothing.ll.kt index 3d99a97d13d..c2d8cc02f06 100644 --- a/compiler/testData/diagnostics/tests/multiplatform/typealias/actualTypealiasToNothing.ll.kt +++ b/compiler/testData/diagnostics/tests/multiplatform/typealias/actualTypealiasToNothing.ll.kt @@ -9,5 +9,5 @@ expect class E02 typealias MyNothing = Nothing -actual typealias E01 = Nothing -actual typealias E02 = MyNothing +actual typealias E01 = Nothing +actual typealias E02 = MyNothing diff --git a/compiler/testData/diagnostics/tests/multiplatform/typealias/actualTypealiasToNothing_oldLanguageVersion.fir.kt b/compiler/testData/diagnostics/tests/multiplatform/typealias/actualTypealiasToNothing_oldLanguageVersion.fir.kt index 80fdf22e99d..e64b3224fba 100644 --- a/compiler/testData/diagnostics/tests/multiplatform/typealias/actualTypealiasToNothing_oldLanguageVersion.fir.kt +++ b/compiler/testData/diagnostics/tests/multiplatform/typealias/actualTypealiasToNothing_oldLanguageVersion.fir.kt @@ -10,5 +10,5 @@ typealias MyNothing = Nothing -actual typealias E01 = Nothing -actual typealias E02 = MyNothing +actual typealias E01 = Nothing +actual typealias E02 = MyNothing diff --git a/compiler/testData/diagnostics/tests/multiplatform/typealias/actualTypealiasToNothing_oldLanguageVersion.ll.kt b/compiler/testData/diagnostics/tests/multiplatform/typealias/actualTypealiasToNothing_oldLanguageVersion.ll.kt index 501cf8ae712..0372c233af3 100644 --- a/compiler/testData/diagnostics/tests/multiplatform/typealias/actualTypealiasToNothing_oldLanguageVersion.ll.kt +++ b/compiler/testData/diagnostics/tests/multiplatform/typealias/actualTypealiasToNothing_oldLanguageVersion.ll.kt @@ -10,5 +10,5 @@ expect class E02 typealias MyNothing = Nothing -actual typealias E01 = Nothing -actual typealias E02 = MyNothing +actual typealias E01 = Nothing +actual typealias E02 = MyNothing diff --git a/compiler/testData/multiplatform/implTypeAlias/actualTypealiasToNothing/output.txt b/compiler/testData/multiplatform/implTypeAlias/actualTypealiasToNothing/output.txt index 83f63c3f35d..65f793901f9 100644 --- a/compiler/testData/multiplatform/implTypeAlias/actualTypealiasToNothing/output.txt +++ b/compiler/testData/multiplatform/implTypeAlias/actualTypealiasToNothing/output.txt @@ -8,6 +8,26 @@ Output: compiler/testData/multiplatform/implTypeAlias/actualTypealiasToNothing/jvm.kt:3:1: error: right-hand side of actual type alias cannot be of type kotlin.Nothing actual typealias E01 = Nothing ^ +compiler/testData/multiplatform/implTypeAlias/actualTypealiasToNothing/jvm.kt:3:18: error: 'actual typealias E01 = Nothing' has no corresponding members for expected class members: + + fun equals(other: Any?): Boolean + + fun hashCode(): Int + + fun toString(): String + +actual typealias E01 = Nothing + ^ compiler/testData/multiplatform/implTypeAlias/actualTypealiasToNothing/jvm.kt:4:1: error: right-hand side of actual type alias should be a class, not another type alias. actual typealias E02 = MyNothing ^ +compiler/testData/multiplatform/implTypeAlias/actualTypealiasToNothing/jvm.kt:4:18: error: 'actual typealias E02 = MyNothing' has no corresponding members for expected class members: + + fun equals(other: Any?): Boolean + + fun hashCode(): Int + + fun toString(): String + +actual typealias E02 = MyNothing + ^ diff --git a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/DiagnosticTestGenerated.java b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/DiagnosticTestGenerated.java index 639d2cad13f..eecbc14dfc2 100644 --- a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/DiagnosticTestGenerated.java +++ b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/DiagnosticTestGenerated.java @@ -23707,6 +23707,12 @@ public class DiagnosticTestGenerated extends AbstractDiagnosticTest { runTest("compiler/testData/diagnostics/tests/multiplatform/actualFakeOverride_transitiveFakeOverrides_incompatible.kt"); } + @Test + @TestMetadata("actualTypealiasForNotExpectClass.kt") + public void testActualTypealiasForNotExpectClass() throws Exception { + runTest("compiler/testData/diagnostics/tests/multiplatform/actualTypealiasForNotExpectClass.kt"); + } + @Test @TestMetadata("actualTypealiasToSpecialAnnotation.kt") public void testActualTypealiasToSpecialAnnotation() throws Exception {