JVM_IR KT-40304 KT-41998 special handling for 'removeAt'

This commit is contained in:
Dmitry Petrov
2020-09-17 18:32:07 +03:00
parent 9008944860
commit ee3ada4e55
17 changed files with 1081 additions and 11 deletions
@@ -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");
@@ -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<E>#remove(E): Boolean
// kotlin.collections.MutableMap<K, V>#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<E>#remove(Object): boolean
// java.util.Map<K, V>#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<E>#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<E>#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<IrTypeParameterSymbol, IrType>
function: IrSimpleFunction,
irClass: IrClass,
substitutionMap: Map<IrTypeParameterSymbol, IrType>
): 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
@@ -0,0 +1,48 @@
// TARGET_BACKEND: JVM
// IGNORE_BACKEND_FIR: JVM_IR
// WITH_RUNTIME
// FILE: removeAtBridgeClashWithJava.kt
abstract class AJALI : JavaAbstractList<Int>()
class K : AJALI() {
override val size: Int get() = TODO()
override fun contains(element: Int?): Boolean = TODO()
override fun containsAll(elements: Collection<Int>): 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<Int> = 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<Int>): Boolean = TODO()
override fun addAll(elements: Collection<Int>): Boolean = TODO()
override fun clear(): Unit = TODO()
override fun listIterator(): MutableListIterator<Int> = TODO()
override fun listIterator(index: Int): MutableListIterator<Int> = TODO()
override fun remove(element: Int?): Boolean = TODO()
override fun removeAll(elements: Collection<Int>): Boolean = TODO()
override fun retainAll(elements: Collection<Int>): Boolean = TODO()
override fun set(index: Int, element: Int?): Int = TODO()
override fun subList(fromIndex: Int, toIndex: Int): MutableList<Int> = TODO()
}
fun box(): String {
K().removeAt(32)
return JavaAbstractList.OK
}
// FILE: JavaAbstractList.java
import java.util.List;
public abstract class JavaAbstractList<T> implements List<T> {
public static String OK = "";
@Override
public final T remove(int index) {
OK = "OK";
return null;
}
}
@@ -0,0 +1,13 @@
abstract class ALA : List<Any>
abstract class ALAN : List<Any?>
abstract class ALT<T> : List<T>
abstract class ALI : List<Int>
abstract class ALIN : List<Int?>
abstract class ALS : List<String>
abstract class ALSN : List<String?>
@@ -0,0 +1,209 @@
@kotlin.Metadata
public abstract class ALA {
// source: 'abstractLists.kt'
public method <init>(): 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 <init>(): 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 <init>(): 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 <init>(): 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 <init>(): 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 <init>(): 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 <init>(): 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[]
}
@@ -0,0 +1,13 @@
abstract class AJALA : java.util.AbstractList<Any>()
abstract class AJALAN : java.util.AbstractList<Any?>()
abstract class AJALT<T> : java.util.AbstractList<T>()
abstract class AJALI : java.util.AbstractList<Int>()
abstract class AJALIN : java.util.AbstractList<Int?>()
abstract class AJALS : java.util.AbstractList<String>()
abstract class AJALSN : java.util.AbstractList<String?>()
@@ -0,0 +1,101 @@
@kotlin.Metadata
public abstract class AJALA {
// source: 'abstractListsWithJavaBase.kt'
public method <init>(): 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 <init>(): 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 <init>(): 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 <init>(): 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 <init>(): 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 <init>(): 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 <init>(): 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
}
@@ -0,0 +1,105 @@
@kotlin.Metadata
public abstract class AJALA {
// source: 'abstractListsWithJavaBase.kt'
public method <init>(): 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 <init>(): 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 <init>(): 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 <init>(): 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 <init>(): 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 <init>(): 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 <init>(): 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
}
@@ -0,0 +1,200 @@
@kotlin.Metadata
public abstract class ALA {
// source: 'abstractLists.kt'
public method <init>(): 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 <init>(): 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 <init>(): 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 <init>(): 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 <init>(): 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 <init>(): 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 <init>(): 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[]
}
@@ -0,0 +1,13 @@
abstract class AMLA : MutableList<Any>
abstract class AMLAN : MutableList<Any?>
abstract class AMLT<T> : MutableList<T>
abstract class AMLI : MutableList<Int>
abstract class AMLIN : MutableList<Int?>
abstract class AMLS : MutableList<String>
abstract class AMLSN : MutableList<String?>
@@ -0,0 +1,131 @@
@kotlin.Metadata
public abstract class AMLA {
// source: 'abstractMutableLists.kt'
public method <init>(): 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 <init>(): 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 <init>(): 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 <init>(): 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 <init>(): 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 <init>(): 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 <init>(): 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[]
}
@@ -0,0 +1,119 @@
@kotlin.Metadata
public abstract class AMLA {
// source: 'abstractMutableLists.kt'
public method <init>(): 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 <init>(): 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 <init>(): 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 <init>(): 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 <init>(): 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 <init>(): 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 <init>(): 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[]
}
@@ -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");
@@ -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);
}
@@ -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");
@@ -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");
@@ -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);
}