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 d6c2f2c8150..26c1e1fb34d 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 @@ -921,6 +921,12 @@ public class DiagnosticCompilerTestFE10TestdataTestGenerated extends AbstractDia runTest("compiler/testData/diagnostics/tests/publishedApi.kt"); } + @Test + @TestMetadata("publishedApiOverride.kt") + public void testPublishedApiOverride() throws Exception { + runTest("compiler/testData/diagnostics/tests/publishedApiOverride.kt"); + } + @Test @TestMetadata("QualifiedExpressions.kt") public void testQualifiedExpressions() 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 4752162bc2e..a9e79821267 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 @@ -921,6 +921,12 @@ public class LLFirPreresolvedReversedDiagnosticCompilerFE10TestDataTestGenerated runTest("compiler/testData/diagnostics/tests/publishedApi.kt"); } + @Test + @TestMetadata("publishedApiOverride.kt") + public void testPublishedApiOverride() throws Exception { + runTest("compiler/testData/diagnostics/tests/publishedApiOverride.kt"); + } + @Test @TestMetadata("QualifiedExpressions.kt") public void testQualifiedExpressions() throws Exception { diff --git a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirLightTreeOldFrontendDiagnosticsTestGenerated.java b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirLightTreeOldFrontendDiagnosticsTestGenerated.java index 822e8351bfe..5c0bfca256f 100644 --- a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirLightTreeOldFrontendDiagnosticsTestGenerated.java +++ b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirLightTreeOldFrontendDiagnosticsTestGenerated.java @@ -921,6 +921,12 @@ public class FirLightTreeOldFrontendDiagnosticsTestGenerated extends AbstractFir runTest("compiler/testData/diagnostics/tests/publishedApi.kt"); } + @Test + @TestMetadata("publishedApiOverride.kt") + public void testPublishedApiOverride() throws Exception { + runTest("compiler/testData/diagnostics/tests/publishedApiOverride.kt"); + } + @Test @TestMetadata("QualifiedExpressions.kt") public void testQualifiedExpressions() throws Exception { diff --git a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirPsiOldFrontendDiagnosticsTestGenerated.java b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirPsiOldFrontendDiagnosticsTestGenerated.java index ca2f0a5b632..6e15a9583f0 100644 --- a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirPsiOldFrontendDiagnosticsTestGenerated.java +++ b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirPsiOldFrontendDiagnosticsTestGenerated.java @@ -921,6 +921,12 @@ public class FirPsiOldFrontendDiagnosticsTestGenerated extends AbstractFirPsiDia runTest("compiler/testData/diagnostics/tests/publishedApi.kt"); } + @Test + @TestMetadata("publishedApiOverride.kt") + public void testPublishedApiOverride() throws Exception { + runTest("compiler/testData/diagnostics/tests/publishedApiOverride.kt"); + } + @Test @TestMetadata("QualifiedExpressions.kt") public void testQualifiedExpressions() throws Exception { diff --git a/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirLightTreeBlackBoxCodegenTestGenerated.java b/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirLightTreeBlackBoxCodegenTestGenerated.java index 2594109982f..ffcfb8a5915 100644 --- a/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirLightTreeBlackBoxCodegenTestGenerated.java +++ b/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirLightTreeBlackBoxCodegenTestGenerated.java @@ -2387,6 +2387,30 @@ public class FirLightTreeBlackBoxCodegenTestGenerated extends AbstractFirLightTr runTest("compiler/testData/codegen/box/bridges/innerClassTypeParameters.kt"); } + @Test + @TestMetadata("internalMethodOverrideInFriendModule.kt") + public void testInternalMethodOverrideInFriendModule() throws Exception { + runTest("compiler/testData/codegen/box/bridges/internalMethodOverrideInFriendModule.kt"); + } + + @Test + @TestMetadata("internalMethodOverrideInOtherModule.kt") + public void testInternalMethodOverrideInOtherModule() throws Exception { + runTest("compiler/testData/codegen/box/bridges/internalMethodOverrideInOtherModule.kt"); + } + + @Test + @TestMetadata("internalMethodOverrideMultipleInheritance.kt") + public void testInternalMethodOverrideMultipleInheritance() throws Exception { + runTest("compiler/testData/codegen/box/bridges/internalMethodOverrideMultipleInheritance.kt"); + } + + @Test + @TestMetadata("internalMethodOverridePublishedApi.kt") + public void testInternalMethodOverridePublishedApi() throws Exception { + runTest("compiler/testData/codegen/box/bridges/internalMethodOverridePublishedApi.kt"); + } + @Test @TestMetadata("kt12416.kt") public void testKt12416() throws Exception { diff --git a/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirPsiBlackBoxCodegenTestGenerated.java b/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirPsiBlackBoxCodegenTestGenerated.java index 7fa50534a71..3a0b215a01d 100644 --- a/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirPsiBlackBoxCodegenTestGenerated.java +++ b/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirPsiBlackBoxCodegenTestGenerated.java @@ -2387,6 +2387,30 @@ public class FirPsiBlackBoxCodegenTestGenerated extends AbstractFirPsiBlackBoxCo runTest("compiler/testData/codegen/box/bridges/innerClassTypeParameters.kt"); } + @Test + @TestMetadata("internalMethodOverrideInFriendModule.kt") + public void testInternalMethodOverrideInFriendModule() throws Exception { + runTest("compiler/testData/codegen/box/bridges/internalMethodOverrideInFriendModule.kt"); + } + + @Test + @TestMetadata("internalMethodOverrideInOtherModule.kt") + public void testInternalMethodOverrideInOtherModule() throws Exception { + runTest("compiler/testData/codegen/box/bridges/internalMethodOverrideInOtherModule.kt"); + } + + @Test + @TestMetadata("internalMethodOverrideMultipleInheritance.kt") + public void testInternalMethodOverrideMultipleInheritance() throws Exception { + runTest("compiler/testData/codegen/box/bridges/internalMethodOverrideMultipleInheritance.kt"); + } + + @Test + @TestMetadata("internalMethodOverridePublishedApi.kt") + public void testInternalMethodOverridePublishedApi() throws Exception { + runTest("compiler/testData/codegen/box/bridges/internalMethodOverridePublishedApi.kt"); + } + @Test @TestMetadata("kt12416.kt") public void testKt12416() throws Exception { diff --git a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/DeclarationOrigins.kt b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/DeclarationOrigins.kt index 1f7d1be3f27..e7204c775a8 100644 --- a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/DeclarationOrigins.kt +++ b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/DeclarationOrigins.kt @@ -5,6 +5,7 @@ package org.jetbrains.kotlin.ir.backend.js +import org.jetbrains.kotlin.ir.declarations.IrDeclarationOrigin import org.jetbrains.kotlin.ir.declarations.IrDeclarationOriginImpl object JsLoweredDeclarationOrigin { @@ -18,4 +19,11 @@ object JsLoweredDeclarationOrigin { object JS_SUPER_CONTEXT_PARAMETER : IrDeclarationOriginImpl("JS_SUPER_CONTEXT_PARAMETER") object JS_SHADOWED_DEFAULT_PARAMETER : IrDeclarationOriginImpl("JS_SHADOWED_DEFAULT_PARAMETER") object ENUM_GET_INSTANCE_FUNCTION : IrDeclarationOriginImpl("ENUM_GET_INSTANCE_FUNCTION") + + fun isBridgeDeclarationOrigin(origin: IrDeclarationOrigin) = when (origin) { + is BRIDGE_WITH_STABLE_NAME -> true + is BRIDGE_WITHOUT_STABLE_NAME -> true + is BRIDGE_PROPERTY_ACCESSOR -> true + else -> false + } } diff --git a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/BridgesConstruction.kt b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/BridgesConstruction.kt index 34087d65412..e4535ccfce7 100644 --- a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/BridgesConstruction.kt +++ b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/BridgesConstruction.kt @@ -23,6 +23,7 @@ import org.jetbrains.kotlin.ir.types.IrType import org.jetbrains.kotlin.ir.types.classifierOrNull import org.jetbrains.kotlin.ir.util.* import org.jetbrains.kotlin.utils.memoryOptimizedPlus +import org.jetbrains.kotlin.utils.toSmartList /** * Constructs bridges for inherited generic functions @@ -148,7 +149,10 @@ abstract class BridgesConstruction(val context: T) : annotations = annotations memoryOptimizedPlus bridge.annotations // the js function signature building process (jsFunctionSignature()) uses dfs throught overriddenSymbols for getting js name, // therefore it is very important to put bridge symbol at the beginning, it allows to get correct js function name - overriddenSymbols = overriddenSymbols memoryOptimizedPlus bridge.symbol memoryOptimizedPlus delegateTo.overriddenSymbols + overriddenSymbols = mutableSetOf(bridge.symbol).also { + it.addAll(overriddenSymbols) + it.addAll(delegateTo.overriddenSymbols) + }.toSmartList() } irFunction.body = context.irFactory.createBlockBody(UNDEFINED_OFFSET, UNDEFINED_OFFSET) { diff --git a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/utils/NameTables.kt b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/utils/NameTables.kt index f0199346ddf..fe6f59293cc 100644 --- a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/utils/NameTables.kt +++ b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/utils/NameTables.kt @@ -5,6 +5,7 @@ package org.jetbrains.kotlin.ir.backend.js.utils +import org.jetbrains.kotlin.descriptors.DescriptorVisibilities.INTERNAL import org.jetbrains.kotlin.ir.IrElement import org.jetbrains.kotlin.ir.backend.js.JsIrBackendContext import org.jetbrains.kotlin.ir.backend.js.JsLoweredDeclarationOrigin @@ -123,12 +124,28 @@ private fun List.joinTypes(context: JsIrBackendContext): String { return joinToString("$", "$") { superType -> superType.asString(context) } } +private fun IrFunction.findOriginallyContainingModule(): IrModuleFragment? { + if (JsLoweredDeclarationOrigin.isBridgeDeclarationOrigin(origin)) { + val thisSimpleFunction = this as? IrSimpleFunction ?: error("Bridge must be IrSimpleFunction") + val bridgeFrom = thisSimpleFunction.overriddenSymbols.firstOrNull() ?: error("Couldn't find the overridden function for the bridge") + return bridgeFrom.owner.findOriginallyContainingModule() + } + return (getPackageFragment() as? IrFile)?.module +} + fun calculateJsFunctionSignature(declaration: IrFunction, context: JsIrBackendContext): String { val declarationName = declaration.nameIfPropertyAccessor() ?: declaration.getJsNameOrKotlinName().asString() val nameBuilder = StringBuilder() nameBuilder.append(declarationName) + if (declaration.visibility === INTERNAL && declaration.parentClassOrNull != null) { + val containingModule = declaration.findOriginallyContainingModule() + if (containingModule != null) { + nameBuilder.append("_\$m_").append(containingModule.name.toString()) + } + } + // TODO should we skip type parameters and use upper bound of type parameter when print type of value parameters? declaration.typeParameters.ifNotEmpty { nameBuilder.append("_\$t") diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/overrides/IrOverridingUtil.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/overrides/IrOverridingUtil.kt index 1f74e400f00..089584fabb3 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/overrides/IrOverridingUtil.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/overrides/IrOverridingUtil.kt @@ -5,6 +5,7 @@ package org.jetbrains.kotlin.ir.overrides +import org.jetbrains.kotlin.builtins.StandardNames import org.jetbrains.kotlin.descriptors.* import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI import org.jetbrains.kotlin.ir.declarations.* @@ -101,7 +102,8 @@ fun buildFakeOverrideMember( return CopyIrTreeWithSymbolsForFakeOverrides(member, substitutionMap, clazz, unimplementedOverridesStrategy) .copy() .apply { - if (isPrivateToThisModule(clazz, classifier.owner, friendModules)) + val isInvisible = isPrivateToThisModule(clazz, classifier.owner, friendModules) + if (isInvisible && !member.annotations.hasAnnotation(StandardNames.FqNames.publishedApi)) visibility = DescriptorVisibilities.INVISIBLE_FAKE } } @@ -249,7 +251,8 @@ class IrOverridingUtil( // Note: We do allow overriding multiple FOs at once one of which is `isInline=true`. when (isOverridableBy(fromSupertype, fromCurrent, checkIsInlineFlag = true, checkReturnType = false).result) { OverrideCompatibilityInfo.Result.OVERRIDABLE -> { - if (isVisibleForOverride(fromCurrent, fromSupertype.original)) + val isVisibleFake = fromSupertype.visibility != DescriptorVisibilities.INVISIBLE_FAKE + if (isVisibleFake && isVisibleForOverride(fromCurrent, fromSupertype.original)) overridden += fromSupertype bound += fromSupertype } diff --git a/compiler/testData/codegen/box/bridges/internalMethodOverrideInFriendModule.kt b/compiler/testData/codegen/box/bridges/internalMethodOverrideInFriendModule.kt new file mode 100644 index 00000000000..c3c3bb18280 --- /dev/null +++ b/compiler/testData/codegen/box/bridges/internalMethodOverrideInFriendModule.kt @@ -0,0 +1,75 @@ +// IGNORE_BACKEND: WASM +// WITH_STDLIB + +// MODULE: lib1 + +// FILE: Demo.kt +var DemoOpenSetterCalls = 0 +var DemoOpenGetterCalls = 0 + +abstract class Demo { + internal open fun demoOpenFun(): Int = 5 + internal open val demoOpenVal: Int = 6 + internal open val demoOpenValGet: Int + get() = 7 + internal open var demoOpenVarSetGet: Int = 8 + set(value) { ++DemoOpenSetterCalls; field = value } + get() { ++DemoOpenGetterCalls; return field } +} + +// FILE: TestDemo.kt +fun testOpenFun(d: Demo): Int = d.demoOpenFun() +fun testOpenVal(d: Demo): Int = d.demoOpenVal +fun testOpenValGet(d: Demo): Int = d.demoOpenValGet +fun testOpenVarGet(d: Demo): Int = d.demoOpenVarSetGet +fun testOpenVarSet(d: Demo, v: Int) { d.demoOpenVarSetGet = v } + +// MODULE: main()(lib1) + +// FILE: MyDemo.kt +var MyDemoOpenSetterCalls = 0 +var MyDemoOpenGetterCalls = 0 + +class MyDemo : Demo() { + override fun demoOpenFun(): Int = 100 * super.demoOpenFun() + override val demoOpenVal: Int = 600 + override val demoOpenValGet: Int + get() = 110 * super.demoOpenValGet + override var demoOpenVarSetGet: Int + set(value) { ++MyDemoOpenSetterCalls; super.demoOpenVarSetGet = value } + get() { ++MyDemoOpenGetterCalls; return 111 * super.demoOpenVarSetGet } +} + +// FILE: Box.kt +import kotlin.test.assertEquals + +fun testMyDemo() { + val myDemo = MyDemo() + + assertEquals(testOpenFun(myDemo), 500) + assertEquals(testOpenVal(myDemo), 600) + assertEquals(testOpenValGet(myDemo), 770) + assertEquals(testOpenVarGet(myDemo), 888) + testOpenVarSet(myDemo, -8) + assertEquals(testOpenVarGet(myDemo), -888) + assertEquals(DemoOpenSetterCalls, 1) + assertEquals(DemoOpenGetterCalls, 2) + assertEquals(MyDemoOpenSetterCalls, 1) + assertEquals(MyDemoOpenGetterCalls, 2) + + assertEquals(myDemo.demoOpenFun(), 500) + assertEquals(myDemo.demoOpenVal, 600) + assertEquals(myDemo.demoOpenValGet, 770) + assertEquals(myDemo.demoOpenVarSetGet, -888) + myDemo.demoOpenVarSetGet = -9 + assertEquals(myDemo.demoOpenVarSetGet, -999) + assertEquals(DemoOpenSetterCalls, 2) + assertEquals(DemoOpenGetterCalls, 4) + assertEquals(MyDemoOpenSetterCalls, 2) + assertEquals(MyDemoOpenGetterCalls, 4) +} + +fun box(): String { + testMyDemo() + return "OK" +} diff --git a/compiler/testData/codegen/box/bridges/internalMethodOverrideInOtherModule.kt b/compiler/testData/codegen/box/bridges/internalMethodOverrideInOtherModule.kt new file mode 100644 index 00000000000..cc0f3c4adef --- /dev/null +++ b/compiler/testData/codegen/box/bridges/internalMethodOverrideInOtherModule.kt @@ -0,0 +1,272 @@ +// WITH_STDLIB + +// MODULE: lib1 + +// FILE: Demo.kt +var DemoSetterCalls = 0 +var DemoGetterCalls = 0 +var DemoOpenSetterCalls = 0 +var DemoOpenGetterCalls = 0 + +abstract class Demo { + internal fun demoFun(): Int = 1 + internal val demoVal: Int = 2 + internal val demoValGet: Int + get() = 3 + internal var demoVarSetGet: Int = 4 + set(value) { ++DemoSetterCalls; field = value } + get() { ++DemoGetterCalls; return field } + + internal open fun demoOpenFun(): Int = 5 + internal open val demoOpenVal: Int = 6 + internal open val demoOpenValGet: Int + get() = 7 + internal open var demoOpenVarSetGet: Int = 8 + set(value) { ++DemoOpenSetterCalls; field = value } + get() { ++DemoOpenGetterCalls; return field } +} + +// FILE: LibDemo.kt +var LibDemoOpenSetterCalls = 0 +var LibDemoOpenGetterCalls = 0 + +open class LibDemo : Demo() { + override public fun demoOpenFun(): Int = 50 + override public val demoOpenVal: Int = 60 + override public val demoOpenValGet: Int + get() = 70 + override public var demoOpenVarSetGet: Int = 80 + set(value) { ++LibDemoOpenSetterCalls; field = value } + get() { ++LibDemoOpenGetterCalls; return field } +} + +// FILE: TestDemo.kt +fun testFun(d: Demo): Int = d.demoFun() +fun testVal(d: Demo): Int = d.demoVal +fun testValGet(d: Demo): Int = d.demoValGet +fun testVarGet(d: Demo): Int = d.demoVarSetGet +fun testVarSet(d: Demo, v: Int) { d.demoVarSetGet = v } + +fun testOpenFun(d: Demo): Int = d.demoOpenFun() +fun testOpenVal(d: Demo): Int = d.demoOpenVal +fun testOpenValGet(d: Demo): Int = d.demoOpenValGet +fun testOpenVarGet(d: Demo): Int = d.demoOpenVarSetGet +fun testOpenVarSet(d: Demo, v: Int) { d.demoOpenVarSetGet = v } + +// MODULE: main(lib1) + +// FILE: MyDemo.kt +var MyDemoSetterCalls = 0 +var MyDemoGetterCalls = 0 +var MyDemoOpenSetterCalls = 0 +var MyDemoOpenGetterCalls = 0 + +class MyDemo : Demo() { + fun demoFun(): Int = 100 + val demoVal: Int = 200 + val demoValGet: Int + get() = 300 + var demoVarSetGet: Int = 400 + set(value) { ++MyDemoSetterCalls; field = value } + get() { ++MyDemoGetterCalls; return field } + + fun demoOpenFun(): Int = 500 + val demoOpenVal: Int = 600 + val demoOpenValGet: Int + get() = 700 + var demoOpenVarSetGet: Int = 800 + set(value) { ++MyDemoOpenSetterCalls; field = value } + get() { ++MyDemoOpenGetterCalls; return field } +} + +// FILE: MyDemo2.kt +var MyDemo2SetterCalls = 0 +var MyDemo2GetterCalls = 0 +var MyDemo2OpenSetterCalls = 0 +var MyDemo2OpenGetterCalls = 0 + +class MyDemo2 : LibDemo() { + fun demoFun(): Int = 1000 + val demoVal: Int = 2000 + val demoValGet: Int + get() = 3000 + var demoVarSetGet: Int = 4000 + set(value) { ++MyDemo2SetterCalls; field = value } + get() { ++MyDemo2GetterCalls; return field } + + override fun demoOpenFun(): Int = 5000 + override val demoOpenVal: Int = 6000 + override val demoOpenValGet: Int + get() = 7000 + override var demoOpenVarSetGet: Int = 8000 + set(value) { ++MyDemo2OpenSetterCalls; field = value } + get() { ++MyDemo2OpenGetterCalls; return field } +} + +// FILE: Box.kt +import kotlin.test.assertEquals + +fun resetCounters() { + DemoSetterCalls = 0 + DemoGetterCalls = 0 + DemoOpenSetterCalls = 0 + DemoOpenGetterCalls = 0 + + LibDemoOpenSetterCalls = 0 + LibDemoOpenGetterCalls = 0 + + MyDemoSetterCalls = 0 + MyDemoGetterCalls = 0 + MyDemoOpenSetterCalls = 0 + MyDemoOpenGetterCalls = 0 + + MyDemo2SetterCalls = 0 + MyDemo2GetterCalls = 0 + MyDemo2OpenSetterCalls = 0 + MyDemo2OpenGetterCalls = 0 +} + +fun testMyDemo() { + resetCounters() + val myDemo = MyDemo() + + assertEquals(testFun(myDemo), 1) + assertEquals(testVal(myDemo), 2) + assertEquals(testValGet(myDemo), 3) + assertEquals(testVarGet(myDemo), 4) + testVarSet(myDemo, -4) + assertEquals(testVarGet(myDemo), -4) + assertEquals(DemoSetterCalls, 1) + assertEquals(DemoGetterCalls, 2) + assertEquals(MyDemoSetterCalls, 0) + assertEquals(MyDemoGetterCalls, 0) + + assertEquals(testOpenFun(myDemo), 5) + assertEquals(testOpenVal(myDemo), 6) + assertEquals(testOpenValGet(myDemo), 7) + assertEquals(testOpenVarGet(myDemo), 8) + testOpenVarSet(myDemo, -8) + assertEquals(testOpenVarGet(myDemo), -8) + assertEquals(DemoOpenSetterCalls, 1) + assertEquals(DemoOpenGetterCalls, 2) + assertEquals(MyDemoOpenSetterCalls, 0) + assertEquals(MyDemoOpenGetterCalls, 0) + + assertEquals(myDemo.demoFun(), 100) + assertEquals(myDemo.demoVal, 200) + assertEquals(myDemo.demoValGet, 300) + assertEquals(myDemo.demoVarSetGet, 400) + myDemo.demoVarSetGet = -400 + assertEquals(myDemo.demoVarSetGet, -400) + assertEquals(DemoSetterCalls, 1) + assertEquals(DemoGetterCalls, 2) + assertEquals(MyDemoSetterCalls, 1) + assertEquals(MyDemoGetterCalls, 2) + + assertEquals(myDemo.demoOpenFun(), 500) + assertEquals(myDemo.demoOpenVal, 600) + assertEquals(myDemo.demoOpenValGet, 700) + assertEquals(myDemo.demoOpenVarSetGet, 800) + myDemo.demoOpenVarSetGet = -800 + assertEquals(myDemo.demoOpenVarSetGet, -800) + assertEquals(DemoOpenSetterCalls, 1) + assertEquals(DemoOpenGetterCalls, 2) + assertEquals(MyDemoOpenSetterCalls, 1) + assertEquals(MyDemoOpenGetterCalls, 2) +} + +fun testLibDemo() { + resetCounters() + val libDemo = LibDemo() + + assertEquals(testFun(libDemo), 1) + assertEquals(testVal(libDemo), 2) + assertEquals(testValGet(libDemo), 3) + assertEquals(testVarGet(libDemo), 4) + testVarSet(libDemo, -4) + assertEquals(testVarGet(libDemo), -4) + assertEquals(DemoSetterCalls, 1) + assertEquals(DemoGetterCalls, 2) + + assertEquals(testOpenFun(libDemo), 50) + assertEquals(testOpenVal(libDemo), 60) + assertEquals(testOpenValGet(libDemo), 70) + assertEquals(testOpenVarGet(libDemo), 80) + testOpenVarSet(libDemo, -80) + assertEquals(testOpenVarGet(libDemo), -80) + assertEquals(LibDemoOpenSetterCalls, 1) + assertEquals(LibDemoOpenGetterCalls, 2) + assertEquals(DemoOpenSetterCalls, 0) + assertEquals(DemoOpenGetterCalls, 0) + + assertEquals(libDemo.demoOpenFun(), 50) + assertEquals(libDemo.demoOpenVal, 60) + assertEquals(libDemo.demoOpenValGet, 70) + assertEquals(libDemo.demoOpenVarSetGet, -80) + libDemo.demoOpenVarSetGet = 88 + assertEquals(libDemo.demoOpenVarSetGet, 88) + assertEquals(LibDemoOpenSetterCalls, 2) + assertEquals(LibDemoOpenGetterCalls, 4) + assertEquals(DemoOpenSetterCalls, 0) + assertEquals(DemoOpenGetterCalls, 0) +} + +fun testMyDemo2() { + resetCounters() + val myDemo2 = MyDemo2() + + assertEquals(testFun(myDemo2), 1) + assertEquals(testVal(myDemo2), 2) + assertEquals(testValGet(myDemo2), 3) + assertEquals(testVarGet(myDemo2), 4) + testVarSet(myDemo2, -4) + assertEquals(testVarGet(myDemo2), -4) + assertEquals(DemoSetterCalls, 1) + assertEquals(DemoGetterCalls, 2) + assertEquals(MyDemo2SetterCalls, 0) + assertEquals(MyDemo2GetterCalls, 0) + + assertEquals(testOpenFun(myDemo2), 5000) + assertEquals(testOpenVal(myDemo2), 6000) + assertEquals(testOpenValGet(myDemo2), 7000) + assertEquals(testOpenVarGet(myDemo2), 8000) + testOpenVarSet(myDemo2, -8000) + assertEquals(testOpenVarGet(myDemo2), -8000) + assertEquals(MyDemo2OpenSetterCalls, 1) + assertEquals(MyDemo2OpenGetterCalls, 2) + assertEquals(LibDemoOpenSetterCalls, 0) + assertEquals(LibDemoOpenGetterCalls, 0) + assertEquals(DemoOpenSetterCalls, 0) + assertEquals(DemoOpenGetterCalls, 0) + + assertEquals(myDemo2.demoFun(), 1000) + assertEquals(myDemo2.demoVal, 2000) + assertEquals(myDemo2.demoValGet, 3000) + assertEquals(myDemo2.demoVarSetGet, 4000) + myDemo2.demoVarSetGet = -4000 + assertEquals(myDemo2.demoVarSetGet, -4000) + assertEquals(DemoSetterCalls, 1) + assertEquals(DemoGetterCalls, 2) + assertEquals(MyDemo2SetterCalls, 1) + assertEquals(MyDemo2GetterCalls, 2) + + assertEquals(myDemo2.demoOpenFun(), 5000) + assertEquals(myDemo2.demoOpenVal, 6000) + assertEquals(myDemo2.demoOpenValGet, 7000) + assertEquals(myDemo2.demoOpenVarSetGet, -8000) + myDemo2.demoOpenVarSetGet = 8888 + assertEquals(myDemo2.demoOpenVarSetGet, 8888) + assertEquals(MyDemo2OpenSetterCalls, 2) + assertEquals(MyDemo2OpenGetterCalls, 4) + assertEquals(LibDemoOpenSetterCalls, 0) + assertEquals(LibDemoOpenGetterCalls, 0) + assertEquals(DemoOpenSetterCalls, 0) + assertEquals(DemoOpenGetterCalls, 0) +} + +fun box(): String { + testMyDemo() + testLibDemo() + testMyDemo2() + return "OK" +} diff --git a/compiler/testData/codegen/box/bridges/internalMethodOverrideMultipleInheritance.kt b/compiler/testData/codegen/box/bridges/internalMethodOverrideMultipleInheritance.kt new file mode 100644 index 00000000000..d80e9805f55 --- /dev/null +++ b/compiler/testData/codegen/box/bridges/internalMethodOverrideMultipleInheritance.kt @@ -0,0 +1,70 @@ +// IGNORE_BACKEND: WASM +// WITH_STDLIB + +// MODULE: lib1 + +// FILE: DemoClassInternal1.kt +abstract class DemoClassInternal1 { + internal open fun demo(): Int = 1 +} + +interface DemoInterface1 { + fun demo(): Int = 2 +} + +// FILE: TestDemo1.kt +fun testDemoClassInternal1(d: DemoClassInternal1): Int = d.demo() +fun testDemoInterface1(d: DemoInterface1): Int = d.demo() + +// MODULE: lib2 + +// FILE: DemoClassInternal2.kt +abstract class DemoClassInternal2 { + internal open fun demo(): Int = 3 +} + +interface DemoInterface2 { + fun demo(): Int = 4 +} + +// FILE: TestDemo.kt +fun testDemoClassInternal2(d: DemoClassInternal2): Int = d.demo() +fun testDemoInterface2(d: DemoInterface2): Int = d.demo() + +// MODULE: main(lib1)(lib2) + +// FILE: MyDemo.kt +class MyDemo1 : DemoClassInternal1(), DemoInterface1, DemoInterface2 { + override fun demo(): Int = 10 * super.demo() + super.demo() +} + +class MyDemo2 : DemoClassInternal2(), DemoInterface1, DemoInterface2 { + override fun demo(): Int = 100 * super.demo() + 10 * super.demo() + super.demo() +} + +// FILE: Box.kt +import kotlin.test.assertEquals + +fun testMyDemo1() { + val myDemo = MyDemo1() + + assertEquals(testDemoClassInternal1(myDemo), 1) + assertEquals(testDemoInterface1(myDemo), 24) + assertEquals(testDemoInterface2(myDemo), 24) + assertEquals(myDemo.demo(), 24) +} + +fun testMyDemo2() { + val myDemo = MyDemo2() + + assertEquals(testDemoClassInternal2(myDemo), 324) + assertEquals(testDemoInterface1(myDemo), 324) + assertEquals(testDemoInterface2(myDemo), 324) + assertEquals(myDemo.demo(), 324) +} + +fun box(): String { + testMyDemo1() + testMyDemo2() + return "OK" +} diff --git a/compiler/testData/codegen/box/bridges/internalMethodOverridePublishedApi.kt b/compiler/testData/codegen/box/bridges/internalMethodOverridePublishedApi.kt new file mode 100644 index 00000000000..96f913a2cd6 --- /dev/null +++ b/compiler/testData/codegen/box/bridges/internalMethodOverridePublishedApi.kt @@ -0,0 +1,106 @@ +// WITH_STDLIB + +// MODULE: lib1 + +// FILE: DemoClassInternal1.kt +abstract class DemoClassInternal { + @PublishedApi + internal open fun demo(): Int = 1 +} + +// FILE: TestDemo1.kt +inline fun testDemoInline(d: DemoClassInternal): Int = d.demo() +fun testDemo(d: DemoClassInternal): Int = d.demo() + +// MODULE: main(lib1) + +// FILE: MyDemo.kt +open class MyDemo1 : DemoClassInternal() + +class MyDemo2 : DemoClassInternal() { + fun demo(): Int = 2 +} + +open class MyDemo3 : DemoClassInternal() { + open fun demo(): Int = 3 +} + +class MyDemo4: MyDemo1() + +class MyDemo5: MyDemo1() { + fun demo(): Int = 5 +} + +class MyDemo6: MyDemo3() + +class MyDemo7: MyDemo3() { + override fun demo(): Int = 7 +} + +// FILE: Box.kt +import kotlin.test.assertEquals + +fun testMyDemo1() { + val myDemo = MyDemo1() + + assertEquals(testDemoInline(myDemo), 1) + assertEquals(testDemo(myDemo), 1) +} + +fun testMyDemo2() { + val myDemo = MyDemo2() + + assertEquals(testDemoInline(myDemo), 2) + assertEquals(testDemo(myDemo), 2) + assertEquals(myDemo.demo(), 2) +} + +fun testMyDemo3() { + val myDemo = MyDemo3() + + assertEquals(testDemoInline(myDemo), 3) + assertEquals(testDemo(myDemo), 3) + assertEquals(myDemo.demo(), 3) +} + +fun testMyDemo4() { + val myDemo = MyDemo4() + + assertEquals(testDemoInline(myDemo), 1) + assertEquals(testDemo(myDemo), 1) +} + +fun testMyDemo5() { + val myDemo = MyDemo5() + + assertEquals(testDemoInline(myDemo), 5) + assertEquals(testDemo(myDemo), 5) + assertEquals(myDemo.demo(), 5) +} + +fun testMyDemo6() { + val myDemo = MyDemo6() + + assertEquals(testDemoInline(myDemo), 3) + assertEquals(testDemo(myDemo), 3) + assertEquals(myDemo.demo(), 3) +} + +fun testMyDemo7() { + val myDemo = MyDemo7() + + assertEquals(testDemoInline(myDemo), 7) + assertEquals(testDemo(myDemo), 7) + assertEquals(myDemo.demo(), 7) +} + +fun box(): String { + testMyDemo1() + testMyDemo2() + testMyDemo3() + testMyDemo4() + testMyDemo5() + testMyDemo6() + testMyDemo7() + return "OK" +} diff --git a/compiler/testData/diagnostics/tests/publishedApiOverride.fir.kt b/compiler/testData/diagnostics/tests/publishedApiOverride.fir.kt new file mode 100644 index 00000000000..32de52a9a38 --- /dev/null +++ b/compiler/testData/diagnostics/tests/publishedApiOverride.fir.kt @@ -0,0 +1,30 @@ +// MODULE: lib1 + +// FILE: DemoClassInternal1.kt +abstract class DemoClassInternal { + @PublishedApi + internal open fun demo(): Int = 1 +} + +// MODULE: main(lib1) + +// FILE: MyDemo.kt +open class MyDemo1 : DemoClassInternal() + +class MyDemo2 : MyDemo1() + +class MyDemo3 : DemoClassInternal() { + override fun demo(): Int = 2 +} + +class MyDemo4 : DemoClassInternal() { + fun demo(): Int { + return super.demo() + } +} + +// FILE: Test.kt +fun test() { + MyDemo1().demo() + MyDemo2().demo() +} diff --git a/compiler/testData/diagnostics/tests/publishedApiOverride.kt b/compiler/testData/diagnostics/tests/publishedApiOverride.kt new file mode 100644 index 00000000000..9ef72f9df67 --- /dev/null +++ b/compiler/testData/diagnostics/tests/publishedApiOverride.kt @@ -0,0 +1,30 @@ +// MODULE: lib1 + +// FILE: DemoClassInternal1.kt +abstract class DemoClassInternal { + @PublishedApi + internal open fun demo(): Int = 1 +} + +// MODULE: main(lib1) + +// FILE: MyDemo.kt +open class MyDemo1 : DemoClassInternal() + +class MyDemo2 : MyDemo1() + +class MyDemo3 : DemoClassInternal() { + override fun demo(): Int = 2 +} + +class MyDemo4 : DemoClassInternal() { + fun demo(): Int { + return super.demo() + } +} + +// FILE: Test.kt +fun test() { + MyDemo1().demo() + MyDemo2().demo() +} diff --git a/compiler/testData/klibABI/changeFunctionVisibility/main/m.kt b/compiler/testData/klibABI/changeFunctionVisibility/main/m.kt index b129ce1b969..20a74ab0ee6 100644 --- a/compiler/testData/klibABI/changeFunctionVisibility/main/m.kt +++ b/compiler/testData/klibABI/changeFunctionVisibility/main/m.kt @@ -14,17 +14,17 @@ fun box() = abiTest { success("Container.publicToInternalFunction.v2") { c.publicToInternalFunction() } // Signature remains the same. unlinkedSymbol("/ContainerImpl.publicToInternalFunction") { ci.publicToInternalFunction() } // FOs are not generated for internal members from other module. success("Container.publicToInternalPAFunction.v2") { c.publicToInternalPAFunction() } // Signature remains the same. - unlinkedSymbol("/ContainerImpl.publicToInternalPAFunction") { ci.publicToInternalPAFunction() } // FOs are not generated for internal members from other module. + success("Container.publicToInternalPAFunction.v2") { ci.publicToInternalPAFunction() } // Signature remains the same. inaccessible("publicToPrivateFunction") { c.publicToPrivateFunction() } // Inaccessible from other module though signature remains the same. unlinkedSymbol("/ContainerImpl.publicToPrivateFunction") { ci.publicToPrivateFunction() } // FOs are not generated for private members. success("Container.publicToProtectedFunction.v2") { ci.publicToProtectedFunctionAccess() } // Signature remains the same. unlinkedSymbol("/ContainerImpl.publicToInternalFunction") { ci.publicToInternalFunctionAccess() } // FOs are not generated for internal members from other module. - unlinkedSymbol("/ContainerImpl.publicToInternalPAFunction") { ci.publicToInternalPAFunctionAccess() } // FOs are not generated for internal members from other module. + success("Container.publicToInternalPAFunction.v2") { ci.publicToInternalPAFunctionAccess() } // Signature remains the same. unlinkedSymbol("/ContainerImpl.publicToPrivateFunction") { ci.publicToPrivateFunctionAccess() } // FOs are not generated for private members. success("Container.protectedToPublicFunction.v2") { ci.protectedToPublicFunctionAccess() } // Signature remains the same. unlinkedSymbol("/ContainerImpl.protectedToInternalFunction") { ci.protectedToInternalFunctionAccess() } // FOs are not generated for internal members from other module. - unlinkedSymbol("/ContainerImpl.protectedToInternalPAFunction") { ci.protectedToInternalPAFunctionAccess() } // FOs are not generated for internal members from other module. + success("Container.protectedToInternalPAFunction.v2") { ci.protectedToInternalPAFunctionAccess() } // Signature remains the same. unlinkedSymbol("/ContainerImpl.protectedToPrivateFunction") { ci.protectedToPrivateFunctionAccess() } // FOs are not generated for private members. success("ContainerImpl.publicToProtectedOverriddenFunction") { ci.publicToProtectedOverriddenFunction() } diff --git a/compiler/testData/klibABI/changePropertyVisibility/main/m.kt b/compiler/testData/klibABI/changePropertyVisibility/main/m.kt index ee1b89f3e41..4643e0afdd8 100644 --- a/compiler/testData/klibABI/changePropertyVisibility/main/m.kt +++ b/compiler/testData/klibABI/changePropertyVisibility/main/m.kt @@ -21,9 +21,9 @@ fun box() = abiTest { success("Container.publicToInternalProperty2.v2") { c.publicToInternalProperty2 } // Signature remains the same. unlinkedSymbol("/ContainerImpl.publicToInternalProperty2.") { ci.publicToInternalProperty2 } // FOs are not generated for internal members from other module. success("Container.publicToInternalPAProperty1.v2") { c.publicToInternalPAProperty1 } // Signature remains the same. - unlinkedSymbol("/ContainerImpl.publicToInternalPAProperty1.") { ci.publicToInternalPAProperty1 } // FOs are not generated for internal members from other module. + success("Container.publicToInternalPAProperty1.v2") { ci.publicToInternalPAProperty1 } // Signature remains the same. success("Container.publicToInternalPAProperty2.v2") { c.publicToInternalPAProperty2 } // Signature remains the same. - unlinkedSymbol("/ContainerImpl.publicToInternalPAProperty2.") { ci.publicToInternalPAProperty2 } // FOs are not generated for internal members from other module. + success("Container.publicToInternalPAProperty2.v2") { ci.publicToInternalPAProperty2 } // Signature remains the same. inaccessible("publicToPrivateProperty1.") { c.publicToPrivateProperty1 } // Inaccessible from other module though signature remains the same. unlinkedSymbol("/ContainerImpl.publicToPrivateProperty1.") { ci.publicToPrivateProperty1 } // FOs are not generated for private members. inaccessible("publicToPrivateProperty2.") { c.publicToPrivateProperty2 } // Inaccessible from other module though signature remains the same. @@ -33,16 +33,16 @@ fun box() = abiTest { success("Container.publicToProtectedProperty2.v2") { ci.publicToProtectedProperty2Access() } // Signature remains the same. unlinkedSymbol("/ContainerImpl.publicToInternalProperty1.") { ci.publicToInternalProperty1Access() } // FOs are not generated for internal members from other module. unlinkedSymbol("/ContainerImpl.publicToInternalProperty2.") { ci.publicToInternalProperty2Access() } // FOs are not generated for internal members from other module. - unlinkedSymbol("/ContainerImpl.publicToInternalPAProperty1.") { ci.publicToInternalPAProperty1Access() } // FOs are not generated for internal members from other module. - unlinkedSymbol("/ContainerImpl.publicToInternalPAProperty2.") { ci.publicToInternalPAProperty2Access() } // FOs are not generated for internal members from other module. + success("Container.publicToInternalPAProperty1.v2") { ci.publicToInternalPAProperty1Access() } // Signature remains the same. + success("Container.publicToInternalPAProperty2.v2") { ci.publicToInternalPAProperty2Access() } // Signature remains the same. unlinkedSymbol("/ContainerImpl.publicToPrivateProperty1.") { ci.publicToPrivateProperty1Access() } // FOs are not generated for private members. unlinkedSymbol("/ContainerImpl.publicToPrivateProperty2.") { ci.publicToPrivateProperty2Access() } // FOs are not generated for private members. success("Container.protectedToPublicProperty1.v2") { ci.protectedToPublicProperty1Access() } // Signature remains the same. success("Container.protectedToPublicProperty2.v2") { ci.protectedToPublicProperty2Access() } // Signature remains the same. unlinkedSymbol("/ContainerImpl.protectedToInternalProperty1.") { ci.protectedToInternalProperty1Access() } // FOs are not generated for internal members from other module. unlinkedSymbol("/ContainerImpl.protectedToInternalProperty2.") { ci.protectedToInternalProperty2Access() } // FOs are not generated for internal members from other module. - unlinkedSymbol("/ContainerImpl.protectedToInternalPAProperty1.") { ci.protectedToInternalPAProperty1Access() } // FOs are not generated for internal members from other module. - unlinkedSymbol("/ContainerImpl.protectedToInternalPAProperty2.") { ci.protectedToInternalPAProperty2Access() } // FOs are not generated for internal members from other module. + success("Container.protectedToInternalPAProperty1.v2") { ci.protectedToInternalPAProperty1Access() } // Signature remains the same. + success("Container.protectedToInternalPAProperty2.v2") { ci.protectedToInternalPAProperty2Access() } // Signature remains the same. unlinkedSymbol("/ContainerImpl.protectedToPrivateProperty1.") { ci.protectedToPrivateProperty1Access() } // FOs are not generated for private members. unlinkedSymbol("/ContainerImpl.protectedToPrivateProperty2.") { ci.protectedToPrivateProperty2Access() } // FOs are not generated for private members. 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 5c9a384e120..e1a0c3694d1 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 @@ -921,6 +921,12 @@ public class DiagnosticTestGenerated extends AbstractDiagnosticTest { runTest("compiler/testData/diagnostics/tests/publishedApi.kt"); } + @Test + @TestMetadata("publishedApiOverride.kt") + public void testPublishedApiOverride() throws Exception { + runTest("compiler/testData/diagnostics/tests/publishedApiOverride.kt"); + } + @Test @TestMetadata("QualifiedExpressions.kt") public void testQualifiedExpressions() throws Exception { diff --git a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/BlackBoxCodegenTestGenerated.java b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/BlackBoxCodegenTestGenerated.java index 4061af3a57c..67bf801b736 100644 --- a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/BlackBoxCodegenTestGenerated.java +++ b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/BlackBoxCodegenTestGenerated.java @@ -2213,6 +2213,30 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest { runTest("compiler/testData/codegen/box/bridges/innerClassTypeParameters.kt"); } + @Test + @TestMetadata("internalMethodOverrideInFriendModule.kt") + public void testInternalMethodOverrideInFriendModule() throws Exception { + runTest("compiler/testData/codegen/box/bridges/internalMethodOverrideInFriendModule.kt"); + } + + @Test + @TestMetadata("internalMethodOverrideInOtherModule.kt") + public void testInternalMethodOverrideInOtherModule() throws Exception { + runTest("compiler/testData/codegen/box/bridges/internalMethodOverrideInOtherModule.kt"); + } + + @Test + @TestMetadata("internalMethodOverrideMultipleInheritance.kt") + public void testInternalMethodOverrideMultipleInheritance() throws Exception { + runTest("compiler/testData/codegen/box/bridges/internalMethodOverrideMultipleInheritance.kt"); + } + + @Test + @TestMetadata("internalMethodOverridePublishedApi.kt") + public void testInternalMethodOverridePublishedApi() throws Exception { + runTest("compiler/testData/codegen/box/bridges/internalMethodOverridePublishedApi.kt"); + } + @Test @TestMetadata("kt12416.kt") public void testKt12416() throws Exception { diff --git a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/IrBlackBoxCodegenTestGenerated.java b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/IrBlackBoxCodegenTestGenerated.java index 90b412f8fd5..fe73fcffdb5 100644 --- a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/IrBlackBoxCodegenTestGenerated.java +++ b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/IrBlackBoxCodegenTestGenerated.java @@ -2387,6 +2387,30 @@ public class IrBlackBoxCodegenTestGenerated extends AbstractIrBlackBoxCodegenTes runTest("compiler/testData/codegen/box/bridges/innerClassTypeParameters.kt"); } + @Test + @TestMetadata("internalMethodOverrideInFriendModule.kt") + public void testInternalMethodOverrideInFriendModule() throws Exception { + runTest("compiler/testData/codegen/box/bridges/internalMethodOverrideInFriendModule.kt"); + } + + @Test + @TestMetadata("internalMethodOverrideInOtherModule.kt") + public void testInternalMethodOverrideInOtherModule() throws Exception { + runTest("compiler/testData/codegen/box/bridges/internalMethodOverrideInOtherModule.kt"); + } + + @Test + @TestMetadata("internalMethodOverrideMultipleInheritance.kt") + public void testInternalMethodOverrideMultipleInheritance() throws Exception { + runTest("compiler/testData/codegen/box/bridges/internalMethodOverrideMultipleInheritance.kt"); + } + + @Test + @TestMetadata("internalMethodOverridePublishedApi.kt") + public void testInternalMethodOverridePublishedApi() throws Exception { + runTest("compiler/testData/codegen/box/bridges/internalMethodOverridePublishedApi.kt"); + } + @Test @TestMetadata("kt12416.kt") public void testKt12416() throws Exception { diff --git a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/IrBlackBoxCodegenWithIrInlinerTestGenerated.java b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/IrBlackBoxCodegenWithIrInlinerTestGenerated.java index a061f8e0d34..64062741941 100644 --- a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/IrBlackBoxCodegenWithIrInlinerTestGenerated.java +++ b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/IrBlackBoxCodegenWithIrInlinerTestGenerated.java @@ -2387,6 +2387,30 @@ public class IrBlackBoxCodegenWithIrInlinerTestGenerated extends AbstractIrBlack runTest("compiler/testData/codegen/box/bridges/innerClassTypeParameters.kt"); } + @Test + @TestMetadata("internalMethodOverrideInFriendModule.kt") + public void testInternalMethodOverrideInFriendModule() throws Exception { + runTest("compiler/testData/codegen/box/bridges/internalMethodOverrideInFriendModule.kt"); + } + + @Test + @TestMetadata("internalMethodOverrideInOtherModule.kt") + public void testInternalMethodOverrideInOtherModule() throws Exception { + runTest("compiler/testData/codegen/box/bridges/internalMethodOverrideInOtherModule.kt"); + } + + @Test + @TestMetadata("internalMethodOverrideMultipleInheritance.kt") + public void testInternalMethodOverrideMultipleInheritance() throws Exception { + runTest("compiler/testData/codegen/box/bridges/internalMethodOverrideMultipleInheritance.kt"); + } + + @Test + @TestMetadata("internalMethodOverridePublishedApi.kt") + public void testInternalMethodOverridePublishedApi() throws Exception { + runTest("compiler/testData/codegen/box/bridges/internalMethodOverridePublishedApi.kt"); + } + @Test @TestMetadata("kt12416.kt") public void testKt12416() throws Exception { diff --git a/compiler/tests-gen/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java b/compiler/tests-gen/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java index 948cc31f63f..d08d82b287a 100644 --- a/compiler/tests-gen/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java +++ b/compiler/tests-gen/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java @@ -2087,6 +2087,26 @@ public class LightAnalysisModeTestGenerated extends AbstractLightAnalysisModeTes runTest("compiler/testData/codegen/box/bridges/innerClassTypeParameters.kt"); } + @TestMetadata("internalMethodOverrideInFriendModule.kt") + public void testInternalMethodOverrideInFriendModule() throws Exception { + runTest("compiler/testData/codegen/box/bridges/internalMethodOverrideInFriendModule.kt"); + } + + @TestMetadata("internalMethodOverrideInOtherModule.kt") + public void testInternalMethodOverrideInOtherModule() throws Exception { + runTest("compiler/testData/codegen/box/bridges/internalMethodOverrideInOtherModule.kt"); + } + + @TestMetadata("internalMethodOverrideMultipleInheritance.kt") + public void testInternalMethodOverrideMultipleInheritance() throws Exception { + runTest("compiler/testData/codegen/box/bridges/internalMethodOverrideMultipleInheritance.kt"); + } + + @TestMetadata("internalMethodOverridePublishedApi.kt") + public void testInternalMethodOverridePublishedApi() throws Exception { + runTest("compiler/testData/codegen/box/bridges/internalMethodOverridePublishedApi.kt"); + } + @TestMetadata("kt12416.kt") public void testKt12416() throws Exception { runTest("compiler/testData/codegen/box/bridges/kt12416.kt"); diff --git a/js/js.tests/tests-gen/org/jetbrains/kotlin/incremental/JsFirInvalidationPerFileTestGenerated.java b/js/js.tests/tests-gen/org/jetbrains/kotlin/incremental/JsFirInvalidationPerFileTestGenerated.java index 6ef4d76ae3e..fe6da03c929 100644 --- a/js/js.tests/tests-gen/org/jetbrains/kotlin/incremental/JsFirInvalidationPerFileTestGenerated.java +++ b/js/js.tests/tests-gen/org/jetbrains/kotlin/incremental/JsFirInvalidationPerFileTestGenerated.java @@ -385,6 +385,12 @@ public class JsFirInvalidationPerFileTestGenerated extends AbstractJsFirInvalida runTest("js/js.translator/testData/incremental/invalidation/nonInlineBecomeInline/"); } + @Test + @TestMetadata("openClassWithInternalField") + public void testOpenClassWithInternalField() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/openClassWithInternalField/"); + } + @Test @TestMetadata("privateDeclarationLeakThroughDefaultParam") public void testPrivateDeclarationLeakThroughDefaultParam() throws Exception { diff --git a/js/js.tests/tests-gen/org/jetbrains/kotlin/incremental/JsFirInvalidationPerModuleTestGenerated.java b/js/js.tests/tests-gen/org/jetbrains/kotlin/incremental/JsFirInvalidationPerModuleTestGenerated.java index b57c83d69b7..e68a107ae0a 100644 --- a/js/js.tests/tests-gen/org/jetbrains/kotlin/incremental/JsFirInvalidationPerModuleTestGenerated.java +++ b/js/js.tests/tests-gen/org/jetbrains/kotlin/incremental/JsFirInvalidationPerModuleTestGenerated.java @@ -385,6 +385,12 @@ public class JsFirInvalidationPerModuleTestGenerated extends AbstractJsFirInvali runTest("js/js.translator/testData/incremental/invalidation/nonInlineBecomeInline/"); } + @Test + @TestMetadata("openClassWithInternalField") + public void testOpenClassWithInternalField() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/openClassWithInternalField/"); + } + @Test @TestMetadata("privateDeclarationLeakThroughDefaultParam") public void testPrivateDeclarationLeakThroughDefaultParam() throws Exception { diff --git a/js/js.tests/tests-gen/org/jetbrains/kotlin/incremental/JsIrES6InvalidationPerFileTestGenerated.java b/js/js.tests/tests-gen/org/jetbrains/kotlin/incremental/JsIrES6InvalidationPerFileTestGenerated.java index 61bde7b4984..8259ff73a51 100644 --- a/js/js.tests/tests-gen/org/jetbrains/kotlin/incremental/JsIrES6InvalidationPerFileTestGenerated.java +++ b/js/js.tests/tests-gen/org/jetbrains/kotlin/incremental/JsIrES6InvalidationPerFileTestGenerated.java @@ -385,6 +385,12 @@ public class JsIrES6InvalidationPerFileTestGenerated extends AbstractJsIrES6Inva runTest("js/js.translator/testData/incremental/invalidation/nonInlineBecomeInline/"); } + @Test + @TestMetadata("openClassWithInternalField") + public void testOpenClassWithInternalField() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/openClassWithInternalField/"); + } + @Test @TestMetadata("privateDeclarationLeakThroughDefaultParam") public void testPrivateDeclarationLeakThroughDefaultParam() throws Exception { diff --git a/js/js.tests/tests-gen/org/jetbrains/kotlin/incremental/JsIrES6InvalidationPerModuleTestGenerated.java b/js/js.tests/tests-gen/org/jetbrains/kotlin/incremental/JsIrES6InvalidationPerModuleTestGenerated.java index 8f183d3e10e..deb25a7b872 100644 --- a/js/js.tests/tests-gen/org/jetbrains/kotlin/incremental/JsIrES6InvalidationPerModuleTestGenerated.java +++ b/js/js.tests/tests-gen/org/jetbrains/kotlin/incremental/JsIrES6InvalidationPerModuleTestGenerated.java @@ -385,6 +385,12 @@ public class JsIrES6InvalidationPerModuleTestGenerated extends AbstractJsIrES6In runTest("js/js.translator/testData/incremental/invalidation/nonInlineBecomeInline/"); } + @Test + @TestMetadata("openClassWithInternalField") + public void testOpenClassWithInternalField() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/openClassWithInternalField/"); + } + @Test @TestMetadata("privateDeclarationLeakThroughDefaultParam") public void testPrivateDeclarationLeakThroughDefaultParam() throws Exception { diff --git a/js/js.tests/tests-gen/org/jetbrains/kotlin/incremental/JsIrInvalidationPerFileTestGenerated.java b/js/js.tests/tests-gen/org/jetbrains/kotlin/incremental/JsIrInvalidationPerFileTestGenerated.java index 1bde5eca39d..95b4a9dd52c 100644 --- a/js/js.tests/tests-gen/org/jetbrains/kotlin/incremental/JsIrInvalidationPerFileTestGenerated.java +++ b/js/js.tests/tests-gen/org/jetbrains/kotlin/incremental/JsIrInvalidationPerFileTestGenerated.java @@ -385,6 +385,12 @@ public class JsIrInvalidationPerFileTestGenerated extends AbstractJsIrInvalidati runTest("js/js.translator/testData/incremental/invalidation/nonInlineBecomeInline/"); } + @Test + @TestMetadata("openClassWithInternalField") + public void testOpenClassWithInternalField() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/openClassWithInternalField/"); + } + @Test @TestMetadata("privateDeclarationLeakThroughDefaultParam") public void testPrivateDeclarationLeakThroughDefaultParam() throws Exception { diff --git a/js/js.tests/tests-gen/org/jetbrains/kotlin/incremental/JsIrInvalidationPerModuleTestGenerated.java b/js/js.tests/tests-gen/org/jetbrains/kotlin/incremental/JsIrInvalidationPerModuleTestGenerated.java index 5056467e379..f28a9f00fa3 100644 --- a/js/js.tests/tests-gen/org/jetbrains/kotlin/incremental/JsIrInvalidationPerModuleTestGenerated.java +++ b/js/js.tests/tests-gen/org/jetbrains/kotlin/incremental/JsIrInvalidationPerModuleTestGenerated.java @@ -385,6 +385,12 @@ public class JsIrInvalidationPerModuleTestGenerated extends AbstractJsIrInvalida runTest("js/js.translator/testData/incremental/invalidation/nonInlineBecomeInline/"); } + @Test + @TestMetadata("openClassWithInternalField") + public void testOpenClassWithInternalField() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/openClassWithInternalField/"); + } + @Test @TestMetadata("privateDeclarationLeakThroughDefaultParam") public void testPrivateDeclarationLeakThroughDefaultParam() throws Exception { diff --git a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/fir/FirJsCodegenBoxTestGenerated.java b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/fir/FirJsCodegenBoxTestGenerated.java index f9be919b276..fdedbba9f04 100644 --- a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/fir/FirJsCodegenBoxTestGenerated.java +++ b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/fir/FirJsCodegenBoxTestGenerated.java @@ -1505,6 +1505,30 @@ public class FirJsCodegenBoxTestGenerated extends AbstractFirJsCodegenBoxTest { runTest("compiler/testData/codegen/box/bridges/innerClassTypeParameters.kt"); } + @Test + @TestMetadata("internalMethodOverrideInFriendModule.kt") + public void testInternalMethodOverrideInFriendModule() throws Exception { + runTest("compiler/testData/codegen/box/bridges/internalMethodOverrideInFriendModule.kt"); + } + + @Test + @TestMetadata("internalMethodOverrideInOtherModule.kt") + public void testInternalMethodOverrideInOtherModule() throws Exception { + runTest("compiler/testData/codegen/box/bridges/internalMethodOverrideInOtherModule.kt"); + } + + @Test + @TestMetadata("internalMethodOverrideMultipleInheritance.kt") + public void testInternalMethodOverrideMultipleInheritance() throws Exception { + runTest("compiler/testData/codegen/box/bridges/internalMethodOverrideMultipleInheritance.kt"); + } + + @Test + @TestMetadata("internalMethodOverridePublishedApi.kt") + public void testInternalMethodOverridePublishedApi() throws Exception { + runTest("compiler/testData/codegen/box/bridges/internalMethodOverridePublishedApi.kt"); + } + @Test @TestMetadata("jsName.kt") public void testJsName() throws Exception { diff --git a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/fir/FirJsES6CodegenBoxTestGenerated.java b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/fir/FirJsES6CodegenBoxTestGenerated.java index 78a1672ca5c..0c55f4547bb 100644 --- a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/fir/FirJsES6CodegenBoxTestGenerated.java +++ b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/fir/FirJsES6CodegenBoxTestGenerated.java @@ -1505,6 +1505,30 @@ public class FirJsES6CodegenBoxTestGenerated extends AbstractFirJsES6CodegenBoxT runTest("compiler/testData/codegen/box/bridges/innerClassTypeParameters.kt"); } + @Test + @TestMetadata("internalMethodOverrideInFriendModule.kt") + public void testInternalMethodOverrideInFriendModule() throws Exception { + runTest("compiler/testData/codegen/box/bridges/internalMethodOverrideInFriendModule.kt"); + } + + @Test + @TestMetadata("internalMethodOverrideInOtherModule.kt") + public void testInternalMethodOverrideInOtherModule() throws Exception { + runTest("compiler/testData/codegen/box/bridges/internalMethodOverrideInOtherModule.kt"); + } + + @Test + @TestMetadata("internalMethodOverrideMultipleInheritance.kt") + public void testInternalMethodOverrideMultipleInheritance() throws Exception { + runTest("compiler/testData/codegen/box/bridges/internalMethodOverrideMultipleInheritance.kt"); + } + + @Test + @TestMetadata("internalMethodOverridePublishedApi.kt") + public void testInternalMethodOverridePublishedApi() throws Exception { + runTest("compiler/testData/codegen/box/bridges/internalMethodOverridePublishedApi.kt"); + } + @Test @TestMetadata("jsName.kt") public void testJsName() throws Exception { diff --git a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/ir/IrJsCodegenBoxTestGenerated.java b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/ir/IrJsCodegenBoxTestGenerated.java index 36e6fb8f70e..a974737e91b 100644 --- a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/ir/IrJsCodegenBoxTestGenerated.java +++ b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/ir/IrJsCodegenBoxTestGenerated.java @@ -1505,6 +1505,30 @@ public class IrJsCodegenBoxTestGenerated extends AbstractIrJsCodegenBoxTest { runTest("compiler/testData/codegen/box/bridges/innerClassTypeParameters.kt"); } + @Test + @TestMetadata("internalMethodOverrideInFriendModule.kt") + public void testInternalMethodOverrideInFriendModule() throws Exception { + runTest("compiler/testData/codegen/box/bridges/internalMethodOverrideInFriendModule.kt"); + } + + @Test + @TestMetadata("internalMethodOverrideInOtherModule.kt") + public void testInternalMethodOverrideInOtherModule() throws Exception { + runTest("compiler/testData/codegen/box/bridges/internalMethodOverrideInOtherModule.kt"); + } + + @Test + @TestMetadata("internalMethodOverrideMultipleInheritance.kt") + public void testInternalMethodOverrideMultipleInheritance() throws Exception { + runTest("compiler/testData/codegen/box/bridges/internalMethodOverrideMultipleInheritance.kt"); + } + + @Test + @TestMetadata("internalMethodOverridePublishedApi.kt") + public void testInternalMethodOverridePublishedApi() throws Exception { + runTest("compiler/testData/codegen/box/bridges/internalMethodOverridePublishedApi.kt"); + } + @Test @TestMetadata("jsName.kt") public void testJsName() throws Exception { diff --git a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/ir/IrJsES6CodegenBoxTestGenerated.java b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/ir/IrJsES6CodegenBoxTestGenerated.java index 0a3d1ad9311..754a0700a72 100644 --- a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/ir/IrJsES6CodegenBoxTestGenerated.java +++ b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/ir/IrJsES6CodegenBoxTestGenerated.java @@ -1505,6 +1505,30 @@ public class IrJsES6CodegenBoxTestGenerated extends AbstractIrJsES6CodegenBoxTes runTest("compiler/testData/codegen/box/bridges/innerClassTypeParameters.kt"); } + @Test + @TestMetadata("internalMethodOverrideInFriendModule.kt") + public void testInternalMethodOverrideInFriendModule() throws Exception { + runTest("compiler/testData/codegen/box/bridges/internalMethodOverrideInFriendModule.kt"); + } + + @Test + @TestMetadata("internalMethodOverrideInOtherModule.kt") + public void testInternalMethodOverrideInOtherModule() throws Exception { + runTest("compiler/testData/codegen/box/bridges/internalMethodOverrideInOtherModule.kt"); + } + + @Test + @TestMetadata("internalMethodOverrideMultipleInheritance.kt") + public void testInternalMethodOverrideMultipleInheritance() throws Exception { + runTest("compiler/testData/codegen/box/bridges/internalMethodOverrideMultipleInheritance.kt"); + } + + @Test + @TestMetadata("internalMethodOverridePublishedApi.kt") + public void testInternalMethodOverridePublishedApi() throws Exception { + runTest("compiler/testData/codegen/box/bridges/internalMethodOverridePublishedApi.kt"); + } + @Test @TestMetadata("jsName.kt") public void testJsName() throws Exception { diff --git a/js/js.translator/testData/incremental/invalidation/openClassWithInternalField/lib1/A.0.kt b/js/js.translator/testData/incremental/invalidation/openClassWithInternalField/lib1/A.0.kt new file mode 100644 index 00000000000..c3292d8b888 --- /dev/null +++ b/js/js.translator/testData/incremental/invalidation/openClassWithInternalField/lib1/A.0.kt @@ -0,0 +1,4 @@ +abstract class A { + internal var prop: Int = 0 + internal fun func(): Int = 0 +} diff --git a/js/js.translator/testData/incremental/invalidation/openClassWithInternalField/lib1/A.1.kt b/js/js.translator/testData/incremental/invalidation/openClassWithInternalField/lib1/A.1.kt new file mode 100644 index 00000000000..f76b26e963b --- /dev/null +++ b/js/js.translator/testData/incremental/invalidation/openClassWithInternalField/lib1/A.1.kt @@ -0,0 +1,4 @@ +abstract class A { + internal var prop: Int = 1 + internal fun func(): Int = 1 +} diff --git a/js/js.translator/testData/incremental/invalidation/openClassWithInternalField/lib1/A.2.kt b/js/js.translator/testData/incremental/invalidation/openClassWithInternalField/lib1/A.2.kt new file mode 100644 index 00000000000..7733f3bc2ba --- /dev/null +++ b/js/js.translator/testData/incremental/invalidation/openClassWithInternalField/lib1/A.2.kt @@ -0,0 +1,2 @@ +abstract class A { +} diff --git a/js/js.translator/testData/incremental/invalidation/openClassWithInternalField/lib1/A.3.kt b/js/js.translator/testData/incremental/invalidation/openClassWithInternalField/lib1/A.3.kt new file mode 100644 index 00000000000..fde94f0cbaf --- /dev/null +++ b/js/js.translator/testData/incremental/invalidation/openClassWithInternalField/lib1/A.3.kt @@ -0,0 +1,4 @@ +abstract class A { + internal var prop: Int = 3 + internal fun func(): Int = 3 +} diff --git a/js/js.translator/testData/incremental/invalidation/openClassWithInternalField/lib1/l1.0.kt b/js/js.translator/testData/incremental/invalidation/openClassWithInternalField/lib1/l1.0.kt new file mode 100644 index 00000000000..eccd8b95ff2 --- /dev/null +++ b/js/js.translator/testData/incremental/invalidation/openClassWithInternalField/lib1/l1.0.kt @@ -0,0 +1,7 @@ +fun testProp(a: A): Int { + return a.prop +} + +fun testFunc(a: A): Int { + return a.func() +} diff --git a/js/js.translator/testData/incremental/invalidation/openClassWithInternalField/lib1/l1.2.kt b/js/js.translator/testData/incremental/invalidation/openClassWithInternalField/lib1/l1.2.kt new file mode 100644 index 00000000000..778b6c04ce0 --- /dev/null +++ b/js/js.translator/testData/incremental/invalidation/openClassWithInternalField/lib1/l1.2.kt @@ -0,0 +1,7 @@ +fun testProp(a: A): Int { + return 2 +} + +fun testFunc(a: A): Int { + return 2 +} diff --git a/js/js.translator/testData/incremental/invalidation/openClassWithInternalField/lib1/l1.3.kt b/js/js.translator/testData/incremental/invalidation/openClassWithInternalField/lib1/l1.3.kt new file mode 100644 index 00000000000..eccd8b95ff2 --- /dev/null +++ b/js/js.translator/testData/incremental/invalidation/openClassWithInternalField/lib1/l1.3.kt @@ -0,0 +1,7 @@ +fun testProp(a: A): Int { + return a.prop +} + +fun testFunc(a: A): Int { + return a.func() +} diff --git a/js/js.translator/testData/incremental/invalidation/openClassWithInternalField/lib1/module.info b/js/js.translator/testData/incremental/invalidation/openClassWithInternalField/lib1/module.info new file mode 100644 index 00000000000..e4bb0fc8d71 --- /dev/null +++ b/js/js.translator/testData/incremental/invalidation/openClassWithInternalField/lib1/module.info @@ -0,0 +1,19 @@ +STEP 0: + modifications: + U : A.0.kt -> A.kt + U : l1.0.kt -> l1.kt + added file: A.kt, l1.kt +STEP 1: + modifications: + U : A.1.kt -> A.kt + modified ir: A.kt +STEP 2: + modifications: + U : A.2.kt -> A.kt + U : l1.2.kt -> l1.kt + modified ir: A.kt, l1.kt +STEP 3: + modifications: + U : A.3.kt -> A.kt + U : l1.3.kt -> l1.kt + modified ir: A.kt, l1.kt diff --git a/js/js.translator/testData/incremental/invalidation/openClassWithInternalField/main/B.0.kt b/js/js.translator/testData/incremental/invalidation/openClassWithInternalField/main/B.0.kt new file mode 100644 index 00000000000..8ddb3ffb562 --- /dev/null +++ b/js/js.translator/testData/incremental/invalidation/openClassWithInternalField/main/B.0.kt @@ -0,0 +1,6 @@ +class B: A() { + val prop: Int + get() = 10000 + + fun func(): Int = 20000 +} diff --git a/js/js.translator/testData/incremental/invalidation/openClassWithInternalField/main/m.0.kt b/js/js.translator/testData/incremental/invalidation/openClassWithInternalField/main/m.0.kt new file mode 100644 index 00000000000..651e6ed76eb --- /dev/null +++ b/js/js.translator/testData/incremental/invalidation/openClassWithInternalField/main/m.0.kt @@ -0,0 +1,12 @@ +fun box(stepId: Int): String { + val prop = testProp(B()) + if (prop != stepId) { + return "Fail prop: $prop != $stepId" + } + + val func = testFunc(B()) + if (func != stepId) { + return "Fail func: $func != $stepId" + } + return "OK" +} diff --git a/js/js.translator/testData/incremental/invalidation/openClassWithInternalField/main/module.info b/js/js.translator/testData/incremental/invalidation/openClassWithInternalField/main/module.info new file mode 100644 index 00000000000..8462595b1d4 --- /dev/null +++ b/js/js.translator/testData/incremental/invalidation/openClassWithInternalField/main/module.info @@ -0,0 +1,8 @@ +STEP 0: + dependencies: lib1 + modifications: + U : B.0.kt -> B.kt + U : m.0.kt -> m.kt + added file: m.kt, B.kt +STEP 1..3: + dependencies: lib1 diff --git a/js/js.translator/testData/incremental/invalidation/openClassWithInternalField/project.info b/js/js.translator/testData/incremental/invalidation/openClassWithInternalField/project.info new file mode 100644 index 00000000000..878208e37bd --- /dev/null +++ b/js/js.translator/testData/incremental/invalidation/openClassWithInternalField/project.info @@ -0,0 +1,18 @@ +MODULES: lib1, main + +STEP 0: + libs: lib1, main + dirty js modules: lib1, main + dirty js files: lib1/l1, lib1/A, main/B, main/m, main/m.export, main +STEP 1: + libs: lib1, main + dirty js modules: lib1 + dirty js files: lib1/A +STEP 2: + libs: lib1, main + dirty js modules: lib1 + dirty js files: lib1/l1, lib1/A +STEP 3: + libs: lib1, main + dirty js modules: lib1 + dirty js files: lib1/l1, lib1/A diff --git a/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/blackboxtest/FirNativeCodegenBoxTestGenerated.java b/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/blackboxtest/FirNativeCodegenBoxTestGenerated.java index 228c0a2bb0c..b605792dd5a 100644 --- a/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/blackboxtest/FirNativeCodegenBoxTestGenerated.java +++ b/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/blackboxtest/FirNativeCodegenBoxTestGenerated.java @@ -1576,6 +1576,30 @@ public class FirNativeCodegenBoxTestGenerated extends AbstractNativeCodegenBoxTe runTest("compiler/testData/codegen/box/bridges/innerClassTypeParameters.kt"); } + @Test + @TestMetadata("internalMethodOverrideInFriendModule.kt") + public void testInternalMethodOverrideInFriendModule() throws Exception { + runTest("compiler/testData/codegen/box/bridges/internalMethodOverrideInFriendModule.kt"); + } + + @Test + @TestMetadata("internalMethodOverrideInOtherModule.kt") + public void testInternalMethodOverrideInOtherModule() throws Exception { + runTest("compiler/testData/codegen/box/bridges/internalMethodOverrideInOtherModule.kt"); + } + + @Test + @TestMetadata("internalMethodOverrideMultipleInheritance.kt") + public void testInternalMethodOverrideMultipleInheritance() throws Exception { + runTest("compiler/testData/codegen/box/bridges/internalMethodOverrideMultipleInheritance.kt"); + } + + @Test + @TestMetadata("internalMethodOverridePublishedApi.kt") + public void testInternalMethodOverridePublishedApi() throws Exception { + runTest("compiler/testData/codegen/box/bridges/internalMethodOverridePublishedApi.kt"); + } + @Test @TestMetadata("kt12416.kt") public void testKt12416() throws Exception { diff --git a/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/blackboxtest/FirNativeCodegenBoxTestNoPLGenerated.java b/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/blackboxtest/FirNativeCodegenBoxTestNoPLGenerated.java index 144eb89af6a..411a33a95a5 100644 --- a/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/blackboxtest/FirNativeCodegenBoxTestNoPLGenerated.java +++ b/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/blackboxtest/FirNativeCodegenBoxTestNoPLGenerated.java @@ -1618,6 +1618,30 @@ public class FirNativeCodegenBoxTestNoPLGenerated extends AbstractNativeCodegenB runTest("compiler/testData/codegen/box/bridges/innerClassTypeParameters.kt"); } + @Test + @TestMetadata("internalMethodOverrideInFriendModule.kt") + public void testInternalMethodOverrideInFriendModule() throws Exception { + runTest("compiler/testData/codegen/box/bridges/internalMethodOverrideInFriendModule.kt"); + } + + @Test + @TestMetadata("internalMethodOverrideInOtherModule.kt") + public void testInternalMethodOverrideInOtherModule() throws Exception { + runTest("compiler/testData/codegen/box/bridges/internalMethodOverrideInOtherModule.kt"); + } + + @Test + @TestMetadata("internalMethodOverrideMultipleInheritance.kt") + public void testInternalMethodOverrideMultipleInheritance() throws Exception { + runTest("compiler/testData/codegen/box/bridges/internalMethodOverrideMultipleInheritance.kt"); + } + + @Test + @TestMetadata("internalMethodOverridePublishedApi.kt") + public void testInternalMethodOverridePublishedApi() throws Exception { + runTest("compiler/testData/codegen/box/bridges/internalMethodOverridePublishedApi.kt"); + } + @Test @TestMetadata("kt12416.kt") public void testKt12416() throws Exception { diff --git a/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/blackboxtest/NativeCodegenBoxTestGenerated.java b/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/blackboxtest/NativeCodegenBoxTestGenerated.java index e2c09596fd3..7bd26b4ae81 100644 --- a/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/blackboxtest/NativeCodegenBoxTestGenerated.java +++ b/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/blackboxtest/NativeCodegenBoxTestGenerated.java @@ -1556,6 +1556,30 @@ public class NativeCodegenBoxTestGenerated extends AbstractNativeCodegenBoxTest runTest("compiler/testData/codegen/box/bridges/innerClassTypeParameters.kt"); } + @Test + @TestMetadata("internalMethodOverrideInFriendModule.kt") + public void testInternalMethodOverrideInFriendModule() throws Exception { + runTest("compiler/testData/codegen/box/bridges/internalMethodOverrideInFriendModule.kt"); + } + + @Test + @TestMetadata("internalMethodOverrideInOtherModule.kt") + public void testInternalMethodOverrideInOtherModule() throws Exception { + runTest("compiler/testData/codegen/box/bridges/internalMethodOverrideInOtherModule.kt"); + } + + @Test + @TestMetadata("internalMethodOverrideMultipleInheritance.kt") + public void testInternalMethodOverrideMultipleInheritance() throws Exception { + runTest("compiler/testData/codegen/box/bridges/internalMethodOverrideMultipleInheritance.kt"); + } + + @Test + @TestMetadata("internalMethodOverridePublishedApi.kt") + public void testInternalMethodOverridePublishedApi() throws Exception { + runTest("compiler/testData/codegen/box/bridges/internalMethodOverridePublishedApi.kt"); + } + @Test @TestMetadata("kt12416.kt") public void testKt12416() throws Exception { diff --git a/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/blackboxtest/NativeCodegenBoxTestNoPLGenerated.java b/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/blackboxtest/NativeCodegenBoxTestNoPLGenerated.java index 27c565bab37..8b669eaf5da 100644 --- a/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/blackboxtest/NativeCodegenBoxTestNoPLGenerated.java +++ b/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/blackboxtest/NativeCodegenBoxTestNoPLGenerated.java @@ -1577,6 +1577,30 @@ public class NativeCodegenBoxTestNoPLGenerated extends AbstractNativeCodegenBoxT runTest("compiler/testData/codegen/box/bridges/innerClassTypeParameters.kt"); } + @Test + @TestMetadata("internalMethodOverrideInFriendModule.kt") + public void testInternalMethodOverrideInFriendModule() throws Exception { + runTest("compiler/testData/codegen/box/bridges/internalMethodOverrideInFriendModule.kt"); + } + + @Test + @TestMetadata("internalMethodOverrideInOtherModule.kt") + public void testInternalMethodOverrideInOtherModule() throws Exception { + runTest("compiler/testData/codegen/box/bridges/internalMethodOverrideInOtherModule.kt"); + } + + @Test + @TestMetadata("internalMethodOverrideMultipleInheritance.kt") + public void testInternalMethodOverrideMultipleInheritance() throws Exception { + runTest("compiler/testData/codegen/box/bridges/internalMethodOverrideMultipleInheritance.kt"); + } + + @Test + @TestMetadata("internalMethodOverridePublishedApi.kt") + public void testInternalMethodOverridePublishedApi() throws Exception { + runTest("compiler/testData/codegen/box/bridges/internalMethodOverridePublishedApi.kt"); + } + @Test @TestMetadata("kt12416.kt") public void testKt12416() throws Exception { diff --git a/wasm/wasm.tests/tests-gen/org/jetbrains/kotlin/wasm/test/FirWasmCodegenBoxTestGenerated.java b/wasm/wasm.tests/tests-gen/org/jetbrains/kotlin/wasm/test/FirWasmCodegenBoxTestGenerated.java index 514c7a291b8..b1a31e057fb 100644 --- a/wasm/wasm.tests/tests-gen/org/jetbrains/kotlin/wasm/test/FirWasmCodegenBoxTestGenerated.java +++ b/wasm/wasm.tests/tests-gen/org/jetbrains/kotlin/wasm/test/FirWasmCodegenBoxTestGenerated.java @@ -1505,6 +1505,30 @@ public class FirWasmCodegenBoxTestGenerated extends AbstractFirWasmCodegenBoxTes runTest("compiler/testData/codegen/box/bridges/innerClassTypeParameters.kt"); } + @Test + @TestMetadata("internalMethodOverrideInFriendModule.kt") + public void testInternalMethodOverrideInFriendModule() throws Exception { + runTest("compiler/testData/codegen/box/bridges/internalMethodOverrideInFriendModule.kt"); + } + + @Test + @TestMetadata("internalMethodOverrideInOtherModule.kt") + public void testInternalMethodOverrideInOtherModule() throws Exception { + runTest("compiler/testData/codegen/box/bridges/internalMethodOverrideInOtherModule.kt"); + } + + @Test + @TestMetadata("internalMethodOverrideMultipleInheritance.kt") + public void testInternalMethodOverrideMultipleInheritance() throws Exception { + runTest("compiler/testData/codegen/box/bridges/internalMethodOverrideMultipleInheritance.kt"); + } + + @Test + @TestMetadata("internalMethodOverridePublishedApi.kt") + public void testInternalMethodOverridePublishedApi() throws Exception { + runTest("compiler/testData/codegen/box/bridges/internalMethodOverridePublishedApi.kt"); + } + @Test @TestMetadata("kt12416.kt") public void testKt12416() throws Exception { diff --git a/wasm/wasm.tests/tests-gen/org/jetbrains/kotlin/wasm/test/K1WasmCodegenBoxTestGenerated.java b/wasm/wasm.tests/tests-gen/org/jetbrains/kotlin/wasm/test/K1WasmCodegenBoxTestGenerated.java index 05b4fb1867d..09f8d445673 100644 --- a/wasm/wasm.tests/tests-gen/org/jetbrains/kotlin/wasm/test/K1WasmCodegenBoxTestGenerated.java +++ b/wasm/wasm.tests/tests-gen/org/jetbrains/kotlin/wasm/test/K1WasmCodegenBoxTestGenerated.java @@ -1505,6 +1505,30 @@ public class K1WasmCodegenBoxTestGenerated extends AbstractK1WasmCodegenBoxTest runTest("compiler/testData/codegen/box/bridges/innerClassTypeParameters.kt"); } + @Test + @TestMetadata("internalMethodOverrideInFriendModule.kt") + public void testInternalMethodOverrideInFriendModule() throws Exception { + runTest("compiler/testData/codegen/box/bridges/internalMethodOverrideInFriendModule.kt"); + } + + @Test + @TestMetadata("internalMethodOverrideInOtherModule.kt") + public void testInternalMethodOverrideInOtherModule() throws Exception { + runTest("compiler/testData/codegen/box/bridges/internalMethodOverrideInOtherModule.kt"); + } + + @Test + @TestMetadata("internalMethodOverrideMultipleInheritance.kt") + public void testInternalMethodOverrideMultipleInheritance() throws Exception { + runTest("compiler/testData/codegen/box/bridges/internalMethodOverrideMultipleInheritance.kt"); + } + + @Test + @TestMetadata("internalMethodOverridePublishedApi.kt") + public void testInternalMethodOverridePublishedApi() throws Exception { + runTest("compiler/testData/codegen/box/bridges/internalMethodOverridePublishedApi.kt"); + } + @Test @TestMetadata("kt12416.kt") public void testKt12416() throws Exception {