JVM_IR fix 'remove' in inline class implementing MutableCollection

This commit is contained in:
Dmitry Petrov
2020-10-15 16:43:48 +03:00
parent 95edcea9a9
commit ee5edf4caa
31 changed files with 738 additions and 25 deletions
@@ -68,6 +68,7 @@ public final class InlineMap {
public synthetic bridge method put(p0: java.lang.Object, p1: java.lang.Object): java.lang.Object
public method put-pjrbk2k(p0: int, p1: double): IV
public method putAll(p0: java.util.Map): void
public bridge final method remove(p0: java.lang.Object): IV
public synthetic bridge method remove(p0: java.lang.Object): java.lang.Object
public method remove-i7hxwoc(p0: java.lang.Object): IV
public synthetic bridge method size(): int
@@ -1,6 +1,4 @@
// IGNORE_ANNOTATIONS
// IGNORE_BACKEND: JVM_IR
// ^ TODO: special bridges <-> inline classes interaction
inline class IT(val x: Int)
@@ -0,0 +1,60 @@
public final class IT {
// source: 'mutableCollection.kt'
private final field x: int
private synthetic method <init>(p0: int): void
public synthetic final static method box-impl(p0: int): IT
public static method constructor-impl(p0: int): int
public method equals(p0: java.lang.Object): boolean
public static method equals-impl(p0: int, p1: java.lang.Object): boolean
public final static method equals-impl0(p0: int, p1: int): boolean
public final method getX(): int
public method hashCode(): int
public static method hashCode-impl(p0: int): int
public method toString(): java.lang.String
public static method toString-impl(p0: int): java.lang.String
public synthetic final method unbox-impl(): int
}
public final class InlineMutableCollection {
// source: 'mutableCollection.kt'
private final field mc: java.util.Collection
private synthetic method <init>(p0: java.util.Collection): void
public synthetic bridge method add(p0: java.lang.Object): boolean
public method add-jHY5zpA(p0: int): boolean
public static method add-jHY5zpA(p0: java.util.Collection, p1: int): boolean
public method addAll(p0: java.util.Collection): boolean
public static method addAll-impl(p0: java.util.Collection, p1: java.util.Collection): boolean
public synthetic final static method box-impl(p0: java.util.Collection): InlineMutableCollection
public method clear(): void
public static method clear-impl(p0: java.util.Collection): void
public static method constructor-impl(p0: java.util.Collection): java.util.Collection
public synthetic bridge method contains(p0: java.lang.Object): boolean
public method contains-jHY5zpA(p0: int): boolean
public static method contains-jHY5zpA(p0: java.util.Collection, p1: int): boolean
public method containsAll(p0: java.util.Collection): boolean
public static method containsAll-impl(p0: java.util.Collection, p1: java.util.Collection): boolean
public method equals(p0: java.lang.Object): boolean
public static method equals-impl(p0: java.util.Collection, p1: java.lang.Object): boolean
public final static method equals-impl0(p0: java.util.Collection, p1: java.util.Collection): boolean
public method getSize(): int
public static method getSize-impl(p0: java.util.Collection): int
public method hashCode(): int
public static method hashCode-impl(p0: java.util.Collection): int
public method isEmpty(): boolean
public static method isEmpty-impl(p0: java.util.Collection): boolean
public method iterator(): java.util.Iterator
public static method iterator-impl(p0: java.util.Collection): java.util.Iterator
public bridge final method remove(p0: java.lang.Object): boolean
public method remove-jHY5zpA(p0: IT): boolean
public static method remove-jHY5zpA(p0: java.util.Collection, p1: IT): boolean
public method removeAll(p0: java.util.Collection): boolean
public static method removeAll-impl(p0: java.util.Collection, p1: java.util.Collection): boolean
public method retainAll(p0: java.util.Collection): boolean
public static method retainAll-impl(p0: java.util.Collection, p1: java.util.Collection): boolean
public synthetic bridge method size(): int
public method toArray(): java.lang.Object[]
public method toArray(p0: java.lang.Object[]): java.lang.Object[]
public method toString(): java.lang.String
public static method toString-impl(p0: java.util.Collection): java.lang.String
public synthetic final method unbox-impl(): java.util.Collection
}
@@ -64,7 +64,7 @@ public final class InlineMutableList {
public static method listIterator-impl(p0: java.util.List, p1: int): java.util.ListIterator
public synthetic bridge method remove(p0: int): java.lang.Object
public bridge final method remove(p0: int): long
public synthetic bridge method remove(p0: java.lang.Object): boolean
public bridge final method remove(p0: java.lang.Object): boolean
public static method remove-jHY5zpA(p0: java.util.List, p1: long): boolean
public method remove-jHY5zpA(p0: long): boolean
public method removeAll(p0: java.util.Collection): boolean
@@ -71,6 +71,7 @@ public final class InlineMutableMap {
public static method put-pjrbk2k(p0: java.util.Map, p1: int, p2: double): IV
public method putAll(p0: java.util.Map): void
public static method putAll-impl(p0: java.util.Map, p1: java.util.Map): void
public bridge final method remove(p0: java.lang.Object): IV
public synthetic bridge method remove(p0: java.lang.Object): java.lang.Object
public method remove-FSIWiWE(p0: int): IV
public static method remove-FSIWiWE(p0: java.util.Map, p1: int): IV
@@ -1,6 +1,4 @@
// IGNORE_ANNOTATIONS
// IGNORE_BACKEND: JVM_IR
// ^ TODO: special bridges <-> inline classes interaction
inline class IT(val x: Int)
@@ -0,0 +1,19 @@
// IGNORE_ANNOTATIONS
inline class IT(val x: Int)
inline class IT2(val x: IT)
inline class InlineMutableSet2(private val ms: MutableSet<IT2>) : MutableSet<IT2> {
override val size: Int get() = ms.size
override fun contains(element: IT2): Boolean = ms.contains(element)
override fun containsAll(elements: Collection<IT2>): Boolean = ms.containsAll(elements)
override fun isEmpty(): Boolean = ms.isEmpty()
override fun add(element: IT2): Boolean = ms.add(element)
override fun addAll(elements: Collection<IT2>): Boolean = ms.addAll(elements)
override fun clear() { ms.clear() }
override fun iterator(): MutableIterator<IT2> = ms.iterator()
override fun remove(element: IT2): Boolean = ms.remove(element)
override fun removeAll(elements: Collection<IT2>): Boolean = ms.removeAll(elements)
override fun retainAll(elements: Collection<IT2>): Boolean = ms.retainAll(elements)
}
@@ -0,0 +1,77 @@
public final class IT {
// source: 'mutableSet2.kt'
private final field x: int
private synthetic method <init>(p0: int): void
public synthetic final static method box-impl(p0: int): IT
public static method constructor-impl(p0: int): int
public method equals(p0: java.lang.Object): boolean
public static method equals-impl(p0: int, p1: java.lang.Object): boolean
public final static method equals-impl0(p0: int, p1: int): boolean
public final method getX(): int
public method hashCode(): int
public static method hashCode-impl(p0: int): int
public method toString(): java.lang.String
public static method toString-impl(p0: int): java.lang.String
public synthetic final method unbox-impl(): int
}
public final class IT2 {
// source: 'mutableSet2.kt'
private final field x: int
private synthetic method <init>(p0: int): void
public synthetic final static method box-impl(p0: int): IT2
public static method constructor-impl(p0: int): int
public method equals(p0: java.lang.Object): boolean
public static method equals-impl(p0: int, p1: java.lang.Object): boolean
public final static method equals-impl0(p0: int, p1: int): boolean
public final method getX-XAcLw3A(): int
public method hashCode(): int
public static method hashCode-impl(p0: int): int
public method toString(): java.lang.String
public static method toString-impl(p0: int): java.lang.String
public synthetic final method unbox-impl(): int
}
public final class InlineMutableSet2 {
// source: 'mutableSet2.kt'
private final field ms: java.util.Set
private synthetic method <init>(p0: java.util.Set): void
public synthetic bridge method add(p0: java.lang.Object): boolean
public method add-C2ZI6mw(p0: int): boolean
public static method add-C2ZI6mw(p0: java.util.Set, p1: int): boolean
public method addAll(p0: java.util.Collection): boolean
public static method addAll-impl(p0: java.util.Set, p1: java.util.Collection): boolean
public synthetic final static method box-impl(p0: java.util.Set): InlineMutableSet2
public method clear(): void
public static method clear-impl(p0: java.util.Set): void
public static method constructor-impl(p0: java.util.Set): java.util.Set
public bridge final method contains(p0: java.lang.Object): boolean
public method contains-C2ZI6mw(p0: int): boolean
public static method contains-C2ZI6mw(p0: java.util.Set, p1: int): boolean
public method containsAll(p0: java.util.Collection): boolean
public static method containsAll-impl(p0: java.util.Set, p1: java.util.Collection): boolean
public method equals(p0: java.lang.Object): boolean
public static method equals-impl(p0: java.util.Set, p1: java.lang.Object): boolean
public final static method equals-impl0(p0: java.util.Set, p1: java.util.Set): boolean
public method getSize(): int
public static method getSize-impl(p0: java.util.Set): int
public method hashCode(): int
public static method hashCode-impl(p0: java.util.Set): int
public method isEmpty(): boolean
public static method isEmpty-impl(p0: java.util.Set): boolean
public method iterator(): java.util.Iterator
public static method iterator-impl(p0: java.util.Set): java.util.Iterator
public bridge final method remove(p0: java.lang.Object): boolean
public method remove-C2ZI6mw(p0: IT2): boolean
public static method remove-C2ZI6mw(p0: java.util.Set, p1: IT2): boolean
public method removeAll(p0: java.util.Collection): boolean
public static method removeAll-impl(p0: java.util.Set, p1: java.util.Collection): boolean
public method retainAll(p0: java.util.Collection): boolean
public static method retainAll-impl(p0: java.util.Set, p1: java.util.Collection): boolean
public bridge final method size(): int
public method toArray(): java.lang.Object[]
public method toArray(p0: java.lang.Object[]): java.lang.Object[]
public method toString(): java.lang.String
public static method toString-impl(p0: java.util.Set): java.lang.String
public synthetic final method unbox-impl(): java.util.Set
}
@@ -0,0 +1,77 @@
public final class IT {
// source: 'mutableSet2.kt'
private final field x: int
private synthetic method <init>(p0: int): void
public synthetic final static method box-impl(p0: int): IT
public static method constructor-impl(p0: int): int
public method equals(p0: java.lang.Object): boolean
public static method equals-impl(p0: int, p1: java.lang.Object): boolean
public final static method equals-impl0(p0: int, p1: int): boolean
public final method getX(): int
public method hashCode(): int
public static method hashCode-impl(p0: int): int
public method toString(): java.lang.String
public static method toString-impl(p0: int): java.lang.String
public synthetic final method unbox-impl(): int
}
public final class IT2 {
// source: 'mutableSet2.kt'
private final field x: int
private synthetic method <init>(p0: int): void
public synthetic final static method box-impl(p0: int): IT2
public static method constructor-impl(p0: int): int
public method equals(p0: java.lang.Object): boolean
public static method equals-impl(p0: int, p1: java.lang.Object): boolean
public final static method equals-impl0(p0: int, p1: int): boolean
public final method getX-XAcLw3A(): int
public method hashCode(): int
public static method hashCode-impl(p0: int): int
public method toString(): java.lang.String
public static method toString-impl(p0: int): java.lang.String
public synthetic final method unbox-impl(): int
}
public final class InlineMutableSet2 {
// source: 'mutableSet2.kt'
private final field ms: java.util.Set
private synthetic method <init>(p0: java.util.Set): void
public synthetic bridge method add(p0: java.lang.Object): boolean
public method add-C2ZI6mw(p0: int): boolean
public static method add-C2ZI6mw(p0: java.util.Set, p1: int): boolean
public method addAll(p0: java.util.Collection): boolean
public static method addAll-impl(p0: java.util.Set, p1: java.util.Collection): boolean
public synthetic final static method box-impl(p0: java.util.Set): InlineMutableSet2
public method clear(): void
public static method clear-impl(p0: java.util.Set): void
public static method constructor-impl(p0: java.util.Set): java.util.Set
public synthetic bridge method contains(p0: java.lang.Object): boolean
public method contains-C2ZI6mw(p0: int): boolean
public static method contains-C2ZI6mw(p0: java.util.Set, p1: int): boolean
public method containsAll(p0: java.util.Collection): boolean
public static method containsAll-impl(p0: java.util.Set, p1: java.util.Collection): boolean
public method equals(p0: java.lang.Object): boolean
public static method equals-impl(p0: java.util.Set, p1: java.lang.Object): boolean
public final static method equals-impl0(p0: java.util.Set, p1: java.util.Set): boolean
public method getSize(): int
public static method getSize-impl(p0: java.util.Set): int
public method hashCode(): int
public static method hashCode-impl(p0: java.util.Set): int
public method isEmpty(): boolean
public static method isEmpty-impl(p0: java.util.Set): boolean
public method iterator(): java.util.Iterator
public static method iterator-impl(p0: java.util.Set): java.util.Iterator
public bridge final method remove(p0: java.lang.Object): boolean
public method remove-C2ZI6mw(p0: IT2): boolean
public static method remove-C2ZI6mw(p0: java.util.Set, p1: IT2): boolean
public method removeAll(p0: java.util.Collection): boolean
public static method removeAll-impl(p0: java.util.Set, p1: java.util.Collection): boolean
public method retainAll(p0: java.util.Collection): boolean
public static method retainAll-impl(p0: java.util.Set, p1: java.util.Collection): boolean
public synthetic bridge method size(): int
public method toArray(): java.lang.Object[]
public method toArray(p0: java.lang.Object[]): java.lang.Object[]
public method toString(): java.lang.String
public static method toString-impl(p0: java.util.Set): java.lang.String
public synthetic final method unbox-impl(): java.util.Set
}
@@ -0,0 +1,60 @@
public final class IT {
// source: 'mutableSet.kt'
private final field x: int
private synthetic method <init>(p0: int): void
public synthetic final static method box-impl(p0: int): IT
public static method constructor-impl(p0: int): int
public method equals(p0: java.lang.Object): boolean
public static method equals-impl(p0: int, p1: java.lang.Object): boolean
public final static method equals-impl0(p0: int, p1: int): boolean
public final method getX(): int
public method hashCode(): int
public static method hashCode-impl(p0: int): int
public method toString(): java.lang.String
public static method toString-impl(p0: int): java.lang.String
public synthetic final method unbox-impl(): int
}
public final class InlineMutableSet {
// source: 'mutableSet.kt'
private final field ms: java.util.Set
private synthetic method <init>(p0: java.util.Set): void
public synthetic bridge method add(p0: java.lang.Object): boolean
public method add-jHY5zpA(p0: int): boolean
public static method add-jHY5zpA(p0: java.util.Set, p1: int): boolean
public method addAll(p0: java.util.Collection): boolean
public static method addAll-impl(p0: java.util.Set, p1: java.util.Collection): boolean
public synthetic final static method box-impl(p0: java.util.Set): InlineMutableSet
public method clear(): void
public static method clear-impl(p0: java.util.Set): void
public static method constructor-impl(p0: java.util.Set): java.util.Set
public synthetic bridge method contains(p0: java.lang.Object): boolean
public method contains-jHY5zpA(p0: int): boolean
public static method contains-jHY5zpA(p0: java.util.Set, p1: int): boolean
public method containsAll(p0: java.util.Collection): boolean
public static method containsAll-impl(p0: java.util.Set, p1: java.util.Collection): boolean
public method equals(p0: java.lang.Object): boolean
public static method equals-impl(p0: java.util.Set, p1: java.lang.Object): boolean
public final static method equals-impl0(p0: java.util.Set, p1: java.util.Set): boolean
public method getSize(): int
public static method getSize-impl(p0: java.util.Set): int
public method hashCode(): int
public static method hashCode-impl(p0: java.util.Set): int
public method isEmpty(): boolean
public static method isEmpty-impl(p0: java.util.Set): boolean
public method iterator(): java.util.Iterator
public static method iterator-impl(p0: java.util.Set): java.util.Iterator
public bridge final method remove(p0: java.lang.Object): boolean
public method remove-jHY5zpA(p0: IT): boolean
public static method remove-jHY5zpA(p0: java.util.Set, p1: IT): boolean
public method removeAll(p0: java.util.Collection): boolean
public static method removeAll-impl(p0: java.util.Set, p1: java.util.Collection): boolean
public method retainAll(p0: java.util.Collection): boolean
public static method retainAll-impl(p0: java.util.Set, p1: java.util.Collection): boolean
public synthetic bridge method size(): int
public method toArray(): java.lang.Object[]
public method toArray(p0: java.lang.Object[]): java.lang.Object[]
public method toString(): java.lang.String
public static method toString-impl(p0: java.util.Set): java.lang.String
public synthetic final method unbox-impl(): java.util.Set
}