diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/ClassBodyCodegen.java b/compiler/backend/src/org/jetbrains/kotlin/codegen/ClassBodyCodegen.java index c8e6e9732f3..69c439e31c9 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/ClassBodyCodegen.java +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/ClassBodyCodegen.java @@ -38,6 +38,7 @@ import static org.jetbrains.kotlin.codegen.binding.CodegenBinding.enumEntryNeedS import static org.jetbrains.kotlin.resolve.DescriptorToSourceUtils.descriptorToDeclaration; import static org.jetbrains.kotlin.resolve.jvm.AsmTypes.OBJECT_TYPE; import static org.jetbrains.kotlin.resolve.jvm.diagnostics.JvmDeclarationOriginKind.CLASS_MEMBER_DELEGATION_TO_DEFAULT_IMPL; +import static org.jetbrains.kotlin.util.DeclarationUtilKt.findImplementationFromInterface; import static org.jetbrains.kotlin.util.DeclarationUtilKt.findInterfaceImplementation; public abstract class ClassBodyCodegen extends MemberCodegen { @@ -236,9 +237,12 @@ public abstract class ClassBodyCodegen extends MemberCodegen : MutableMap + +interface Left : A + +interface Right : A { + + override fun remove(key: K): V? { + result += key.toString() + ";" + return null + } + + override public fun getOrDefault(key: K, defaultValue: V): V { + result += key.toString() + ";" + return defaultValue + } +} + + +internal class MyMap : Left, Right { + override val size: Int + get() = null!! + + override fun isEmpty(): Boolean { + return true + } + + override fun containsKey(key: String): Boolean { + return false + } + + override fun containsValue(value: String): Boolean { + return false + } + + override fun get(key: String): String? { + TODO("Not yet implemented") + } + + override fun put(key: String, value: String): String? { + result += "$key=$value;" + return null + } + + override fun putAll(from: Map) { + } + + override fun clear() {} + + override val keys: MutableSet + get() = null!! + + override val values: MutableCollection + get() = null!! + + override val entries: MutableSet> + get() = null!! +} + +fun box(): String { + val map = MyMap() + map["O"] = "fail" + map.remove("O") + + val value = map.getOrDefault("O", "OK") + if (result != "O=fail;O;O;") return "fail 3: $result" + return value +} \ No newline at end of file diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/BlackBoxCodegenTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/codegen/BlackBoxCodegenTestGenerated.java index 58c578dd8a3..e7e46c74c11 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/BlackBoxCodegenTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/BlackBoxCodegenTestGenerated.java @@ -16657,6 +16657,11 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest { runTest("compiler/testData/codegen/box/jvm8/defaults/kt14243_prop.kt"); } + @TestMetadata("kt40920.kt") + public void testKt40920() throws Exception { + runTest("compiler/testData/codegen/box/jvm8/defaults/kt40920.kt"); + } + @TestMetadata("oneImplementation.kt") public void testOneImplementation() throws Exception { runTest("compiler/testData/codegen/box/jvm8/defaults/oneImplementation.kt"); @@ -17086,6 +17091,11 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest { runTest("compiler/testData/codegen/box/jvm8/defaults/noDefaultImpls/kt14243_2.kt"); } + @TestMetadata("kt40920.kt") + public void testKt40920() throws Exception { + runTest("compiler/testData/codegen/box/jvm8/defaults/noDefaultImpls/kt40920.kt"); + } + @TestMetadata("privateFunInInterface.kt") public void testPrivateFunInInterface() throws Exception { runTest("compiler/testData/codegen/box/jvm8/defaults/noDefaultImpls/privateFunInInterface.kt"); @@ -17265,6 +17275,26 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest { runTest("compiler/testData/codegen/box/jvm8/javaDefaults/invokeDefaultViaSuper.kt"); } + @TestMetadata("kt40920.kt") + public void testKt40920() throws Exception { + runTest("compiler/testData/codegen/box/jvm8/javaDefaults/kt40920.kt"); + } + + @TestMetadata("kt40920_java.kt") + public void testKt40920_java() throws Exception { + runTest("compiler/testData/codegen/box/jvm8/javaDefaults/kt40920_java.kt"); + } + + @TestMetadata("kt40920_java2.kt") + public void testKt40920_java2() throws Exception { + runTest("compiler/testData/codegen/box/jvm8/javaDefaults/kt40920_java2.kt"); + } + + @TestMetadata("kt40920_map.kt") + public void testKt40920_map() throws Exception { + runTest("compiler/testData/codegen/box/jvm8/javaDefaults/kt40920_map.kt"); + } + @TestMetadata("longChainOfKotlinExtendsFromJavaWithDefault.kt") public void testLongChainOfKotlinExtendsFromJavaWithDefault() throws Exception { runTest("compiler/testData/codegen/box/jvm8/javaDefaults/longChainOfKotlinExtendsFromJavaWithDefault.kt"); diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java index e00fbb1f4fc..5eeec7a436c 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java @@ -16657,6 +16657,11 @@ public class LightAnalysisModeTestGenerated extends AbstractLightAnalysisModeTes runTest("compiler/testData/codegen/box/jvm8/defaults/kt14243_prop.kt"); } + @TestMetadata("kt40920.kt") + public void testKt40920() throws Exception { + runTest("compiler/testData/codegen/box/jvm8/defaults/kt40920.kt"); + } + @TestMetadata("oneImplementation.kt") public void testOneImplementation() throws Exception { runTest("compiler/testData/codegen/box/jvm8/defaults/oneImplementation.kt"); @@ -17086,6 +17091,11 @@ public class LightAnalysisModeTestGenerated extends AbstractLightAnalysisModeTes runTest("compiler/testData/codegen/box/jvm8/defaults/noDefaultImpls/kt14243_2.kt"); } + @TestMetadata("kt40920.kt") + public void testKt40920() throws Exception { + runTest("compiler/testData/codegen/box/jvm8/defaults/noDefaultImpls/kt40920.kt"); + } + @TestMetadata("privateFunInInterface.kt") public void testPrivateFunInInterface() throws Exception { runTest("compiler/testData/codegen/box/jvm8/defaults/noDefaultImpls/privateFunInInterface.kt"); @@ -17265,6 +17275,26 @@ public class LightAnalysisModeTestGenerated extends AbstractLightAnalysisModeTes runTest("compiler/testData/codegen/box/jvm8/javaDefaults/invokeDefaultViaSuper.kt"); } + @TestMetadata("kt40920.kt") + public void testKt40920() throws Exception { + runTest("compiler/testData/codegen/box/jvm8/javaDefaults/kt40920.kt"); + } + + @TestMetadata("kt40920_java.kt") + public void testKt40920_java() throws Exception { + runTest("compiler/testData/codegen/box/jvm8/javaDefaults/kt40920_java.kt"); + } + + @TestMetadata("kt40920_java2.kt") + public void testKt40920_java2() throws Exception { + runTest("compiler/testData/codegen/box/jvm8/javaDefaults/kt40920_java2.kt"); + } + + @TestMetadata("kt40920_map.kt") + public void testKt40920_map() throws Exception { + runTest("compiler/testData/codegen/box/jvm8/javaDefaults/kt40920_map.kt"); + } + @TestMetadata("longChainOfKotlinExtendsFromJavaWithDefault.kt") public void testLongChainOfKotlinExtendsFromJavaWithDefault() throws Exception { runTest("compiler/testData/codegen/box/jvm8/javaDefaults/longChainOfKotlinExtendsFromJavaWithDefault.kt"); diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/ir/IrBlackBoxCodegenTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/codegen/ir/IrBlackBoxCodegenTestGenerated.java index 4bd889b18ff..36c24ba7f81 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/ir/IrBlackBoxCodegenTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/ir/IrBlackBoxCodegenTestGenerated.java @@ -15432,6 +15432,11 @@ public class IrBlackBoxCodegenTestGenerated extends AbstractIrBlackBoxCodegenTes runTest("compiler/testData/codegen/box/jvm8/defaults/kt14243_prop.kt"); } + @TestMetadata("kt40920.kt") + public void testKt40920() throws Exception { + runTest("compiler/testData/codegen/box/jvm8/defaults/kt40920.kt"); + } + @TestMetadata("oneImplementation.kt") public void testOneImplementation() throws Exception { runTest("compiler/testData/codegen/box/jvm8/defaults/oneImplementation.kt"); @@ -15861,6 +15866,11 @@ public class IrBlackBoxCodegenTestGenerated extends AbstractIrBlackBoxCodegenTes runTest("compiler/testData/codegen/box/jvm8/defaults/noDefaultImpls/kt14243_2.kt"); } + @TestMetadata("kt40920.kt") + public void testKt40920() throws Exception { + runTest("compiler/testData/codegen/box/jvm8/defaults/noDefaultImpls/kt40920.kt"); + } + @TestMetadata("privateFunInInterface.kt") public void testPrivateFunInInterface() throws Exception { runTest("compiler/testData/codegen/box/jvm8/defaults/noDefaultImpls/privateFunInInterface.kt"); @@ -16040,6 +16050,26 @@ public class IrBlackBoxCodegenTestGenerated extends AbstractIrBlackBoxCodegenTes runTest("compiler/testData/codegen/box/jvm8/javaDefaults/invokeDefaultViaSuper.kt"); } + @TestMetadata("kt40920.kt") + public void testKt40920() throws Exception { + runTest("compiler/testData/codegen/box/jvm8/javaDefaults/kt40920.kt"); + } + + @TestMetadata("kt40920_java.kt") + public void testKt40920_java() throws Exception { + runTest("compiler/testData/codegen/box/jvm8/javaDefaults/kt40920_java.kt"); + } + + @TestMetadata("kt40920_java2.kt") + public void testKt40920_java2() throws Exception { + runTest("compiler/testData/codegen/box/jvm8/javaDefaults/kt40920_java2.kt"); + } + + @TestMetadata("kt40920_map.kt") + public void testKt40920_map() throws Exception { + runTest("compiler/testData/codegen/box/jvm8/javaDefaults/kt40920_map.kt"); + } + @TestMetadata("longChainOfKotlinExtendsFromJavaWithDefault.kt") public void testLongChainOfKotlinExtendsFromJavaWithDefault() throws Exception { runTest("compiler/testData/codegen/box/jvm8/javaDefaults/longChainOfKotlinExtendsFromJavaWithDefault.kt");