diff --git a/compiler/fir/fir2ir/tests/org/jetbrains/kotlin/codegen/ir/FirBlackBoxCodegenTestGenerated.java b/compiler/fir/fir2ir/tests/org/jetbrains/kotlin/codegen/ir/FirBlackBoxCodegenTestGenerated.java index 3a15526d9e5..ecaf434d3bf 100644 --- a/compiler/fir/fir2ir/tests/org/jetbrains/kotlin/codegen/ir/FirBlackBoxCodegenTestGenerated.java +++ b/compiler/fir/fir2ir/tests/org/jetbrains/kotlin/codegen/ir/FirBlackBoxCodegenTestGenerated.java @@ -5003,6 +5003,11 @@ public class FirBlackBoxCodegenTestGenerated extends AbstractFirBlackBoxCodegenT runTest("compiler/testData/codegen/box/collections/readOnlyMap.kt"); } + @TestMetadata("removeAtBridgeClashWithJava.kt") + public void testRemoveAtBridgeClashWithJava() throws Exception { + runTest("compiler/testData/codegen/box/collections/removeAtBridgeClashWithJava.kt"); + } + @TestMetadata("removeAtInt.kt") public void testRemoveAtInt() throws Exception { runTest("compiler/testData/codegen/box/collections/removeAtInt.kt"); diff --git a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/CollectionStubMethodLowering.kt b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/CollectionStubMethodLowering.kt index c4adc073c44..87f2a71c472 100644 --- a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/CollectionStubMethodLowering.kt +++ b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/CollectionStubMethodLowering.kt @@ -24,6 +24,7 @@ import org.jetbrains.kotlin.ir.symbols.IrClassSymbol import org.jetbrains.kotlin.ir.symbols.IrTypeParameterSymbol import org.jetbrains.kotlin.ir.types.* import org.jetbrains.kotlin.ir.util.* +import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.types.AbstractTypeChecker import org.jetbrains.kotlin.types.AbstractTypeCheckerContext import org.jetbrains.kotlin.utils.addToStdlib.cast @@ -54,21 +55,86 @@ internal class CollectionStubMethodLowering(val context: JvmBackendContext) : Cl for (member in methodStubsToGenerate) { val signature = member.toJvmSignature() - val existingMethod = existingMethodsBySignature[signature] // TODO KT-41915 + val existingMethod = existingMethodsBySignature[signature] if (existingMethod != null && areEquivalentSignatures(existingMethod, member)) { // In the case that we find a defined method that matches the stub signature, we add the overridden symbols to that // defined method, so that bridge lowering can still generate correct bridge for that method existingMethod.overriddenSymbols += member.overriddenSymbols } else { - irClass.declarations.add(member.hackRemoveMethodIfRequired()) + // Some stub members require special handling. + // In both 'remove' and 'removeAt' cases there are no other member functions with same name in built-in mutable collection + // classes, so it's safe to check for the member name itself. + when (member.name.asString()) { + "remove" -> { + // - 'remove' member functions: + // kotlin.collections.MutableCollection#remove(E): Boolean + // kotlin.collections.MutableMap#remove(K): V? + // We've checked that corresponding 'remove(T)' member function is not present in the class. + // We should add a member function that overrides, respectively: + // java.util.Collection#remove(Object): boolean + // java.util.Map#remove(K): V + // This corresponds to replacing value parameter types with 'Any?'. + irClass.declarations.add(member.apply { + valueParameters = valueParameters.map { + it.copyWithCustomTypeSubstitution(this) { context.irBuiltIns.anyNType } + } + }) + } + "removeAt" -> { + // - 'removeAt' member function: + // kotlin.collections.MutableList#removeAt(Int): E + // We've checked that corresponding 'removeAt(Int)' member function is not present in the class + // (if it IS present, special bridges for 'remove(I)' would be generated later in BridgeLowering). + // We can't add 'removeAt' here, because it would be different from what old back-end generates + // and can break existing Java and/or Kotlin code. + // We should add a member function that overrides + // java.util.List#remove(int): E + // and throws UnsupportedOperationException, just like any other stub. + // Also, we should generate a bridge for it if required. + val removeIntFun = createRemoveAtStub(member, member.returnType, IrDeclarationOrigin.IR_BUILTINS_STUB) + irClass.declarations.add(removeIntFun) + val removeIntBridgeFun = createRemoveAtStub(member, context.irBuiltIns.anyNType, IrDeclarationOrigin.BRIDGE) + if (removeIntBridgeFun.toJvmSignature() != removeIntFun.toJvmSignature()) { + irClass.declarations.add(removeIntBridgeFun) + } + } + else -> + irClass.declarations.add(member) + } + } } } + private fun createRemoveAtStub( + removeAtStub: IrSimpleFunction, + stubReturnType: IrType, + stubOrigin: IrDeclarationOrigin + ): IrSimpleFunction { + return context.irFactory.buildFun { + name = Name.identifier("remove") + returnType = stubReturnType + visibility = removeAtStub.visibility + origin = stubOrigin + modality = Modality.OPEN + }.apply { + // NB stub method for 'remove(int)' doesn't override any built-in Kotlin declaration + parent = removeAtStub.parent + dispatchReceiverParameter = removeAtStub.dispatchReceiverParameter?.copyWithCustomTypeSubstitution(this) { it } + extensionReceiverParameter = null + valueParameters = removeAtStub.valueParameters.map { stubParameter -> + stubParameter.copyWithCustomTypeSubstitution(this) { it } + } + body = createThrowingStubBody(this) + } + } + private fun IrSimpleFunction.toJvmSignature(): String = collectionStubComputer.getJvmSignature(this) private fun createStubMethod( - function: IrSimpleFunction, irClass: IrClass, substitutionMap: Map + function: IrSimpleFunction, + irClass: IrClass, + substitutionMap: Map ): IrSimpleFunction { return context.irFactory.buildFun { name = function.name @@ -84,17 +150,19 @@ internal class CollectionStubMethodLowering(val context: JvmBackendContext) : Cl dispatchReceiverParameter = function.dispatchReceiverParameter?.copyWithSubstitution(this, substitutionMap) extensionReceiverParameter = function.extensionReceiverParameter?.copyWithSubstitution(this, substitutionMap) valueParameters = function.valueParameters.map { it.copyWithSubstitution(this, substitutionMap) } - // Function body consist only of throwing UnsupportedOperationException statement - body = context.createIrBuilder(function.symbol).irBlockBody { - +irCall( - this@CollectionStubMethodLowering.context.ir.symbols.throwUnsupportedOperationException - ).apply { - putValueArgument(0, irString("Operation is not supported for read-only collection")) - } - } + body = createThrowingStubBody(this) } } + private fun createThrowingStubBody(function: IrSimpleFunction) = + context.createIrBuilder(function.symbol).irBlockBody { + // Function body consist only of throwing UnsupportedOperationException statement + +irCall(this@CollectionStubMethodLowering.context.ir.symbols.throwUnsupportedOperationException) + .apply { + putValueArgument(0, irString("Operation is not supported for read-only collection")) + } + } + private fun areEquivalentSignatures(fun1: IrSimpleFunction, fun2: IrSimpleFunction): Boolean { if (fun1.typeParameters.size != fun2.typeParameters.size) return false if (fun1.valueParameters.size != fun2.valueParameters.size) return false diff --git a/compiler/testData/codegen/box/collections/removeAtBridgeClashWithJava.kt b/compiler/testData/codegen/box/collections/removeAtBridgeClashWithJava.kt new file mode 100644 index 00000000000..203cdd5eb3f --- /dev/null +++ b/compiler/testData/codegen/box/collections/removeAtBridgeClashWithJava.kt @@ -0,0 +1,48 @@ +// TARGET_BACKEND: JVM +// IGNORE_BACKEND_FIR: JVM_IR +// WITH_RUNTIME +// FILE: removeAtBridgeClashWithJava.kt + +abstract class AJALI : JavaAbstractList() + +class K : AJALI() { + override val size: Int get() = TODO() + override fun contains(element: Int?): Boolean = TODO() + override fun containsAll(elements: Collection): Boolean = TODO() + override fun get(index: Int): Int = TODO() + override fun indexOf(element: Int?): Int = TODO() + override fun isEmpty(): Boolean = TODO() + override fun iterator(): MutableIterator = TODO() + override fun lastIndexOf(element: Int?): Int = TODO() + override fun add(element: Int?): Boolean = TODO() + override fun add(index: Int, element: Int?): Unit = TODO() + override fun addAll(index: Int, elements: Collection): Boolean = TODO() + override fun addAll(elements: Collection): Boolean = TODO() + override fun clear(): Unit = TODO() + override fun listIterator(): MutableListIterator = TODO() + override fun listIterator(index: Int): MutableListIterator = TODO() + override fun remove(element: Int?): Boolean = TODO() + override fun removeAll(elements: Collection): Boolean = TODO() + override fun retainAll(elements: Collection): Boolean = TODO() + override fun set(index: Int, element: Int?): Int = TODO() + override fun subList(fromIndex: Int, toIndex: Int): MutableList = TODO() +} + +fun box(): String { + K().removeAt(32) + return JavaAbstractList.OK +} + + +// FILE: JavaAbstractList.java +import java.util.List; + +public abstract class JavaAbstractList implements List { + public static String OK = ""; + + @Override + public final T remove(int index) { + OK = "OK"; + return null; + } +} diff --git a/compiler/testData/codegen/bytecodeListing/specialBridges/abstractLists.kt b/compiler/testData/codegen/bytecodeListing/specialBridges/abstractLists.kt new file mode 100644 index 00000000000..28899edae35 --- /dev/null +++ b/compiler/testData/codegen/bytecodeListing/specialBridges/abstractLists.kt @@ -0,0 +1,13 @@ +abstract class ALA : List + +abstract class ALAN : List + +abstract class ALT : List + +abstract class ALI : List + +abstract class ALIN : List + +abstract class ALS : List + +abstract class ALSN : List \ No newline at end of file diff --git a/compiler/testData/codegen/bytecodeListing/specialBridges/abstractLists.txt b/compiler/testData/codegen/bytecodeListing/specialBridges/abstractLists.txt new file mode 100644 index 00000000000..c3ddcd6c942 --- /dev/null +++ b/compiler/testData/codegen/bytecodeListing/specialBridges/abstractLists.txt @@ -0,0 +1,209 @@ +@kotlin.Metadata +public abstract class ALA { + // source: 'abstractLists.kt' + public method (): void + public method add(p0: int, p1: java.lang.Object): void + public method add(p0: java.lang.Object): boolean + public method addAll(p0: int, p1: java.util.Collection): boolean + public method addAll(p0: java.util.Collection): boolean + public method clear(): void + public abstract method contains(p0: java.lang.Object): boolean + public abstract method getSize(): int + public abstract method indexOf(p0: java.lang.Object): int + public abstract method lastIndexOf(p0: java.lang.Object): int + public method listIterator(): java.util.ListIterator + public method listIterator(p0: int): java.util.ListIterator + public method remove(p0: int): java.lang.Object + public method remove(p0: java.lang.Object): boolean + public method removeAll(p0: java.util.Collection): boolean + public method retainAll(p0: java.util.Collection): boolean + public method set(p0: int, p1: java.lang.Object): java.lang.Object + public bridge final method size(): int + public method subList(p0: int, p1: int): java.util.List + public method toArray(): java.lang.Object[] + public method toArray(p0: java.lang.Object[]): java.lang.Object[] +} + +@kotlin.Metadata +public abstract class ALAN { + // source: 'abstractLists.kt' + public method (): void + public method add(p0: int, p1: java.lang.Object): void + public method add(p0: java.lang.Object): boolean + public method addAll(p0: int, p1: java.util.Collection): boolean + public method addAll(p0: java.util.Collection): boolean + public method clear(): void + public abstract method contains(p0: java.lang.Object): boolean + public abstract method getSize(): int + public abstract method indexOf(p0: java.lang.Object): int + public abstract method lastIndexOf(p0: java.lang.Object): int + public method listIterator(): java.util.ListIterator + public method listIterator(p0: int): java.util.ListIterator + public method remove(p0: int): java.lang.Object + public method remove(p0: java.lang.Object): boolean + public method removeAll(p0: java.util.Collection): boolean + public method retainAll(p0: java.util.Collection): boolean + public method set(p0: int, p1: java.lang.Object): java.lang.Object + public bridge final method size(): int + public method subList(p0: int, p1: int): java.util.List + public method toArray(): java.lang.Object[] + public method toArray(p0: java.lang.Object[]): java.lang.Object[] +} + +@kotlin.Metadata +public abstract class ALI { + // source: 'abstractLists.kt' + public method (): void + public method add(p0: int): boolean + public method add(p0: int, p1: int): void + public synthetic method add(p0: int, p1: java.lang.Object): void + public synthetic method add(p0: java.lang.Object): boolean + public method addAll(p0: int, p1: java.util.Collection): boolean + public method addAll(p0: java.util.Collection): boolean + public method clear(): void + public abstract method contains(p0: int): boolean + public bridge final method contains(p0: java.lang.Object): boolean + public abstract method getSize(): int + public abstract method indexOf(p0: int): int + public bridge final method indexOf(p0: java.lang.Object): int + public abstract method lastIndexOf(p0: int): int + public bridge final method lastIndexOf(p0: java.lang.Object): int + public method listIterator(): java.util.ListIterator + public method listIterator(p0: int): java.util.ListIterator + public method remove(p0: int): int + public synthetic method remove(p0: int): java.lang.Object + public method remove(p0: java.lang.Object): boolean + public method removeAll(p0: java.util.Collection): boolean + public method retainAll(p0: java.util.Collection): boolean + public method set(p0: int, p1: int): java.lang.Integer + public synthetic method set(p0: int, p1: java.lang.Object): java.lang.Object + public bridge final method size(): int + public method subList(p0: int, p1: int): java.util.List + public method toArray(): java.lang.Object[] + public method toArray(p0: java.lang.Object[]): java.lang.Object[] +} + +@kotlin.Metadata +public abstract class ALIN { + // source: 'abstractLists.kt' + public method (): void + public method add(p0: int, p1: java.lang.Integer): void + public synthetic method add(p0: int, p1: java.lang.Object): void + public method add(p0: java.lang.Integer): boolean + public synthetic method add(p0: java.lang.Object): boolean + public method addAll(p0: int, p1: java.util.Collection): boolean + public method addAll(p0: java.util.Collection): boolean + public method clear(): void + public abstract method contains(p0: java.lang.Integer): boolean + public bridge final method contains(p0: java.lang.Object): boolean + public abstract method getSize(): int + public abstract method indexOf(p0: java.lang.Integer): int + public bridge final method indexOf(p0: java.lang.Object): int + public abstract method lastIndexOf(p0: java.lang.Integer): int + public bridge final method lastIndexOf(p0: java.lang.Object): int + public method listIterator(): java.util.ListIterator + public method listIterator(p0: int): java.util.ListIterator + public method remove(p0: int): java.lang.Integer + public synthetic method remove(p0: int): java.lang.Object + public method remove(p0: java.lang.Object): boolean + public method removeAll(p0: java.util.Collection): boolean + public method retainAll(p0: java.util.Collection): boolean + public method set(p0: int, p1: java.lang.Integer): java.lang.Integer + public synthetic method set(p0: int, p1: java.lang.Object): java.lang.Object + public bridge final method size(): int + public method subList(p0: int, p1: int): java.util.List + public method toArray(): java.lang.Object[] + public method toArray(p0: java.lang.Object[]): java.lang.Object[] +} + +@kotlin.Metadata +public abstract class ALS { + // source: 'abstractLists.kt' + public method (): void + public synthetic method add(p0: int, p1: java.lang.Object): void + public method add(p0: int, p1: java.lang.String): void + public synthetic method add(p0: java.lang.Object): boolean + public method add(p0: java.lang.String): boolean + public method addAll(p0: int, p1: java.util.Collection): boolean + public method addAll(p0: java.util.Collection): boolean + public method clear(): void + public bridge final method contains(p0: java.lang.Object): boolean + public abstract method contains(p0: java.lang.String): boolean + public abstract method getSize(): int + public bridge final method indexOf(p0: java.lang.Object): int + public abstract method indexOf(p0: java.lang.String): int + public bridge final method lastIndexOf(p0: java.lang.Object): int + public abstract method lastIndexOf(p0: java.lang.String): int + public method listIterator(): java.util.ListIterator + public method listIterator(p0: int): java.util.ListIterator + public synthetic method remove(p0: int): java.lang.Object + public method remove(p0: int): java.lang.String + public method remove(p0: java.lang.Object): boolean + public method removeAll(p0: java.util.Collection): boolean + public method retainAll(p0: java.util.Collection): boolean + public synthetic method set(p0: int, p1: java.lang.Object): java.lang.Object + public method set(p0: int, p1: java.lang.String): java.lang.String + public bridge final method size(): int + public method subList(p0: int, p1: int): java.util.List + public method toArray(): java.lang.Object[] + public method toArray(p0: java.lang.Object[]): java.lang.Object[] +} + +@kotlin.Metadata +public abstract class ALSN { + // source: 'abstractLists.kt' + public method (): void + public synthetic method add(p0: int, p1: java.lang.Object): void + public method add(p0: int, p1: java.lang.String): void + public synthetic method add(p0: java.lang.Object): boolean + public method add(p0: java.lang.String): boolean + public method addAll(p0: int, p1: java.util.Collection): boolean + public method addAll(p0: java.util.Collection): boolean + public method clear(): void + public bridge final method contains(p0: java.lang.Object): boolean + public abstract method contains(p0: java.lang.String): boolean + public abstract method getSize(): int + public bridge final method indexOf(p0: java.lang.Object): int + public abstract method indexOf(p0: java.lang.String): int + public bridge final method lastIndexOf(p0: java.lang.Object): int + public abstract method lastIndexOf(p0: java.lang.String): int + public method listIterator(): java.util.ListIterator + public method listIterator(p0: int): java.util.ListIterator + public synthetic method remove(p0: int): java.lang.Object + public method remove(p0: int): java.lang.String + public method remove(p0: java.lang.Object): boolean + public method removeAll(p0: java.util.Collection): boolean + public method retainAll(p0: java.util.Collection): boolean + public synthetic method set(p0: int, p1: java.lang.Object): java.lang.Object + public method set(p0: int, p1: java.lang.String): java.lang.String + public bridge final method size(): int + public method subList(p0: int, p1: int): java.util.List + public method toArray(): java.lang.Object[] + public method toArray(p0: java.lang.Object[]): java.lang.Object[] +} + +@kotlin.Metadata +public abstract class ALT { + // source: 'abstractLists.kt' + public method (): void + public method add(p0: int, p1: java.lang.Object): void + public method add(p0: java.lang.Object): boolean + public method addAll(p0: int, p1: java.util.Collection): boolean + public method addAll(p0: java.util.Collection): boolean + public method clear(): void + public abstract method contains(p0: java.lang.Object): boolean + public abstract method getSize(): int + public abstract method indexOf(p0: java.lang.Object): int + public abstract method lastIndexOf(p0: java.lang.Object): int + public method listIterator(): java.util.ListIterator + public method listIterator(p0: int): java.util.ListIterator + public method remove(p0: int): java.lang.Object + public method remove(p0: java.lang.Object): boolean + public method removeAll(p0: java.util.Collection): boolean + public method retainAll(p0: java.util.Collection): boolean + public method set(p0: int, p1: java.lang.Object): java.lang.Object + public bridge final method size(): int + public method subList(p0: int, p1: int): java.util.List + public method toArray(): java.lang.Object[] + public method toArray(p0: java.lang.Object[]): java.lang.Object[] +} diff --git a/compiler/testData/codegen/bytecodeListing/specialBridges/abstractListsWithJavaBase.kt b/compiler/testData/codegen/bytecodeListing/specialBridges/abstractListsWithJavaBase.kt new file mode 100644 index 00000000000..67a7cf1bef4 --- /dev/null +++ b/compiler/testData/codegen/bytecodeListing/specialBridges/abstractListsWithJavaBase.kt @@ -0,0 +1,13 @@ +abstract class AJALA : java.util.AbstractList() + +abstract class AJALAN : java.util.AbstractList() + +abstract class AJALT : java.util.AbstractList() + +abstract class AJALI : java.util.AbstractList() + +abstract class AJALIN : java.util.AbstractList() + +abstract class AJALS : java.util.AbstractList() + +abstract class AJALSN : java.util.AbstractList() \ No newline at end of file diff --git a/compiler/testData/codegen/bytecodeListing/specialBridges/abstractListsWithJavaBase.txt b/compiler/testData/codegen/bytecodeListing/specialBridges/abstractListsWithJavaBase.txt new file mode 100644 index 00000000000..7c9e933dd18 --- /dev/null +++ b/compiler/testData/codegen/bytecodeListing/specialBridges/abstractListsWithJavaBase.txt @@ -0,0 +1,101 @@ +@kotlin.Metadata +public abstract class AJALA { + // source: 'abstractListsWithJavaBase.kt' + public method (): void + public abstract method getSize(): int + public bridge final method remove(p0: int): java.lang.Object + public bridge method removeAt(p0: int): java.lang.Object + public bridge final method size(): int +} + +@kotlin.Metadata +public abstract class AJALAN { + // source: 'abstractListsWithJavaBase.kt' + public method (): void + public abstract method getSize(): int + public bridge final method remove(p0: int): java.lang.Object + public bridge method removeAt(p0: int): java.lang.Object + public bridge final method size(): int +} + +@kotlin.Metadata +public abstract class AJALI { + // source: 'abstractListsWithJavaBase.kt' + public method (): void + public bridge method contains(p0: java.lang.Integer): boolean + public bridge final method contains(p0: java.lang.Object): boolean + public abstract method getSize(): int + public bridge method indexOf(p0: java.lang.Integer): int + public bridge final method indexOf(p0: java.lang.Object): int + public bridge method lastIndexOf(p0: java.lang.Integer): int + public bridge final method lastIndexOf(p0: java.lang.Object): int + public bridge final method remove(p0: int): java.lang.Integer + public bridge method remove(p0: java.lang.Integer): boolean + public bridge final method remove(p0: java.lang.Object): boolean + public bridge method removeAt(p0: int): java.lang.Integer + public bridge final method size(): int +} + +@kotlin.Metadata +public abstract class AJALIN { + // source: 'abstractListsWithJavaBase.kt' + public method (): void + public bridge method contains(p0: java.lang.Integer): boolean + public bridge final method contains(p0: java.lang.Object): boolean + public abstract method getSize(): int + public bridge method indexOf(p0: java.lang.Integer): int + public bridge final method indexOf(p0: java.lang.Object): int + public bridge method lastIndexOf(p0: java.lang.Integer): int + public bridge final method lastIndexOf(p0: java.lang.Object): int + public bridge final method remove(p0: int): java.lang.Integer + public bridge method remove(p0: java.lang.Integer): boolean + public bridge final method remove(p0: java.lang.Object): boolean + public bridge method removeAt(p0: int): java.lang.Integer + public bridge final method size(): int +} + +@kotlin.Metadata +public abstract class AJALS { + // source: 'abstractListsWithJavaBase.kt' + public method (): void + public bridge final method contains(p0: java.lang.Object): boolean + public bridge method contains(p0: java.lang.String): boolean + public abstract method getSize(): int + public bridge final method indexOf(p0: java.lang.Object): int + public bridge method indexOf(p0: java.lang.String): int + public bridge final method lastIndexOf(p0: java.lang.Object): int + public bridge method lastIndexOf(p0: java.lang.String): int + public bridge final method remove(p0: int): java.lang.String + public bridge final method remove(p0: java.lang.Object): boolean + public bridge method remove(p0: java.lang.String): boolean + public bridge method removeAt(p0: int): java.lang.String + public bridge final method size(): int +} + +@kotlin.Metadata +public abstract class AJALSN { + // source: 'abstractListsWithJavaBase.kt' + public method (): void + public bridge final method contains(p0: java.lang.Object): boolean + public bridge method contains(p0: java.lang.String): boolean + public abstract method getSize(): int + public bridge final method indexOf(p0: java.lang.Object): int + public bridge method indexOf(p0: java.lang.String): int + public bridge final method lastIndexOf(p0: java.lang.Object): int + public bridge method lastIndexOf(p0: java.lang.String): int + public bridge final method remove(p0: int): java.lang.String + public bridge final method remove(p0: java.lang.Object): boolean + public bridge method remove(p0: java.lang.String): boolean + public bridge method removeAt(p0: int): java.lang.String + public bridge final method size(): int +} + +@kotlin.Metadata +public abstract class AJALT { + // source: 'abstractListsWithJavaBase.kt' + public method (): void + public abstract method getSize(): int + public bridge final method remove(p0: int): java.lang.Object + public bridge method removeAt(p0: int): java.lang.Object + public bridge final method size(): int +} diff --git a/compiler/testData/codegen/bytecodeListing/specialBridges/abstractListsWithJavaBase_ir.txt b/compiler/testData/codegen/bytecodeListing/specialBridges/abstractListsWithJavaBase_ir.txt new file mode 100644 index 00000000000..b4bf1608789 --- /dev/null +++ b/compiler/testData/codegen/bytecodeListing/specialBridges/abstractListsWithJavaBase_ir.txt @@ -0,0 +1,105 @@ +@kotlin.Metadata +public abstract class AJALA { + // source: 'abstractListsWithJavaBase.kt' + public method (): void + public abstract method getSize(): int + public bridge final method remove(p0: int): java.lang.Object + public bridge method removeAt(p0: int): java.lang.Object + public bridge final method size(): int +} + +@kotlin.Metadata +public abstract class AJALAN { + // source: 'abstractListsWithJavaBase.kt' + public method (): void + public abstract method getSize(): int + public bridge final method remove(p0: int): java.lang.Object + public bridge method removeAt(p0: int): java.lang.Object + public bridge final method size(): int +} + +@kotlin.Metadata +public abstract class AJALI { + // source: 'abstractListsWithJavaBase.kt' + public method (): void + public bridge method contains(p0: java.lang.Integer): boolean + public bridge final method contains(p0: java.lang.Object): boolean + public abstract method getSize(): int + public bridge method indexOf(p0: java.lang.Integer): int + public bridge final method indexOf(p0: java.lang.Object): int + public bridge method lastIndexOf(p0: java.lang.Integer): int + public bridge final method lastIndexOf(p0: java.lang.Object): int + public bridge final method remove(p0: int): java.lang.Integer + public synthetic bridge method remove(p0: int): java.lang.Object + public bridge method remove(p0: java.lang.Integer): boolean + public bridge final method remove(p0: java.lang.Object): boolean + public bridge method removeAt(p0: int): java.lang.Integer + public bridge final method size(): int +} + +@kotlin.Metadata +public abstract class AJALIN { + // source: 'abstractListsWithJavaBase.kt' + public method (): void + public bridge method contains(p0: java.lang.Integer): boolean + public bridge final method contains(p0: java.lang.Object): boolean + public abstract method getSize(): int + public bridge method indexOf(p0: java.lang.Integer): int + public bridge final method indexOf(p0: java.lang.Object): int + public bridge method lastIndexOf(p0: java.lang.Integer): int + public bridge final method lastIndexOf(p0: java.lang.Object): int + public bridge final method remove(p0: int): java.lang.Integer + public synthetic bridge method remove(p0: int): java.lang.Object + public bridge method remove(p0: java.lang.Integer): boolean + public bridge final method remove(p0: java.lang.Object): boolean + public bridge method removeAt(p0: int): java.lang.Integer + public bridge final method size(): int +} + +@kotlin.Metadata +public abstract class AJALS { + // source: 'abstractListsWithJavaBase.kt' + public method (): void + public bridge final method contains(p0: java.lang.Object): boolean + public bridge method contains(p0: java.lang.String): boolean + public abstract method getSize(): int + public bridge final method indexOf(p0: java.lang.Object): int + public bridge method indexOf(p0: java.lang.String): int + public bridge final method lastIndexOf(p0: java.lang.Object): int + public bridge method lastIndexOf(p0: java.lang.String): int + public synthetic bridge method remove(p0: int): java.lang.Object + public bridge final method remove(p0: int): java.lang.String + public bridge final method remove(p0: java.lang.Object): boolean + public bridge method remove(p0: java.lang.String): boolean + public bridge method removeAt(p0: int): java.lang.String + public bridge final method size(): int +} + +@kotlin.Metadata +public abstract class AJALSN { + // source: 'abstractListsWithJavaBase.kt' + public method (): void + public bridge final method contains(p0: java.lang.Object): boolean + public bridge method contains(p0: java.lang.String): boolean + public abstract method getSize(): int + public bridge final method indexOf(p0: java.lang.Object): int + public bridge method indexOf(p0: java.lang.String): int + public bridge final method lastIndexOf(p0: java.lang.Object): int + public bridge method lastIndexOf(p0: java.lang.String): int + public synthetic bridge method remove(p0: int): java.lang.Object + public bridge final method remove(p0: int): java.lang.String + public bridge final method remove(p0: java.lang.Object): boolean + public bridge method remove(p0: java.lang.String): boolean + public bridge method removeAt(p0: int): java.lang.String + public bridge final method size(): int +} + +@kotlin.Metadata +public abstract class AJALT { + // source: 'abstractListsWithJavaBase.kt' + public method (): void + public abstract method getSize(): int + public bridge final method remove(p0: int): java.lang.Object + public bridge method removeAt(p0: int): java.lang.Object + public bridge final method size(): int +} diff --git a/compiler/testData/codegen/bytecodeListing/specialBridges/abstractLists_ir.txt b/compiler/testData/codegen/bytecodeListing/specialBridges/abstractLists_ir.txt new file mode 100644 index 00000000000..f1d6fb4f28b --- /dev/null +++ b/compiler/testData/codegen/bytecodeListing/specialBridges/abstractLists_ir.txt @@ -0,0 +1,200 @@ +@kotlin.Metadata +public abstract class ALA { + // source: 'abstractLists.kt' + public method (): void + public method add(p0: int, p1: java.lang.Object): void + public method add(p0: java.lang.Object): boolean + public method addAll(p0: int, p1: java.util.Collection): boolean + public method addAll(p0: java.util.Collection): boolean + public method clear(): void + public abstract method getSize(): int + public method listIterator(): java.util.ListIterator + public method listIterator(p0: int): java.util.ListIterator + public method remove(p0: int): java.lang.Object + public method remove(p0: java.lang.Object): boolean + public method removeAll(p0: java.util.Collection): boolean + public method retainAll(p0: java.util.Collection): boolean + public method set(p0: int, p1: java.lang.Object): java.lang.Object + public bridge final method size(): int + public method subList(p0: int, p1: int): java.util.List + public method toArray(): java.lang.Object[] + public method toArray(p0: java.lang.Object[]): java.lang.Object[] +} + +@kotlin.Metadata +public abstract class ALAN { + // source: 'abstractLists.kt' + public method (): void + public method add(p0: int, p1: java.lang.Object): void + public method add(p0: java.lang.Object): boolean + public method addAll(p0: int, p1: java.util.Collection): boolean + public method addAll(p0: java.util.Collection): boolean + public method clear(): void + public abstract method getSize(): int + public method listIterator(): java.util.ListIterator + public method listIterator(p0: int): java.util.ListIterator + public method remove(p0: int): java.lang.Object + public method remove(p0: java.lang.Object): boolean + public method removeAll(p0: java.util.Collection): boolean + public method retainAll(p0: java.util.Collection): boolean + public method set(p0: int, p1: java.lang.Object): java.lang.Object + public bridge final method size(): int + public method subList(p0: int, p1: int): java.util.List + public method toArray(): java.lang.Object[] + public method toArray(p0: java.lang.Object[]): java.lang.Object[] +} + +@kotlin.Metadata +public abstract class ALI { + // source: 'abstractLists.kt' + public method (): void + public method add(p0: int): boolean + public method add(p0: int, p1: int): void + public synthetic bridge method add(p0: int, p1: java.lang.Object): void + public synthetic bridge method add(p0: java.lang.Object): boolean + public method addAll(p0: int, p1: java.util.Collection): boolean + public method addAll(p0: java.util.Collection): boolean + public method clear(): void + public abstract method contains(p0: int): boolean + public bridge final method contains(p0: java.lang.Object): boolean + public abstract method getSize(): int + public abstract method indexOf(p0: int): int + public bridge final method indexOf(p0: java.lang.Object): int + public abstract method lastIndexOf(p0: int): int + public bridge final method lastIndexOf(p0: java.lang.Object): int + public method listIterator(): java.util.ListIterator + public method listIterator(p0: int): java.util.ListIterator + public method remove(p0: int): int + public synthetic bridge method remove(p0: int): java.lang.Object + public method remove(p0: java.lang.Object): boolean + public method removeAll(p0: java.util.Collection): boolean + public method retainAll(p0: java.util.Collection): boolean + public method set(p0: int, p1: int): java.lang.Integer + public synthetic bridge method set(p0: int, p1: java.lang.Object): java.lang.Object + public bridge final method size(): int + public method subList(p0: int, p1: int): java.util.List + public method toArray(): java.lang.Object[] + public method toArray(p0: java.lang.Object[]): java.lang.Object[] +} + +@kotlin.Metadata +public abstract class ALIN { + // source: 'abstractLists.kt' + public method (): void + public method add(p0: int, p1: java.lang.Integer): void + public synthetic bridge method add(p0: int, p1: java.lang.Object): void + public method add(p0: java.lang.Integer): boolean + public synthetic bridge method add(p0: java.lang.Object): boolean + public method addAll(p0: int, p1: java.util.Collection): boolean + public method addAll(p0: java.util.Collection): boolean + public method clear(): void + public abstract method contains(p0: java.lang.Integer): boolean + public bridge final method contains(p0: java.lang.Object): boolean + public abstract method getSize(): int + public abstract method indexOf(p0: java.lang.Integer): int + public bridge final method indexOf(p0: java.lang.Object): int + public abstract method lastIndexOf(p0: java.lang.Integer): int + public bridge final method lastIndexOf(p0: java.lang.Object): int + public method listIterator(): java.util.ListIterator + public method listIterator(p0: int): java.util.ListIterator + public method remove(p0: int): java.lang.Integer + public synthetic bridge method remove(p0: int): java.lang.Object + public method remove(p0: java.lang.Object): boolean + public method removeAll(p0: java.util.Collection): boolean + public method retainAll(p0: java.util.Collection): boolean + public method set(p0: int, p1: java.lang.Integer): java.lang.Integer + public synthetic bridge method set(p0: int, p1: java.lang.Object): java.lang.Object + public bridge final method size(): int + public method subList(p0: int, p1: int): java.util.List + public method toArray(): java.lang.Object[] + public method toArray(p0: java.lang.Object[]): java.lang.Object[] +} + +@kotlin.Metadata +public abstract class ALS { + // source: 'abstractLists.kt' + public method (): void + public synthetic bridge method add(p0: int, p1: java.lang.Object): void + public method add(p0: int, p1: java.lang.String): void + public synthetic bridge method add(p0: java.lang.Object): boolean + public method add(p0: java.lang.String): boolean + public method addAll(p0: int, p1: java.util.Collection): boolean + public method addAll(p0: java.util.Collection): boolean + public method clear(): void + public bridge final method contains(p0: java.lang.Object): boolean + public abstract method contains(p0: java.lang.String): boolean + public abstract method getSize(): int + public bridge final method indexOf(p0: java.lang.Object): int + public abstract method indexOf(p0: java.lang.String): int + public bridge final method lastIndexOf(p0: java.lang.Object): int + public abstract method lastIndexOf(p0: java.lang.String): int + public method listIterator(): java.util.ListIterator + public method listIterator(p0: int): java.util.ListIterator + public synthetic bridge method remove(p0: int): java.lang.Object + public method remove(p0: int): java.lang.String + public method remove(p0: java.lang.Object): boolean + public method removeAll(p0: java.util.Collection): boolean + public method retainAll(p0: java.util.Collection): boolean + public synthetic bridge method set(p0: int, p1: java.lang.Object): java.lang.Object + public method set(p0: int, p1: java.lang.String): java.lang.String + public bridge final method size(): int + public method subList(p0: int, p1: int): java.util.List + public method toArray(): java.lang.Object[] + public method toArray(p0: java.lang.Object[]): java.lang.Object[] +} + +@kotlin.Metadata +public abstract class ALSN { + // source: 'abstractLists.kt' + public method (): void + public synthetic bridge method add(p0: int, p1: java.lang.Object): void + public method add(p0: int, p1: java.lang.String): void + public synthetic bridge method add(p0: java.lang.Object): boolean + public method add(p0: java.lang.String): boolean + public method addAll(p0: int, p1: java.util.Collection): boolean + public method addAll(p0: java.util.Collection): boolean + public method clear(): void + public bridge final method contains(p0: java.lang.Object): boolean + public abstract method contains(p0: java.lang.String): boolean + public abstract method getSize(): int + public bridge final method indexOf(p0: java.lang.Object): int + public abstract method indexOf(p0: java.lang.String): int + public bridge final method lastIndexOf(p0: java.lang.Object): int + public abstract method lastIndexOf(p0: java.lang.String): int + public method listIterator(): java.util.ListIterator + public method listIterator(p0: int): java.util.ListIterator + public synthetic bridge method remove(p0: int): java.lang.Object + public method remove(p0: int): java.lang.String + public method remove(p0: java.lang.Object): boolean + public method removeAll(p0: java.util.Collection): boolean + public method retainAll(p0: java.util.Collection): boolean + public synthetic bridge method set(p0: int, p1: java.lang.Object): java.lang.Object + public method set(p0: int, p1: java.lang.String): java.lang.String + public bridge final method size(): int + public method subList(p0: int, p1: int): java.util.List + public method toArray(): java.lang.Object[] + public method toArray(p0: java.lang.Object[]): java.lang.Object[] +} + +@kotlin.Metadata +public abstract class ALT { + // source: 'abstractLists.kt' + public method (): void + public method add(p0: int, p1: java.lang.Object): void + public method add(p0: java.lang.Object): boolean + public method addAll(p0: int, p1: java.util.Collection): boolean + public method addAll(p0: java.util.Collection): boolean + public method clear(): void + public abstract method getSize(): int + public method listIterator(): java.util.ListIterator + public method listIterator(p0: int): java.util.ListIterator + public method remove(p0: int): java.lang.Object + public method remove(p0: java.lang.Object): boolean + public method removeAll(p0: java.util.Collection): boolean + public method retainAll(p0: java.util.Collection): boolean + public method set(p0: int, p1: java.lang.Object): java.lang.Object + public bridge final method size(): int + public method subList(p0: int, p1: int): java.util.List + public method toArray(): java.lang.Object[] + public method toArray(p0: java.lang.Object[]): java.lang.Object[] +} diff --git a/compiler/testData/codegen/bytecodeListing/specialBridges/abstractMutableLists.kt b/compiler/testData/codegen/bytecodeListing/specialBridges/abstractMutableLists.kt new file mode 100644 index 00000000000..db857bf9357 --- /dev/null +++ b/compiler/testData/codegen/bytecodeListing/specialBridges/abstractMutableLists.kt @@ -0,0 +1,13 @@ +abstract class AMLA : MutableList + +abstract class AMLAN : MutableList + +abstract class AMLT : MutableList + +abstract class AMLI : MutableList + +abstract class AMLIN : MutableList + +abstract class AMLS : MutableList + +abstract class AMLSN : MutableList \ No newline at end of file diff --git a/compiler/testData/codegen/bytecodeListing/specialBridges/abstractMutableLists.txt b/compiler/testData/codegen/bytecodeListing/specialBridges/abstractMutableLists.txt new file mode 100644 index 00000000000..482b9416bfd --- /dev/null +++ b/compiler/testData/codegen/bytecodeListing/specialBridges/abstractMutableLists.txt @@ -0,0 +1,131 @@ +@kotlin.Metadata +public abstract class AMLA { + // source: 'abstractMutableLists.kt' + public method (): void + public abstract method contains(p0: java.lang.Object): boolean + public abstract method getSize(): int + public abstract method indexOf(p0: java.lang.Object): int + public abstract method lastIndexOf(p0: java.lang.Object): int + public bridge final method remove(p0: int): java.lang.Object + public abstract method remove(p0: java.lang.Object): boolean + public abstract method removeAt(p0: int): java.lang.Object + public bridge final method size(): int + public method toArray(): java.lang.Object[] + public method toArray(p0: java.lang.Object[]): java.lang.Object[] +} + +@kotlin.Metadata +public abstract class AMLAN { + // source: 'abstractMutableLists.kt' + public method (): void + public abstract method contains(p0: java.lang.Object): boolean + public abstract method getSize(): int + public abstract method indexOf(p0: java.lang.Object): int + public abstract method lastIndexOf(p0: java.lang.Object): int + public bridge final method remove(p0: int): java.lang.Object + public abstract method remove(p0: java.lang.Object): boolean + public abstract method removeAt(p0: int): java.lang.Object + public bridge final method size(): int + public method toArray(): java.lang.Object[] + public method toArray(p0: java.lang.Object[]): java.lang.Object[] +} + +@kotlin.Metadata +public abstract class AMLI { + // source: 'abstractMutableLists.kt' + public method (): void + public abstract method contains(p0: int): boolean + public bridge final method contains(p0: java.lang.Object): boolean + public abstract method getSize(): int + public abstract method indexOf(p0: int): int + public bridge final method indexOf(p0: java.lang.Object): int + public abstract method lastIndexOf(p0: int): int + public bridge final method lastIndexOf(p0: java.lang.Object): int + public bridge final method remove(p0: int): int + public synthetic bridge method remove(p0: int): java.lang.Object + public abstract method remove(p0: java.lang.Integer): boolean + public bridge final method remove(p0: java.lang.Object): boolean + public abstract method removeAt(p0: int): java.lang.Integer + public bridge final method size(): int + public method toArray(): java.lang.Object[] + public method toArray(p0: java.lang.Object[]): java.lang.Object[] +} + +@kotlin.Metadata +public abstract class AMLIN { + // source: 'abstractMutableLists.kt' + public method (): void + public abstract method contains(p0: java.lang.Integer): boolean + public bridge final method contains(p0: java.lang.Object): boolean + public abstract method getSize(): int + public abstract method indexOf(p0: java.lang.Integer): int + public bridge final method indexOf(p0: java.lang.Object): int + public abstract method lastIndexOf(p0: java.lang.Integer): int + public bridge final method lastIndexOf(p0: java.lang.Object): int + public bridge final method remove(p0: int): java.lang.Integer + public synthetic bridge method remove(p0: int): java.lang.Object + public abstract method remove(p0: java.lang.Integer): boolean + public bridge final method remove(p0: java.lang.Object): boolean + public abstract method removeAt(p0: int): java.lang.Integer + public bridge final method size(): int + public method toArray(): java.lang.Object[] + public method toArray(p0: java.lang.Object[]): java.lang.Object[] +} + +@kotlin.Metadata +public abstract class AMLS { + // source: 'abstractMutableLists.kt' + public method (): void + public bridge final method contains(p0: java.lang.Object): boolean + public abstract method contains(p0: java.lang.String): boolean + public abstract method getSize(): int + public bridge final method indexOf(p0: java.lang.Object): int + public abstract method indexOf(p0: java.lang.String): int + public bridge final method lastIndexOf(p0: java.lang.Object): int + public abstract method lastIndexOf(p0: java.lang.String): int + public synthetic bridge method remove(p0: int): java.lang.Object + public bridge final method remove(p0: int): java.lang.String + public bridge final method remove(p0: java.lang.Object): boolean + public abstract method remove(p0: java.lang.String): boolean + public abstract method removeAt(p0: int): java.lang.String + public bridge final method size(): int + public method toArray(): java.lang.Object[] + public method toArray(p0: java.lang.Object[]): java.lang.Object[] +} + +@kotlin.Metadata +public abstract class AMLSN { + // source: 'abstractMutableLists.kt' + public method (): void + public bridge final method contains(p0: java.lang.Object): boolean + public abstract method contains(p0: java.lang.String): boolean + public abstract method getSize(): int + public bridge final method indexOf(p0: java.lang.Object): int + public abstract method indexOf(p0: java.lang.String): int + public bridge final method lastIndexOf(p0: java.lang.Object): int + public abstract method lastIndexOf(p0: java.lang.String): int + public synthetic bridge method remove(p0: int): java.lang.Object + public bridge final method remove(p0: int): java.lang.String + public bridge final method remove(p0: java.lang.Object): boolean + public abstract method remove(p0: java.lang.String): boolean + public abstract method removeAt(p0: int): java.lang.String + public bridge final method size(): int + public method toArray(): java.lang.Object[] + public method toArray(p0: java.lang.Object[]): java.lang.Object[] +} + +@kotlin.Metadata +public abstract class AMLT { + // source: 'abstractMutableLists.kt' + public method (): void + public abstract method contains(p0: java.lang.Object): boolean + public abstract method getSize(): int + public abstract method indexOf(p0: java.lang.Object): int + public abstract method lastIndexOf(p0: java.lang.Object): int + public bridge final method remove(p0: int): java.lang.Object + public abstract method remove(p0: java.lang.Object): boolean + public abstract method removeAt(p0: int): java.lang.Object + public bridge final method size(): int + public method toArray(): java.lang.Object[] + public method toArray(p0: java.lang.Object[]): java.lang.Object[] +} diff --git a/compiler/testData/codegen/bytecodeListing/specialBridges/abstractMutableLists_ir.txt b/compiler/testData/codegen/bytecodeListing/specialBridges/abstractMutableLists_ir.txt new file mode 100644 index 00000000000..200e14b601c --- /dev/null +++ b/compiler/testData/codegen/bytecodeListing/specialBridges/abstractMutableLists_ir.txt @@ -0,0 +1,119 @@ +@kotlin.Metadata +public abstract class AMLA { + // source: 'abstractMutableLists.kt' + public method (): void + public abstract method getSize(): int + public bridge final method remove(p0: int): java.lang.Object + public abstract method removeAt(p0: int): java.lang.Object + public bridge final method size(): int + public method toArray(): java.lang.Object[] + public method toArray(p0: java.lang.Object[]): java.lang.Object[] +} + +@kotlin.Metadata +public abstract class AMLAN { + // source: 'abstractMutableLists.kt' + public method (): void + public abstract method getSize(): int + public bridge final method remove(p0: int): java.lang.Object + public abstract method removeAt(p0: int): java.lang.Object + public bridge final method size(): int + public method toArray(): java.lang.Object[] + public method toArray(p0: java.lang.Object[]): java.lang.Object[] +} + +@kotlin.Metadata +public abstract class AMLI { + // source: 'abstractMutableLists.kt' + public method (): void + public abstract method contains(p0: int): boolean + public bridge final method contains(p0: java.lang.Object): boolean + public abstract method getSize(): int + public abstract method indexOf(p0: int): int + public bridge final method indexOf(p0: java.lang.Object): int + public abstract method lastIndexOf(p0: int): int + public bridge final method lastIndexOf(p0: java.lang.Object): int + public bridge final method remove(p0: int): java.lang.Integer + public synthetic bridge method remove(p0: int): java.lang.Object + public abstract method remove(p0: java.lang.Integer): boolean + public bridge final method remove(p0: java.lang.Object): boolean + public abstract method removeAt(p0: int): int + public bridge final method size(): int + public method toArray(): java.lang.Object[] + public method toArray(p0: java.lang.Object[]): java.lang.Object[] +} + +@kotlin.Metadata +public abstract class AMLIN { + // source: 'abstractMutableLists.kt' + public method (): void + public abstract method contains(p0: java.lang.Integer): boolean + public bridge final method contains(p0: java.lang.Object): boolean + public abstract method getSize(): int + public abstract method indexOf(p0: java.lang.Integer): int + public bridge final method indexOf(p0: java.lang.Object): int + public abstract method lastIndexOf(p0: java.lang.Integer): int + public bridge final method lastIndexOf(p0: java.lang.Object): int + public bridge final method remove(p0: int): java.lang.Integer + public synthetic bridge method remove(p0: int): java.lang.Object + public abstract method remove(p0: java.lang.Integer): boolean + public bridge final method remove(p0: java.lang.Object): boolean + public abstract method removeAt(p0: int): java.lang.Integer + public bridge final method size(): int + public method toArray(): java.lang.Object[] + public method toArray(p0: java.lang.Object[]): java.lang.Object[] +} + +@kotlin.Metadata +public abstract class AMLS { + // source: 'abstractMutableLists.kt' + public method (): void + public bridge final method contains(p0: java.lang.Object): boolean + public abstract method contains(p0: java.lang.String): boolean + public abstract method getSize(): int + public bridge final method indexOf(p0: java.lang.Object): int + public abstract method indexOf(p0: java.lang.String): int + public bridge final method lastIndexOf(p0: java.lang.Object): int + public abstract method lastIndexOf(p0: java.lang.String): int + public synthetic bridge method remove(p0: int): java.lang.Object + public bridge final method remove(p0: int): java.lang.String + public bridge final method remove(p0: java.lang.Object): boolean + public abstract method remove(p0: java.lang.String): boolean + public abstract method removeAt(p0: int): java.lang.String + public bridge final method size(): int + public method toArray(): java.lang.Object[] + public method toArray(p0: java.lang.Object[]): java.lang.Object[] +} + +@kotlin.Metadata +public abstract class AMLSN { + // source: 'abstractMutableLists.kt' + public method (): void + public bridge final method contains(p0: java.lang.Object): boolean + public abstract method contains(p0: java.lang.String): boolean + public abstract method getSize(): int + public bridge final method indexOf(p0: java.lang.Object): int + public abstract method indexOf(p0: java.lang.String): int + public bridge final method lastIndexOf(p0: java.lang.Object): int + public abstract method lastIndexOf(p0: java.lang.String): int + public synthetic bridge method remove(p0: int): java.lang.Object + public bridge final method remove(p0: int): java.lang.String + public bridge final method remove(p0: java.lang.Object): boolean + public abstract method remove(p0: java.lang.String): boolean + public abstract method removeAt(p0: int): java.lang.String + public bridge final method size(): int + public method toArray(): java.lang.Object[] + public method toArray(p0: java.lang.Object[]): java.lang.Object[] +} + +@kotlin.Metadata +public abstract class AMLT { + // source: 'abstractMutableLists.kt' + public method (): void + public abstract method getSize(): int + public bridge final method remove(p0: int): java.lang.Object + public abstract method removeAt(p0: int): java.lang.Object + public bridge final method size(): int + public method toArray(): java.lang.Object[] + public method toArray(p0: java.lang.Object[]): java.lang.Object[] +} diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/BlackBoxCodegenTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/codegen/BlackBoxCodegenTestGenerated.java index 32fd7f22933..4d14636ae71 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/BlackBoxCodegenTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/BlackBoxCodegenTestGenerated.java @@ -5033,6 +5033,11 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest { runTest("compiler/testData/codegen/box/collections/readOnlyMap.kt"); } + @TestMetadata("removeAtBridgeClashWithJava.kt") + public void testRemoveAtBridgeClashWithJava() throws Exception { + runTest("compiler/testData/codegen/box/collections/removeAtBridgeClashWithJava.kt"); + } + @TestMetadata("removeAtInt.kt") public void testRemoveAtInt() throws Exception { runTest("compiler/testData/codegen/box/collections/removeAtInt.kt"); diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/BytecodeListingTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/codegen/BytecodeListingTestGenerated.java index 193d2dcc923..73e763cfc2e 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/BytecodeListingTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/BytecodeListingTestGenerated.java @@ -794,6 +794,21 @@ public class BytecodeListingTestGenerated extends AbstractBytecodeListingTest { KotlinTestUtils.runTest(this::doTest, this, testDataFilePath); } + @TestMetadata("abstractLists.kt") + public void testAbstractLists() throws Exception { + runTest("compiler/testData/codegen/bytecodeListing/specialBridges/abstractLists.kt"); + } + + @TestMetadata("abstractListsWithJavaBase.kt") + public void testAbstractListsWithJavaBase() throws Exception { + runTest("compiler/testData/codegen/bytecodeListing/specialBridges/abstractListsWithJavaBase.kt"); + } + + @TestMetadata("abstractMutableLists.kt") + public void testAbstractMutableLists() throws Exception { + runTest("compiler/testData/codegen/bytecodeListing/specialBridges/abstractMutableLists.kt"); + } + public void testAllFilesPresentInSpecialBridges() throws Exception { KotlinTestUtils.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/testData/codegen/bytecodeListing/specialBridges"), Pattern.compile("^(.+)\\.kt$"), null, true); } diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java index b25e36f18f0..0dc14089e56 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java @@ -5033,6 +5033,11 @@ public class LightAnalysisModeTestGenerated extends AbstractLightAnalysisModeTes runTest("compiler/testData/codegen/box/collections/readOnlyMap.kt"); } + @TestMetadata("removeAtBridgeClashWithJava.kt") + public void testRemoveAtBridgeClashWithJava() throws Exception { + runTest("compiler/testData/codegen/box/collections/removeAtBridgeClashWithJava.kt"); + } + @TestMetadata("removeAtInt.kt") public void testRemoveAtInt() throws Exception { runTest("compiler/testData/codegen/box/collections/removeAtInt.kt"); diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/ir/IrBlackBoxCodegenTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/codegen/ir/IrBlackBoxCodegenTestGenerated.java index 732fddfe1fc..7338e0f5739 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/ir/IrBlackBoxCodegenTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/ir/IrBlackBoxCodegenTestGenerated.java @@ -5003,6 +5003,11 @@ public class IrBlackBoxCodegenTestGenerated extends AbstractIrBlackBoxCodegenTes runTest("compiler/testData/codegen/box/collections/readOnlyMap.kt"); } + @TestMetadata("removeAtBridgeClashWithJava.kt") + public void testRemoveAtBridgeClashWithJava() throws Exception { + runTest("compiler/testData/codegen/box/collections/removeAtBridgeClashWithJava.kt"); + } + @TestMetadata("removeAtInt.kt") public void testRemoveAtInt() throws Exception { runTest("compiler/testData/codegen/box/collections/removeAtInt.kt"); diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/ir/IrBytecodeListingTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/codegen/ir/IrBytecodeListingTestGenerated.java index 093a1170e5c..a0646296fd7 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/ir/IrBytecodeListingTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/ir/IrBytecodeListingTestGenerated.java @@ -764,6 +764,21 @@ public class IrBytecodeListingTestGenerated extends AbstractIrBytecodeListingTes KotlinTestUtils.runTest(this::doTest, TargetBackend.JVM_IR, testDataFilePath); } + @TestMetadata("abstractLists.kt") + public void testAbstractLists() throws Exception { + runTest("compiler/testData/codegen/bytecodeListing/specialBridges/abstractLists.kt"); + } + + @TestMetadata("abstractListsWithJavaBase.kt") + public void testAbstractListsWithJavaBase() throws Exception { + runTest("compiler/testData/codegen/bytecodeListing/specialBridges/abstractListsWithJavaBase.kt"); + } + + @TestMetadata("abstractMutableLists.kt") + public void testAbstractMutableLists() throws Exception { + runTest("compiler/testData/codegen/bytecodeListing/specialBridges/abstractMutableLists.kt"); + } + public void testAllFilesPresentInSpecialBridges() throws Exception { KotlinTestUtils.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/testData/codegen/bytecodeListing/specialBridges"), Pattern.compile("^(.+)\\.kt$"), null, TargetBackend.JVM_IR, true); }