New J2K: implement mutability inference in post-processing
#KT-24293 fixed #KT-19603 fixed
This commit is contained in:
+1
-1
@@ -7,4 +7,4 @@ fun test() {
|
||||
|
||||
//T0 <: T1 due to 'INITIALIZER'
|
||||
//T2 <: T4 due to 'INITIALIZER'
|
||||
//T3 <: T1 due to 'ASSIGNMENT'
|
||||
//T1 <: T3 due to 'ASSIGNMENT'
|
||||
|
||||
@@ -0,0 +1,5 @@
|
||||
class Test {
|
||||
val x: /*T2@*/List</*T1@*/Int> = ArrayList</*T0@*/Int>()/*ArrayList<T0@Int>*/
|
||||
}
|
||||
|
||||
//T1 := T0 due to 'INITIALIZER'
|
||||
@@ -0,0 +1,8 @@
|
||||
fun a(
|
||||
l0: /*T1@*/MutableIterator</*T0@*/Int>
|
||||
) {
|
||||
l0/*T1@MutableIterator<T0@Int>*/.remove()
|
||||
}
|
||||
|
||||
//T0 <: T0 due to 'RECEIVER_PARAMETER'
|
||||
//T1 := LOWER due to 'USE_AS_RECEIVER'
|
||||
@@ -0,0 +1,7 @@
|
||||
import java.util.ArrayList
|
||||
|
||||
fun a() {
|
||||
val list: /*T2@*/List</*T1@*/Int> = ArrayList</*T0@*/Int>()/*ArrayList<T0@Int>*/
|
||||
}
|
||||
|
||||
//T1 := T0 due to 'INITIALIZER'
|
||||
@@ -0,0 +1,30 @@
|
||||
fun a(
|
||||
l0: /*T1@*/MutableCollection</*T0@*/Int>,
|
||||
l1: /*T3@*/MutableCollection</*T2@*/Int>,
|
||||
l2: /*T5@*/MutableCollection</*T4@*/Int>,
|
||||
l3: /*T7@*/MutableCollection</*T6@*/Int>,
|
||||
l4: /*T9@*/MutableCollection</*T8@*/Int>
|
||||
) {
|
||||
l0/*T1@MutableCollection<T0@Int>*/.add(1/*LIT*/)
|
||||
l1/*T3@MutableCollection<T2@Int>*/.addAll(l1/*T3@MutableCollection<T2@Int>*/)
|
||||
l2/*T5@MutableCollection<T4@Int>*/.clear()
|
||||
l3/*T7@MutableCollection<T6@Int>*/.removeAll(l1/*T3@MutableCollection<T2@Int>*/)
|
||||
l4/*T9@MutableCollection<T8@Int>*/.retainAll(l1/*T3@MutableCollection<T2@Int>*/)
|
||||
}
|
||||
|
||||
//T0 := T0 due to 'RECEIVER_PARAMETER'
|
||||
//T1 := LOWER due to 'USE_AS_RECEIVER'
|
||||
//T2 := T2 due to 'RECEIVER_PARAMETER'
|
||||
//T2 := T2 due to 'PARAMETER'
|
||||
//T3 <: UPPER due to 'PARAMETER'
|
||||
//T3 := LOWER due to 'USE_AS_RECEIVER'
|
||||
//T4 := T4 due to 'RECEIVER_PARAMETER'
|
||||
//T5 := LOWER due to 'USE_AS_RECEIVER'
|
||||
//T6 := T6 due to 'RECEIVER_PARAMETER'
|
||||
//T6 := T2 due to 'PARAMETER'
|
||||
//T3 <: UPPER due to 'PARAMETER'
|
||||
//T7 := LOWER due to 'USE_AS_RECEIVER'
|
||||
//T8 := T8 due to 'RECEIVER_PARAMETER'
|
||||
//T8 := T2 due to 'PARAMETER'
|
||||
//T3 <: UPPER due to 'PARAMETER'
|
||||
//T9 := LOWER due to 'USE_AS_RECEIVER'
|
||||
@@ -0,0 +1,8 @@
|
||||
class Nya {
|
||||
private val hashMap: /*T6@*/Map</*T3@*/String, /*T5@*/List</*T4@*/Int>> =
|
||||
HashMap</*T0@*/String, /*T2@*/List</*T1@*/Int>>()/*HashMap<T0@String, T2@MutableList<T1@Int>>*/
|
||||
}
|
||||
|
||||
//T3 := T0 due to 'INITIALIZER'
|
||||
//T4 := T1 due to 'INITIALIZER'
|
||||
//T5 := T2 due to 'INITIALIZER'
|
||||
@@ -0,0 +1,10 @@
|
||||
fun a(l0: /*T1@*/MutableList</*T0@*/Int>) {
|
||||
val iterator: /*T3@*/MutableIterator</*T2@*/Int> = l0/*T1@MutableList<T0@Int>*/.iterator()/*T1@MutableList<T0@Int>*/
|
||||
iterator/*T3@MutableIterator<T2@Int>*/.remove()
|
||||
}
|
||||
|
||||
//T0 := T0 due to 'RECEIVER_PARAMETER'
|
||||
//T2 := T0 due to 'INITIALIZER'
|
||||
//T1 <: T3 due to 'INITIALIZER'
|
||||
//T2 <: T2 due to 'RECEIVER_PARAMETER'
|
||||
//T3 := LOWER due to 'USE_AS_RECEIVER'
|
||||
+4
@@ -0,0 +1,4 @@
|
||||
class A {
|
||||
val l: /*T1@*/List</*T0@*/Int>
|
||||
}
|
||||
|
||||
@@ -0,0 +1,16 @@
|
||||
fun a(
|
||||
l0: /*T1@*/MutableListIterator</*T0@*/Int>,
|
||||
l1: /*T3@*/MutableListIterator</*T2@*/Int>,
|
||||
l2: /*T5@*/MutableListIterator</*T4@*/Int>
|
||||
) {
|
||||
l0/*T1@MutableListIterator<T0@Int>*/.add(1/*LIT*/)
|
||||
l1/*T3@MutableListIterator<T2@Int>*/.remove()
|
||||
l2/*T5@MutableListIterator<T4@Int>*/.set(1/*LIT*/)
|
||||
}
|
||||
|
||||
//T0 := T0 due to 'RECEIVER_PARAMETER'
|
||||
//T1 := LOWER due to 'USE_AS_RECEIVER'
|
||||
//T2 := T2 due to 'RECEIVER_PARAMETER'
|
||||
//T3 := LOWER due to 'USE_AS_RECEIVER'
|
||||
//T4 := T4 due to 'RECEIVER_PARAMETER'
|
||||
//T5 := LOWER due to 'USE_AS_RECEIVER'
|
||||
@@ -0,0 +1,46 @@
|
||||
fun a(
|
||||
l0: /*T1@*/MutableList</*T0@*/Int>,
|
||||
l1: /*T3@*/MutableList</*T2@*/Int>,
|
||||
l2: /*T5@*/MutableList</*T4@*/Int>,
|
||||
l3: /*T7@*/MutableList</*T6@*/Int>,
|
||||
l4: /*T9@*/MutableList</*T8@*/Int>,
|
||||
l5: /*T11@*/MutableList</*T10@*/Int>,
|
||||
l6: /*T13@*/MutableList</*T12@*/Int>,
|
||||
l7: /*T15@*/MutableList</*T14@*/Int>
|
||||
) {
|
||||
l0/*T1@MutableList<T0@Int>*/.add(1/*LIT*/)
|
||||
l1/*T3@MutableList<T2@Int>*/.addAll(1/*LIT*/, l1/*T3@MutableList<T2@Int>*/)
|
||||
l2/*T5@MutableList<T4@Int>*/.addAll(l1/*T3@MutableList<T2@Int>*/)
|
||||
l3/*T7@MutableList<T6@Int>*/.clear()
|
||||
l4/*T9@MutableList<T8@Int>*/.remove(1/*LIT*/)
|
||||
l5/*T11@MutableList<T10@Int>*/.removeAll(l1/*T3@MutableList<T2@Int>*/)
|
||||
l5/*T11@MutableList<T10@Int>*/.removeAt(0/*LIT*/)
|
||||
l6/*T13@MutableList<T12@Int>*/.retainAll(l1/*T3@MutableList<T2@Int>*/)
|
||||
l7/*T15@MutableList<T14@Int>*/.set(0/*LIT*/, 0/*LIT*/)
|
||||
}
|
||||
|
||||
//T0 := T0 due to 'RECEIVER_PARAMETER'
|
||||
//T1 := LOWER due to 'USE_AS_RECEIVER'
|
||||
//T2 := T2 due to 'RECEIVER_PARAMETER'
|
||||
//T2 := T2 due to 'PARAMETER'
|
||||
//T3 <: UPPER due to 'PARAMETER'
|
||||
//T3 := LOWER due to 'USE_AS_RECEIVER'
|
||||
//T4 := T4 due to 'RECEIVER_PARAMETER'
|
||||
//T4 := T2 due to 'PARAMETER'
|
||||
//T3 <: UPPER due to 'PARAMETER'
|
||||
//T5 := LOWER due to 'USE_AS_RECEIVER'
|
||||
//T6 := T6 due to 'RECEIVER_PARAMETER'
|
||||
//T7 := LOWER due to 'USE_AS_RECEIVER'
|
||||
//T8 := T8 due to 'RECEIVER_PARAMETER'
|
||||
//T9 := LOWER due to 'USE_AS_RECEIVER'
|
||||
//T10 := T10 due to 'RECEIVER_PARAMETER'
|
||||
//T10 := T2 due to 'PARAMETER'
|
||||
//T3 <: UPPER due to 'PARAMETER'
|
||||
//T11 := LOWER due to 'USE_AS_RECEIVER'
|
||||
//T10 := T10 due to 'RECEIVER_PARAMETER'
|
||||
//T12 := T12 due to 'RECEIVER_PARAMETER'
|
||||
//T12 := T2 due to 'PARAMETER'
|
||||
//T3 <: UPPER due to 'PARAMETER'
|
||||
//T13 := LOWER due to 'USE_AS_RECEIVER'
|
||||
//T14 := T14 due to 'RECEIVER_PARAMETER'
|
||||
//T15 := LOWER due to 'USE_AS_RECEIVER'
|
||||
@@ -0,0 +1,15 @@
|
||||
import java.util.ArrayList
|
||||
|
||||
fun test() {
|
||||
val list: /*T4@*/List</*T3@*/MutableList</*T2@*/Int>> = ArrayList</*T1@*/MutableList</*T0@*/Int>>()/*ArrayList<T1@MutableList<T0@Int>>*/
|
||||
for(l: /*T6@*/MutableList</*T5@*/Int> in list/*T4@MutableList<T3@MutableList<T2@Int>>*/) {
|
||||
l/*T6@MutableList<T5@Int>*/.add(42/*LIT*/)
|
||||
}
|
||||
}
|
||||
|
||||
//T2 := T0 due to 'INITIALIZER'
|
||||
//T3 := T1 due to 'INITIALIZER'
|
||||
//T5 := T5 due to 'RECEIVER_PARAMETER'
|
||||
//T6 := LOWER due to 'USE_AS_RECEIVER'
|
||||
//T5 := T2 due to 'ASSIGNMENT'
|
||||
//T3 <: T6 due to 'ASSIGNMENT'
|
||||
@@ -0,0 +1,14 @@
|
||||
import java.util.ArrayList
|
||||
|
||||
fun a() {
|
||||
val list: /*T4@*/List</*T3@*/MutableList</*T2@*/Int>> = ArrayList</*T1@*/MutableList</*T0@*/Int>>()/*ArrayList<T1@MutableList<T0@Int>>*/
|
||||
list/*T4@MutableList<T3@MutableList<T2@Int>>*/.get(0/*LIT*/)/*T3@MutableList<T2@Int>*/.add(1/*LIT*/)
|
||||
}
|
||||
|
||||
//T2 := T0 due to 'INITIALIZER'
|
||||
//T3 := T1 due to 'INITIALIZER'
|
||||
//T2 := T2 due to 'RECEIVER_PARAMETER'
|
||||
//T3 := T3 due to 'RECEIVER_PARAMETER'
|
||||
//T4 <: UPPER due to 'RECEIVER_PARAMETER'
|
||||
//T2 := T2 due to 'RECEIVER_PARAMETER'
|
||||
//T3 := LOWER due to 'USE_AS_RECEIVER'
|
||||
@@ -0,0 +1,9 @@
|
||||
fun a(
|
||||
l0: /*T2@*/MutableMap.MutableEntry</*T0@*/Int, /*T1@*/String>
|
||||
) {
|
||||
l0/*T2@MutableEntry<T0@Int, T1@String>*/.setValue(1/*LIT*/, "nya")
|
||||
}
|
||||
|
||||
//T0 := T0 due to 'RECEIVER_PARAMETER'
|
||||
//T1 := T1 due to 'RECEIVER_PARAMETER'
|
||||
//T2 := LOWER due to 'USE_AS_RECEIVER'
|
||||
@@ -0,0 +1,27 @@
|
||||
fun a(
|
||||
l0: /*T2@*/MutableMap</*T0@*/Int, /*T1@*/String>,
|
||||
l1: /*T5@*/MutableMap</*T3@*/Int, /*T4@*/String>,
|
||||
l2: /*T8@*/MutableMap</*T6@*/Int, /*T7@*/String>,
|
||||
l3: /*T11@*/MutableMap</*T9@*/Int, /*T10@*/String>
|
||||
) {
|
||||
l0/*T2@MutableMap<T0@Int, T1@String>*/.put(1)
|
||||
l1/*T5@MutableMap<T3@Int, T4@String>*/.remove(1/*LIT*/, l1)
|
||||
l2/*T8@MutableMap<T6@Int, T7@String>*/.putAll(l1/*T5@MutableMap<T3@Int, T4@String>*/)
|
||||
l3/*T11@MutableMap<T9@Int, T10@String>*/.clear(1)
|
||||
}
|
||||
|
||||
//T0 := T0 due to 'RECEIVER_PARAMETER'
|
||||
//T1 := T1 due to 'RECEIVER_PARAMETER'
|
||||
//T2 := LOWER due to 'USE_AS_RECEIVER'
|
||||
//T3 := T3 due to 'RECEIVER_PARAMETER'
|
||||
//T4 := T4 due to 'RECEIVER_PARAMETER'
|
||||
//T5 := LOWER due to 'USE_AS_RECEIVER'
|
||||
//T6 := T6 due to 'RECEIVER_PARAMETER'
|
||||
//T7 := T7 due to 'RECEIVER_PARAMETER'
|
||||
//T6 := T3 due to 'PARAMETER'
|
||||
//T7 := T4 due to 'PARAMETER'
|
||||
//T5 <: UPPER due to 'PARAMETER'
|
||||
//T8 := LOWER due to 'USE_AS_RECEIVER'
|
||||
//T9 := T9 due to 'RECEIVER_PARAMETER'
|
||||
//T10 := T10 due to 'RECEIVER_PARAMETER'
|
||||
//T11 := LOWER due to 'USE_AS_RECEIVER'
|
||||
@@ -0,0 +1,30 @@
|
||||
fun a(
|
||||
l0: /*T1@*/MutableSet</*T0@*/Int>,
|
||||
l1: /*T3@*/MutableSet</*T2@*/Int>,
|
||||
l2: /*T5@*/MutableSet</*T4@*/Int>,
|
||||
l3: /*T7@*/MutableSet</*T6@*/Int>,
|
||||
l4: /*T9@*/MutableSet</*T8@*/Int>
|
||||
) {
|
||||
l0/*T1@MutableSet<T0@Int>*/.add(1/*LIT*/)
|
||||
l1/*T3@MutableSet<T2@Int>*/.addAll(l1/*T3@MutableSet<T2@Int>*/)
|
||||
l2/*T5@MutableSet<T4@Int>*/.clear()
|
||||
l3/*T7@MutableSet<T6@Int>*/.removeAll(l1/*T3@MutableSet<T2@Int>*/)
|
||||
l4/*T9@MutableSet<T8@Int>*/.retainAll(l1/*T3@MutableSet<T2@Int>*/)
|
||||
}
|
||||
|
||||
//T0 := T0 due to 'RECEIVER_PARAMETER'
|
||||
//T1 := LOWER due to 'USE_AS_RECEIVER'
|
||||
//T2 := T2 due to 'RECEIVER_PARAMETER'
|
||||
//T2 := T2 due to 'PARAMETER'
|
||||
//T3 <: UPPER due to 'PARAMETER'
|
||||
//T3 := LOWER due to 'USE_AS_RECEIVER'
|
||||
//T4 := T4 due to 'RECEIVER_PARAMETER'
|
||||
//T5 := LOWER due to 'USE_AS_RECEIVER'
|
||||
//T6 := T6 due to 'RECEIVER_PARAMETER'
|
||||
//T6 := T2 due to 'PARAMETER'
|
||||
//T3 <: UPPER due to 'PARAMETER'
|
||||
//T7 := LOWER due to 'USE_AS_RECEIVER'
|
||||
//T8 := T8 due to 'RECEIVER_PARAMETER'
|
||||
//T8 := T2 due to 'PARAMETER'
|
||||
//T3 <: UPPER due to 'PARAMETER'
|
||||
//T9 := LOWER due to 'USE_AS_RECEIVER'
|
||||
+1
-1
@@ -4,5 +4,5 @@ fun test(a: /*T1@*/List</*T0@*/Int?>) {
|
||||
}
|
||||
}
|
||||
|
||||
//T2 <: T0 due to 'ASSIGNMENT'
|
||||
//T0 <: T2 due to 'ASSIGNMENT'
|
||||
//T1 := LOWER due to 'USE_AS_RECEIVER'
|
||||
|
||||
+5
-5
@@ -1,4 +1,4 @@
|
||||
fun bar(map: /*T2@*/HashMap</*T0@*/String?, /*T1@*/Int>, list1: /*T4@*/List</*T3@*/Int?>, list2: /*T6@*/List</*T5@*/String?>) {
|
||||
fun bar(map: /*T2@*/HashMap</*T0@*/String?, /*T1@*/Int>, list1: /*T4@*/List</*T3@*/Int>, list2: /*T6@*/List</*T5@*/String?>) {
|
||||
for (entry: /*T9@*/MutableMap.MutableEntry</*T7@*/String?, /*T8@*/Int> in map/*T2@HashMap<T0@String, T1@Int>*/.entries/*MutableSet<MutableEntry<T0@String, T1@Int>>*/) {
|
||||
val value: /*T10@*/Int = entry/*T9@MutableEntry<T7@String, T8@Int>*/.value/*T8@Int*/
|
||||
if (entry/*T9@MutableEntry<T7@String, T8@Int>*/.key/*T7@String*/ == null/*LIT*/) {
|
||||
@@ -21,11 +21,11 @@ fun bar(map: /*T2@*/HashMap</*T0@*/String?, /*T1@*/Int>, list1: /*T4@*/List</*T3
|
||||
//T9 := LOWER due to 'USE_AS_RECEIVER'
|
||||
//T7 := UPPER due to 'COMPARE_WITH_NULL'
|
||||
//T10 := LOWER due to 'USE_AS_RECEIVER'
|
||||
//T0 := T7 due to 'ASSIGNMENT'
|
||||
//T1 := T8 due to 'ASSIGNMENT'
|
||||
//T7 := T0 due to 'ASSIGNMENT'
|
||||
//T8 := T1 due to 'ASSIGNMENT'
|
||||
//T11 := LOWER due to 'USE_AS_RECEIVER'
|
||||
//T11 <: T3 due to 'ASSIGNMENT'
|
||||
//T3 <: T11 due to 'ASSIGNMENT'
|
||||
//T4 := LOWER due to 'USE_AS_RECEIVER'
|
||||
//T12 := UPPER due to 'COMPARE_WITH_NULL'
|
||||
//T12 <: T5 due to 'ASSIGNMENT'
|
||||
//T5 <: T12 due to 'ASSIGNMENT'
|
||||
//T6 := LOWER due to 'USE_AS_RECEIVER'
|
||||
|
||||
Reference in New Issue
Block a user