diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/builtinSpecialBridges.kt b/compiler/backend/src/org/jetbrains/kotlin/codegen/builtinSpecialBridges.kt index 10918edcb00..ec1909a2b00 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/builtinSpecialBridges.kt +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/builtinSpecialBridges.kt @@ -91,7 +91,12 @@ object BuiltinSpecialBridgesUtil { // Can be null if special builtin is final (e.g. 'name' in Enum) // because there should be no stubs for override in subclasses - val superImplementationDescriptor = findSuperImplementationForStubDelegation(function, fake, isBodyOwner) + val superImplementationDescriptor = + if (specialBridge != null) + findSuperImplementationForStubDelegation(function, fake, isBodyOwner) + else + null + if (superImplementationDescriptor != null) { bridges.add(BridgeForBuiltinSpecial(methodItself, signatureByDescriptor(superImplementationDescriptor), isDelegateToSuper = true)) } diff --git a/compiler/testData/codegen/box/specialBuiltins/entrySetSOE.kt b/compiler/testData/codegen/box/specialBuiltins/entrySetSOE.kt new file mode 100644 index 00000000000..ce88bcf709b --- /dev/null +++ b/compiler/testData/codegen/box/specialBuiltins/entrySetSOE.kt @@ -0,0 +1,15 @@ +import java.util.* + +open class Map1 : HashMap() +class Map2 : Map1() +fun box(): String { + val m = Map2() + if (m.entries.size != 0) return "fail 1" + + m.put("56", "OK") + val x = m.entries.iterator().next() + + if (x.key != "56" || x.value != "OK") return "fail 2" + + return "OK" +} diff --git a/compiler/testData/codegen/bytecodeListing/specialBridges/contains.txt b/compiler/testData/codegen/bytecodeListing/specialBridges/contains.txt index 187b18cbb76..20bd2e1db50 100644 --- a/compiler/testData/codegen/bytecodeListing/specialBridges/contains.txt +++ b/compiler/testData/codegen/bytecodeListing/specialBridges/contains.txt @@ -27,12 +27,8 @@ public abstract class A2 { @kotlin.Metadata public abstract class A3 { public method (): void - public method contains(p0: java.lang.Object): boolean public abstract method getSize(): int - public method indexOf(p0: java.lang.Object): int - public method lastIndexOf(p0: java.lang.Object): int public final method remove(p0: int): java.lang.Object - public method remove(p0: java.lang.Object): boolean public method removeAt(p0: int): java.lang.Object public final method size(): int } @@ -43,10 +39,7 @@ public abstract class A4 { public method contains(p0: java.lang.Object): boolean public method containsAll(@org.jetbrains.annotations.NotNull p0: java.util.Collection): boolean public abstract method getSize(): int - public method indexOf(p0: java.lang.Object): int - public method lastIndexOf(p0: java.lang.Object): int public final method remove(p0: int): java.lang.Object - public method remove(p0: java.lang.Object): boolean public method removeAt(p0: int): java.lang.Object public final method size(): int } @@ -136,4 +129,4 @@ public interface I2 { inner class I2$DefaultImpls public abstract method contains(@org.jetbrains.annotations.NotNull p0: java.lang.String): boolean public abstract method containsAll(@org.jetbrains.annotations.NotNull p0: java.util.Collection): boolean -} \ No newline at end of file +} diff --git a/compiler/testData/codegen/bytecodeListing/specialBridges/removeAtTwoSpecialBridges.txt b/compiler/testData/codegen/bytecodeListing/specialBridges/removeAtTwoSpecialBridges.txt index 1d6ec1a61d3..66f71078286 100644 --- a/compiler/testData/codegen/bytecodeListing/specialBridges/removeAtTwoSpecialBridges.txt +++ b/compiler/testData/codegen/bytecodeListing/specialBridges/removeAtTwoSpecialBridges.txt @@ -33,7 +33,6 @@ public final class A1 { public method (): void public final method contains(p0: java.lang.Object): boolean public method contains(p0: java.lang.String): boolean - public method getSize(): int public final method indexOf(p0: java.lang.Object): int public method indexOf(p0: java.lang.String): int public final method lastIndexOf(p0: java.lang.Object): int @@ -52,7 +51,6 @@ public final class A2 { public method (): void public final method contains(p0: java.lang.Object): boolean public method contains(p0: java.lang.String): boolean - public method getSize(): int public final method indexOf(p0: java.lang.Object): int public method indexOf(p0: java.lang.String): int public final method lastIndexOf(p0: java.lang.Object): int diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/BlackBoxCodegenTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/codegen/BlackBoxCodegenTestGenerated.java index 9ce11e72dbf..ab7f0ca3b66 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/BlackBoxCodegenTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/BlackBoxCodegenTestGenerated.java @@ -13639,6 +13639,12 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest { doTest(fileName); } + @TestMetadata("entrySetSOE.kt") + public void testEntrySetSOE() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/specialBuiltins/entrySetSOE.kt"); + doTest(fileName); + } + @TestMetadata("enumAsOrdinaled.kt") public void testEnumAsOrdinaled() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/specialBuiltins/enumAsOrdinaled.kt");