JVM_IR KT-44798 don't generate multiple stubs with same signature
This commit is contained in:
+4
-1
@@ -313,7 +313,10 @@ internal class CollectionStubMethodLowering(val context: JvmBackendContext) : Cl
|
||||
.flatMap { createStubFuns(irClass, it) }
|
||||
.mapTo(HashSet()) { it.toJvmSignature() }
|
||||
|
||||
return classStubFuns.filter { it.toJvmSignature() !in superClassStubSignatures }
|
||||
return classStubFuns
|
||||
.filter { it.toJvmSignature() !in superClassStubSignatures }
|
||||
.associateBy { it.toJvmSignature() }
|
||||
.values.toList()
|
||||
}
|
||||
|
||||
private fun createStubFuns(irClass: IrClass, stubs: StubsForCollectionClass): List<IrSimpleFunction> {
|
||||
|
||||
@@ -0,0 +1,19 @@
|
||||
// WITH_RUNTIME
|
||||
// FULL_JDK
|
||||
|
||||
import java.util.*
|
||||
|
||||
class ListSet<out E : Any> : List<E>, Set<E> {
|
||||
override val size: Int get() = TODO()
|
||||
override fun isEmpty(): Boolean = TODO()
|
||||
override fun get(index: Int): E = TODO()
|
||||
override fun contains(element: @UnsafeVariance E): Boolean = TODO()
|
||||
override fun containsAll(elements: Collection<@UnsafeVariance E>): Boolean = TODO()
|
||||
override fun indexOf(element: @UnsafeVariance E): Int = TODO()
|
||||
override fun lastIndexOf(element: @UnsafeVariance E): Int = TODO()
|
||||
override fun iterator(): Iterator<E> = TODO()
|
||||
override fun listIterator(): ListIterator<E> = TODO()
|
||||
override fun listIterator(index: Int): ListIterator<E> = TODO()
|
||||
override fun spliterator(): Spliterator<@UnsafeVariance E> = TODO()
|
||||
override fun subList(fromIndex: Int, toIndex: Int): List<E> = TODO()
|
||||
}
|
||||
@@ -0,0 +1,32 @@
|
||||
@kotlin.Metadata
|
||||
public final class ListSet {
|
||||
// source: 'ListAndSet.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 method contains(@org.jetbrains.annotations.NotNull p0: java.lang.Object): boolean
|
||||
public method containsAll(@org.jetbrains.annotations.NotNull p0: java.util.Collection): boolean
|
||||
public @org.jetbrains.annotations.NotNull method get(p0: int): java.lang.Object
|
||||
public method getSize(): int
|
||||
public method indexOf(@org.jetbrains.annotations.NotNull p0: java.lang.Object): int
|
||||
public method isEmpty(): boolean
|
||||
public @org.jetbrains.annotations.NotNull method iterator(): java.util.Iterator
|
||||
public method lastIndexOf(@org.jetbrains.annotations.NotNull p0: java.lang.Object): int
|
||||
public @org.jetbrains.annotations.NotNull method listIterator(): java.util.ListIterator
|
||||
public @org.jetbrains.annotations.NotNull 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 replaceAll(p0: java.util.function.UnaryOperator): void
|
||||
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 sort(p0: java.util.Comparator): void
|
||||
public @org.jetbrains.annotations.NotNull method spliterator(): java.util.Spliterator
|
||||
public @org.jetbrains.annotations.NotNull 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,32 @@
|
||||
@kotlin.Metadata
|
||||
public final class ListSet {
|
||||
// source: 'ListAndSet.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 method contains(@org.jetbrains.annotations.Nullable p0: java.lang.Object): boolean
|
||||
public method containsAll(@org.jetbrains.annotations.NotNull p0: java.util.Collection): boolean
|
||||
public @org.jetbrains.annotations.NotNull method get(p0: int): java.lang.Object
|
||||
public method getSize(): int
|
||||
public method indexOf(@org.jetbrains.annotations.Nullable p0: java.lang.Object): int
|
||||
public method isEmpty(): boolean
|
||||
public @org.jetbrains.annotations.NotNull method iterator(): java.util.Iterator
|
||||
public method lastIndexOf(@org.jetbrains.annotations.Nullable p0: java.lang.Object): int
|
||||
public @org.jetbrains.annotations.NotNull method listIterator(): java.util.ListIterator
|
||||
public @org.jetbrains.annotations.NotNull 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 replaceAll(p0: java.util.function.UnaryOperator): void
|
||||
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 sort(p0: java.util.Comparator): void
|
||||
public @org.jetbrains.annotations.NotNull method spliterator(): java.util.Spliterator
|
||||
public @org.jetbrains.annotations.NotNull 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[]
|
||||
}
|
||||
+5
@@ -440,6 +440,11 @@ public class BytecodeListingTestGenerated extends AbstractBytecodeListingTest {
|
||||
runTest("compiler/testData/codegen/bytecodeListing/collectionStubs/kt44233.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("ListAndSet.kt")
|
||||
public void testListAndSet() throws Exception {
|
||||
runTest("compiler/testData/codegen/bytecodeListing/collectionStubs/ListAndSet.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("mapOfPrimitivesFullJdk.kt")
|
||||
public void testMapOfPrimitivesFullJdk() throws Exception {
|
||||
runTest("compiler/testData/codegen/bytecodeListing/collectionStubs/mapOfPrimitivesFullJdk.kt");
|
||||
|
||||
+5
@@ -440,6 +440,11 @@ public class IrBytecodeListingTestGenerated extends AbstractIrBytecodeListingTes
|
||||
runTest("compiler/testData/codegen/bytecodeListing/collectionStubs/kt44233.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("ListAndSet.kt")
|
||||
public void testListAndSet() throws Exception {
|
||||
runTest("compiler/testData/codegen/bytecodeListing/collectionStubs/ListAndSet.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("mapOfPrimitivesFullJdk.kt")
|
||||
public void testMapOfPrimitivesFullJdk() throws Exception {
|
||||
runTest("compiler/testData/codegen/bytecodeListing/collectionStubs/mapOfPrimitivesFullJdk.kt");
|
||||
|
||||
Reference in New Issue
Block a user