[FIR] Insert SAM conversion expressions during completion

#KT-62847 Fixed
This commit is contained in:
Kirill Rakhman
2023-11-15 12:24:31 +01:00
committed by Space Team
parent 0b28e770b2
commit dd1d36816b
68 changed files with 611 additions and 268 deletions
@@ -1,7 +1,7 @@
FILE: javaCollector.kt
public final fun foo(): R|kotlin/Unit| {
R|kotlin/collections/listOf|<R|kotlin/String|>(String()).R|SubstitutionOverride<kotlin/collections/List.stream: R|@EnhancedNullability java/util/stream/Stream<@EnhancedNullability kotlin/String>|>|().R|SubstitutionOverride<java/util/stream/Stream.collect: R|ft<R & Any, R?>|>|<R|ft<kotlin/collections/MutableMap<kotlin/String!, kotlin/Int!>, kotlin/collections/Map<kotlin/String!, kotlin/Int!>?>|, R|ft<CapturedType(*), CapturedType(*)?>|>(Q|java/util/stream/Collectors|.R|java/util/stream/Collectors.groupingBy*s|<R|kotlin/String!|, R|kotlin/String!|, R|ft<CapturedType(*), CapturedType(*)?>|, R|kotlin/Int!|>(groupingBy@fun <anonymous>(it: R|@EnhancedNullability kotlin/String!|): R|@EnhancedNullability kotlin/String!| <inline=NoInline> {
R|kotlin/collections/listOf|<R|kotlin/String|>(String()).R|SubstitutionOverride<kotlin/collections/List.stream: R|@EnhancedNullability java/util/stream/Stream<@EnhancedNullability kotlin/String>|>|().R|SubstitutionOverride<java/util/stream/Stream.collect: R|ft<R & Any, R?>|>|<R|ft<kotlin/collections/MutableMap<kotlin/String!, kotlin/Int!>, kotlin/collections/Map<kotlin/String!, kotlin/Int!>?>|, R|ft<CapturedType(*), CapturedType(*)?>|>(Q|java/util/stream/Collectors|.R|java/util/stream/Collectors.groupingBy*s|<R|kotlin/String!|, R|kotlin/String!|, R|ft<CapturedType(*), CapturedType(*)?>|, R|kotlin/Int!|>(SAM(groupingBy@fun <anonymous>(it: R|@EnhancedNullability kotlin/String!|): R|@EnhancedNullability kotlin/String!| <inline=NoInline> {
^ R|<local>/it|
}
, Q|java/util/stream/Collectors|.R|java/util/stream/Collectors.collectingAndThen*s|<R|kotlin/String!|, R|ft<CapturedType(*), CapturedType(*)?>|, R|kotlin/Long!|, R|kotlin/Int!|>(Q|java/util/stream/Collectors|.R|java/util/stream/Collectors.counting*s|<R|kotlin/String|>(), Q|kotlin/Long|::R|kotlin/Long.toInt|)))
), Q|java/util/stream/Collectors|.R|java/util/stream/Collectors.collectingAndThen*s|<R|kotlin/String!|, R|ft<CapturedType(*), CapturedType(*)?>|, R|kotlin/Long!|, R|kotlin/Int!|>(Q|java/util/stream/Collectors|.R|java/util/stream/Collectors.counting*s|<R|kotlin/String|>(), SAM(Q|kotlin/Long|::R|kotlin/Long.toInt|))))
}
@@ -1,7 +1,7 @@
FILE: main.kt
public final fun foo(): R|kotlin/Unit| {
Q|RawType|.R|/RawType.bar*s|(<L> = bar@fun <anonymous>(it: R|kotlin/CharSequence!|): R|kotlin/Boolean| <inline=NoInline> {
Q|RawType|.R|/RawType.bar*s|(<L> = SAM(bar@fun <anonymous>(it: R|kotlin/CharSequence!|): R|kotlin/Boolean| <inline=NoInline> {
^ CMP(>, R|<local>/it|.R|kotlin/CharSequence.length|.R|kotlin/Int.compareTo|(Int(0)))
}
)
))
}
@@ -1,23 +1,23 @@
FILE: main.kt
public final fun main(): R|kotlin/Unit| {
Q|JavaUsage|.R|/JavaUsage.foo1*s|(<L> = foo1@fun <anonymous>(x: R|kotlin/Int!|): R|kotlin/String!| <inline=NoInline> {
Q|JavaUsage|.R|/JavaUsage.foo1*s|(<L> = SAM(foo1@fun <anonymous>(x: R|kotlin/Int!|): R|kotlin/String!| <inline=NoInline> {
^ R|<local>/x|.R|kotlin/Int.toInt|().R|kotlin/Int.toString|()
}
)
Q|JavaUsage|.R|/JavaUsage.foo2*s|(<L> = foo2@fun <anonymous>(x: R|kotlin/Number!|): R|kotlin/CharSequence!| <inline=NoInline> {
))
Q|JavaUsage|.R|/JavaUsage.foo2*s|(<L> = SAM(foo2@fun <anonymous>(x: R|kotlin/Number!|): R|kotlin/CharSequence!| <inline=NoInline> {
^ R|<local>/x|.R|kotlin/Number.toInt|().R|kotlin/Int.toString|()
}
)
))
Q|JavaUsage|.R|/JavaUsage.foo2*s<Inapplicable(INAPPLICABLE): /JavaUsage.foo2>#|(<L> = foo2@fun <anonymous>(x: R|kotlin/Int|): R|kotlin/CharSequence!| <inline=Unknown> {
^ R|<local>/x|.R|kotlin/Int.toString|()
}
)
Q|JavaUsage|.R|/JavaUsage.foo3*s|<R|kotlin/Int!|, R|kotlin/String!|>(foo3@fun <anonymous>(x: R|kotlin/Int!|): R|kotlin/String!| <inline=NoInline> {
Q|JavaUsage|.R|/JavaUsage.foo3*s|<R|kotlin/Int!|, R|kotlin/String!|>(SAM(foo3@fun <anonymous>(x: R|kotlin/Int!|): R|kotlin/String!| <inline=NoInline> {
^ R|<local>/x|.R|kotlin/Int.plus|(Int(1)).R|kotlin/Int.toString|()
}
, Int(1))
Q|JavaUsage|.R|/JavaUsage.foo3*s|<R|kotlin/Int!|, R|kotlin/String!|>(foo3@fun <anonymous>(x: R|kotlin/Number|): R|kotlin/String!| <inline=NoInline> {
), Int(1))
Q|JavaUsage|.R|/JavaUsage.foo3*s|<R|kotlin/Int!|, R|kotlin/String!|>(SAM(foo3@fun <anonymous>(x: R|kotlin/Number|): R|kotlin/String!| <inline=NoInline> {
^ R|<local>/x|.R|kotlin/Number.toInt|().R|kotlin/Int.toString|()
}
, Int(2))
), Int(2))
}
@@ -33,11 +33,11 @@ FILE: kotlinSam.kt
^ CMP(>, R|<local>/t|.R|kotlin/Int.compareTo|(Int(1)))
}
R|/foo1|(<L> = foo1@fun <anonymous>(x: R|kotlin/Int|): R|kotlin/Boolean| <inline=NoInline> {
R|/foo1|(<L> = SAM(foo1@fun <anonymous>(x: R|kotlin/Int|): R|kotlin/Boolean| <inline=NoInline> {
^ CMP(>, R|<local>/x|.R|kotlin/Int.compareTo|(Int(1)))
}
)
R|/foo1|(R|<local>/f|)
))
R|/foo1|(SAM(R|<local>/f|))
R|/foo2<Inapplicable(INAPPLICABLE): /foo2>#|(<L> = foo2@fun <anonymous>(x: R|kotlin/Nothing|): R|kotlin/Boolean| <inline=Unknown> {
^ CMP(>, R|<local>/x|.<Unresolved name: compareTo>#(Int(1)))
}
@@ -48,9 +48,9 @@ FILE: kotlinSam.kt
}
)
R|/foo3<Inapplicable(INAPPLICABLE): /foo3>#|(R|<local>/f|)
R|/foo4|(<L> = foo4@fun <anonymous>(x: R|kotlin/Int|): R|kotlin/Boolean| <inline=NoInline> {
R|/foo4|(<L> = SAM(foo4@fun <anonymous>(x: R|kotlin/Int|): R|kotlin/Boolean| <inline=NoInline> {
^ CMP(>, R|<local>/x|.R|kotlin/Int.compareTo|(Int(1)))
}
)
R|/foo4|(R|<local>/f|)
))
R|/foo4|(SAM(R|<local>/f|))
}
@@ -1,7 +1,7 @@
FILE: main.kt
public final fun test(x: R|A<*>|): R|kotlin/Unit| {
R|<local>/x|.R|SubstitutionOverride</A.call: R|kotlin/Unit|>|(vararg(call@fun <anonymous>(y: R|kotlin/Any?|): R|kotlin/Unit| <inline=Unknown> {
R|<local>/x|.R|SubstitutionOverride</A.call: R|kotlin/Unit|>|(vararg(SAM(call@fun <anonymous>(y: R|kotlin/Any?|): R|kotlin/Unit| <inline=Unknown> {
Q|kotlin/Unit|
}
))
)))
}
@@ -1,11 +1,11 @@
FILE: main.kt
public final fun main(): R|kotlin/Unit| {
Q|JavaClass|.R|/JavaClass.foo*s|(<L> = foo@fun <anonymous>(): R|kotlin/Unit| <inline=NoInline> {
Q|JavaClass|.R|/JavaClass.foo*s|(<L> = SAM(foo@fun <anonymous>(): R|kotlin/Unit| <inline=NoInline> {
String()
}
)
R|/JavaClass.JavaClass|().R|/JavaClass.bar|(<L> = bar@fun <anonymous>(): R|kotlin/Unit| <inline=NoInline> {
))
R|/JavaClass.JavaClass|().R|/JavaClass.bar|(<L> = SAM(bar@fun <anonymous>(): R|kotlin/Unit| <inline=NoInline> {
String()
}
)
))
}
@@ -1,7 +1,7 @@
FILE: main.kt
public final fun test(): R|kotlin/Unit| {
R|/Foo.Foo|(<L> = Foo@fun <anonymous>(it: R|kotlin/Boolean|): R|kotlin/Boolean| <inline=NoInline> {
R|/Foo.Foo|(<L> = SAM(Foo@fun <anonymous>(it: R|kotlin/Boolean|): R|kotlin/Boolean| <inline=NoInline> {
^ R|<local>/it|
}
)
))
}
@@ -2,17 +2,17 @@ FILE: main.kt
public final fun foo(m: R|MyRunnable|): R|kotlin/Unit| {
}
public final fun main(): R|kotlin/Unit| {
Q|JavaUsage|.R|/JavaUsage.foo*s|(<L> = foo@fun <anonymous>(x: R|kotlin/Int|): R|kotlin/Boolean| <inline=NoInline> {
Q|JavaUsage|.R|/JavaUsage.foo*s|(<L> = SAM(foo@fun <anonymous>(x: R|kotlin/Int|): R|kotlin/Boolean| <inline=NoInline> {
^ CMP(>, R|<local>/x|.R|kotlin/Int.compareTo|(Int(1)))
}
)
Q|JavaUsage|.R|/JavaUsage.foo*s|(foo@fun <anonymous>(it: R|kotlin/Int|): R|kotlin/Boolean| <inline=NoInline> {
))
Q|JavaUsage|.R|/JavaUsage.foo*s|(SAM(foo@fun <anonymous>(it: R|kotlin/Int|): R|kotlin/Boolean| <inline=NoInline> {
^ CMP(>, R|<local>/it|.R|kotlin/Int.compareTo|(Int(1)))
}
)
))
lval x: R|(kotlin/Int) -> kotlin/Boolean| = fun <anonymous>(x: R|kotlin/Int|): R|kotlin/Boolean| <inline=Unknown> {
^ CMP(>, R|<local>/x|.R|kotlin/Int.compareTo|(Int(1)))
}
Q|JavaUsage|.R|/JavaUsage.foo*s|(R|<local>/x|)
Q|JavaUsage|.R|/JavaUsage.foo*s|(SAM(R|<local>/x|))
}
@@ -2,17 +2,17 @@ FILE: main.kt
public final fun foo(m: R|MyRunnable|): R|kotlin/Unit| {
}
public final fun main(): R|kotlin/Unit| {
Q|JavaUsage|.R|/JavaUsage.foo*s|(<L> = foo@fun <anonymous>(x: R|kotlin/Int|): R|kotlin/Boolean!| <inline=NoInline> {
Q|JavaUsage|.R|/JavaUsage.foo*s|(<L> = SAM(foo@fun <anonymous>(x: R|kotlin/Int|): R|kotlin/Boolean!| <inline=NoInline> {
^ CMP(>, R|<local>/x|.R|kotlin/Int.compareTo|(Int(1)))
}
)
Q|JavaUsage|.R|/JavaUsage.foo*s|(foo@fun <anonymous>(it: R|kotlin/Int|): R|kotlin/Boolean!| <inline=NoInline> {
))
Q|JavaUsage|.R|/JavaUsage.foo*s|(SAM(foo@fun <anonymous>(it: R|kotlin/Int|): R|kotlin/Boolean!| <inline=NoInline> {
^ CMP(>, R|<local>/it|.R|kotlin/Int.compareTo|(Int(1)))
}
)
))
lval x: R|(kotlin/Int) -> kotlin/Boolean| = fun <anonymous>(x: R|kotlin/Int|): R|kotlin/Boolean| <inline=Unknown> {
^ CMP(>, R|<local>/x|.R|kotlin/Int.compareTo|(Int(1)))
}
Q|JavaUsage|.R|/JavaUsage.foo*s|(R|<local>/x|)
Q|JavaUsage|.R|/JavaUsage.foo*s|(SAM(R|<local>/x|))
}
@@ -14,8 +14,8 @@ FILE: package2.kt
}
FILE: main.kt
public final fun main(): R|kotlin/Unit| {
R|p1/bar|(String(), String(), <L> = bar@fun <anonymous>(): R|kotlin/Unit| <inline=NoInline> {
R|p1/bar|(String(), String(), <L> = SAM(bar@fun <anonymous>(): R|kotlin/Unit| <inline=NoInline> {
^@bar Unit
}
)
))
}
@@ -5,7 +5,7 @@ FILE: main.kt
}
public final fun main(): R|kotlin/Unit| {
Q|OverridingUtil|.R|/OverridingUtil.createWithEqualityAxioms*s|(<L> = l1@fun <anonymous>(c1: R|TypeConstructor!|, c2: R|TypeConstructor!|): R|kotlin/Boolean| <inline=NoInline> {
Q|OverridingUtil|.R|/OverridingUtil.createWithEqualityAxioms*s|(<L> = SAM(l1@fun <anonymous>(c1: R|TypeConstructor!|, c2: R|TypeConstructor!|): R|kotlin/Boolean| <inline=NoInline> {
when () {
==(R|<local>/c1|.R|/TypeConstructor.x|, R|<local>/c2|.R|/TypeConstructor.x|) -> {
^@l1 Boolean(true)
@@ -14,5 +14,5 @@ FILE: main.kt
^ Boolean(false)
}
)
))
}
@@ -2,17 +2,17 @@ FILE: main.kt
public final fun foo(m: R|MyRunnable|): R|kotlin/Unit| {
}
public final fun main(): R|kotlin/Unit| {
Q|JavaUsage|.R|/JavaUsage.foo*s|(<L> = foo@fun <anonymous>(x: R|kotlin/Int|): R|kotlin/Boolean| <inline=NoInline> {
Q|JavaUsage|.R|/JavaUsage.foo*s|(<L> = SAM(foo@fun <anonymous>(x: R|kotlin/Int|): R|kotlin/Boolean| <inline=NoInline> {
^ CMP(>, R|<local>/x|.R|kotlin/Int.compareTo|(Int(1)))
}
)
Q|JavaUsage|.R|/JavaUsage.foo*s|(foo@fun <anonymous>(it: R|kotlin/Int|): R|kotlin/Boolean| <inline=NoInline> {
))
Q|JavaUsage|.R|/JavaUsage.foo*s|(SAM(foo@fun <anonymous>(it: R|kotlin/Int|): R|kotlin/Boolean| <inline=NoInline> {
^ CMP(>, R|<local>/it|.R|kotlin/Int.compareTo|(Int(1)))
}
)
))
lval x: R|(kotlin/Int) -> kotlin/Boolean| = fun <anonymous>(x: R|kotlin/Int|): R|kotlin/Boolean| <inline=Unknown> {
^ CMP(>, R|<local>/x|.R|kotlin/Int.compareTo|(Int(1)))
}
Q|JavaUsage|.R|/JavaUsage.foo*s|(R|<local>/x|)
Q|JavaUsage|.R|/JavaUsage.foo*s|(SAM(R|<local>/x|))
}
@@ -1,6 +1,6 @@
FILE: referenceToJavaStdlib.kt
public final fun detectDirsWithTestsMapFileOnly(file: R|java/io/File|): R|kotlin/collections/List<kotlin/String>| {
Q|java/nio/file/Files|.R|java/nio/file/Files.walk*s|(R|<local>/file|.R|java/io/File.toPath|()).R|SubstitutionOverride<java/util/stream/Stream.filter: R|ft<java/util/stream/Stream<java/nio/file/Path!>, java/util/stream/Stream<java/nio/file/Path!>?>|>|(Q|java/nio/file/Files|::R|java/nio/file/Files.isRegularFile*s|)
Q|java/nio/file/Files|.R|java/nio/file/Files.walk*s|(R|<local>/file|.R|java/io/File.toPath|()).R|SubstitutionOverride<java/util/stream/Stream.filter: R|ft<java/util/stream/Stream<java/nio/file/Path!>, java/util/stream/Stream<java/nio/file/Path!>?>|>|(SAM(Q|java/nio/file/Files|::R|java/nio/file/Files.isRegularFile*s|))
}
public abstract interface A : R|kotlin/Any| {
}
@@ -16,5 +16,5 @@ FILE: sam.kt
}
public final fun main(): R|kotlin/Unit| {
lval a: R|A| = R|/A.A|()
R|/foo|(R|<local>/a|::R|/A.bar|)
R|/foo|(SAM(R|<local>/a|::R|/A.bar|))
}
@@ -14,10 +14,10 @@ FILE: hashTableWithForEach.kt
when () {
R|/DEBUG| -> {
^ Q|java/util/Collections|.R|java/util/Collections.unmodifiableSet*s|<R|ft<kotlin/collections/MutableMap.MutableEntry<K, V>, kotlin/collections/MutableMap.MutableEntry<K, V>?>|>(R|kotlin/collections/mutableSetOf|<R|kotlin/collections/MutableMap.MutableEntry<K, V>|>().R|kotlin/apply|<R|kotlin/collections/MutableSet<kotlin/collections/MutableMap.MutableEntry<K, V>>|>(<L> = apply@fun R|kotlin/collections/MutableSet<kotlin/collections/MutableMap.MutableEntry<K, V>>|.<anonymous>(): R|kotlin/Unit| <inline=Inline, kind=EXACTLY_ONCE> {
this@R|/SomeHashTable|.R|/SomeHashTable.forEach|(<L> = forEach@fun <anonymous>(key: R|@EnhancedNullability K|, value: R|@EnhancedNullability V|): R|kotlin/Unit| <inline=NoInline> {
this@R|/SomeHashTable|.R|/SomeHashTable.forEach|(<L> = SAM(forEach@fun <anonymous>(key: R|@EnhancedNullability K|, value: R|@EnhancedNullability V|): R|kotlin/Unit| <inline=NoInline> {
this@R|special/anonymous|.R|SubstitutionOverride<kotlin/collections/MutableSet.add: R|kotlin/Boolean|>|(R|/SomeHashTable.Entry.Entry|<R|K|, R|V|>(R|<local>/key|, R|<local>/value|))
}
)
))
}
))
}
@@ -1,9 +1,9 @@
FILE: MapCompute.kt
public final fun <D> R|kotlin/collections/MutableMap<kotlin/String, kotlin/collections/MutableSet<D>>|.initAndAdd(key: R|kotlin/String|, value: R|D|): R|kotlin/Unit| {
this@R|/initAndAdd|.R|SubstitutionOverride<kotlin/collections/MutableMap.compute: R|kotlin/collections/MutableSet<D>?|>|(R|<local>/key|, <L> = compute@fun <anonymous>(<unused var>: R|@EnhancedNullability kotlin/String|, maybeValues: R|@EnhancedNullability kotlin/collections/MutableSet<D>?|): R|@EnhancedNullability kotlin/collections/MutableSet<D>?| <inline=NoInline> {
this@R|/initAndAdd|.R|SubstitutionOverride<kotlin/collections/MutableMap.compute: R|kotlin/collections/MutableSet<D>?|>|(R|<local>/key|, <L> = SAM(compute@fun <anonymous>(<unused var>: R|@EnhancedNullability kotlin/String|, maybeValues: R|@EnhancedNullability kotlin/collections/MutableSet<D>?|): R|@EnhancedNullability kotlin/collections/MutableSet<D>?| <inline=NoInline> {
lval setOfValues: R|kotlin/collections/MutableSet<D>| = R|<local>/maybeValues| ?: R|kotlin/collections/mutableSetOf|<R|D|>()
R|<local>/setOfValues|.R|SubstitutionOverride<kotlin/collections/MutableSet.add: R|kotlin/Boolean|>|(R|<local>/value|)
^ R|<local>/setOfValues|
}
)
))
}
@@ -6,12 +6,12 @@ FILE: test.kt
)
lval otherResult: R|kotlin/String!| = R|<local>/map|.R|SubstitutionOverride</MyMap.getOrDefault: R|kotlin/String!|>|(String(key), String(value))
lval anotherResult: R|kotlin/String?| = R|<local>/map|.R|SubstitutionOverride</MyMap.replace: R|kotlin/String?|>|(String(key), String(value))
R|<local>/map|.R|SubstitutionOverride</MyMap.forEach: R|kotlin/Unit|>|(<L> = forEach@fun <anonymous>(key: R|@EnhancedNullability kotlin/String!|, value: R|@EnhancedNullability kotlin/String!|): R|kotlin/Unit| <inline=NoInline> {
R|<local>/map|.R|SubstitutionOverride</MyMap.forEach: R|kotlin/Unit|>|(<L> = SAM(forEach@fun <anonymous>(key: R|@EnhancedNullability kotlin/String!|, value: R|@EnhancedNullability kotlin/String!|): R|kotlin/Unit| <inline=NoInline> {
R|kotlin/io/println|(<strcat>(R|<local>/key|, String(: ), R|<local>/value|))
R|<local>/key|.R|kotlin/String.length|
R|<local>/value|.R|kotlin/String.length|
}
)
))
R|<local>/map|.R|kotlin/collections/forEach|<R|kotlin/String!|, R|kotlin/String!|>(<L> = forEach@fun <anonymous>(<destruct>: R|kotlin/collections/Map.Entry<kotlin/String!, kotlin/String!>|): R|kotlin/Unit| <inline=Inline, kind=UNKNOWN> {
lval key: R|kotlin/String!| = R|<local>/<destruct>|.R|kotlin/collections/component1|<R|kotlin/String!|, R|kotlin/String!|>()
lval value: R|kotlin/String!| = R|<local>/<destruct>|.R|kotlin/collections/component2|<R|kotlin/String!|, R|kotlin/String!|>()
@@ -31,12 +31,12 @@ FILE: test.kt
)
lval otherResult: R|kotlin/String| = R|<local>/map|.R|SubstitutionOverride<kotlin/collections/MutableMap.getOrDefault: R|kotlin/String|>|(String(key), String(value))
lval anotherResult: R|kotlin/String?| = R|<local>/map|.R|SubstitutionOverride<kotlin/collections/MutableMap.replace: R|kotlin/String?|>|(String(key), String(value))
R|<local>/map|.R|SubstitutionOverride<kotlin/collections/MutableMap.forEach: R|kotlin/Unit|>|(<L> = forEach@fun <anonymous>(key: R|@EnhancedNullability kotlin/String|, value: R|@EnhancedNullability kotlin/String|): R|kotlin/Unit| <inline=NoInline> {
R|<local>/map|.R|SubstitutionOverride<kotlin/collections/MutableMap.forEach: R|kotlin/Unit|>|(<L> = SAM(forEach@fun <anonymous>(key: R|@EnhancedNullability kotlin/String|, value: R|@EnhancedNullability kotlin/String|): R|kotlin/Unit| <inline=NoInline> {
R|kotlin/io/println|(<strcat>(R|<local>/key|, String(: ), R|<local>/value|))
R|<local>/key|.R|kotlin/String.length|
R|<local>/value|.R|kotlin/String.length|
}
)
))
R|<local>/map|.R|kotlin/collections/forEach|<R|kotlin/String|, R|kotlin/String|>(<L> = forEach@fun <anonymous>(<destruct>: R|kotlin/collections/Map.Entry<kotlin/String, kotlin/String>|): R|kotlin/Unit| <inline=Inline, kind=UNKNOWN> {
lval key: R|kotlin/String| = R|<local>/<destruct>|.R|kotlin/collections/component1|<R|kotlin/String|, R|kotlin/String|>()
lval value: R|kotlin/String| = R|<local>/<destruct>|.R|kotlin/collections/component2|<R|kotlin/String|, R|kotlin/String|>()
@@ -1,10 +1,10 @@
FILE: test.kt
public final fun <D : R|kotlin/Any|> R|Call<D>|.testForEach(): R|kotlin/Unit| {
this@R|/testForEach|.R|/Call.arguments|.R|SubstitutionOverride<kotlin/collections/MutableMap.forEach: R|kotlin/Unit|>|(<L> = forEach@fun <anonymous>(key: R|@EnhancedNullability kotlin/String!|, value: R|@EnhancedNullability kotlin/String!|): R|kotlin/Unit| <inline=NoInline> {
this@R|/testForEach|.R|/Call.arguments|.R|SubstitutionOverride<kotlin/collections/MutableMap.forEach: R|kotlin/Unit|>|(<L> = SAM(forEach@fun <anonymous>(key: R|@EnhancedNullability kotlin/String!|, value: R|@EnhancedNullability kotlin/String!|): R|kotlin/Unit| <inline=NoInline> {
R|<local>/key|.R|kotlin/String.length|
R|<local>/value|.R|kotlin/String.length|
}
)
))
this@R|/testForEach|.R|/Call.arguments|.R|kotlin/collections/forEach|<R|kotlin/String!|, R|kotlin/String!|>(<L> = forEach@fun <anonymous>(it: R|kotlin/collections/Map.Entry<kotlin/String!, kotlin/String!>|): R|kotlin/Unit| <inline=Inline, kind=UNKNOWN> {
R|<local>/it|.R|SubstitutionOverride<kotlin/collections/Map.Entry.key: R|kotlin/String!|>|.R|kotlin/String.length|
R|<local>/it|.R|SubstitutionOverride<kotlin/collections/Map.Entry.value: R|kotlin/String!|>|.R|kotlin/String.length|
@@ -1,7 +1,7 @@
FILE: mapMerge.kt
public final fun foo(x: R|kotlin/collections/MutableMap<kotlin/String, kotlin/collections/List<kotlin/String>>|): R|kotlin/Unit| {
R|<local>/x|.R|SubstitutionOverride<kotlin/collections/MutableMap.merge: R|kotlin/collections/List<kotlin/String>?|>|(String(), R|kotlin/collections/listOf|<R|kotlin/String|>(String()), <L> = merge@fun <anonymous>(a: R|@EnhancedNullability kotlin/collections/List<kotlin/String>|, b: R|@EnhancedNullability kotlin/collections/List<kotlin/String>|): R|@EnhancedNullability kotlin/collections/List<kotlin/String>?| <inline=NoInline> {
R|<local>/x|.R|SubstitutionOverride<kotlin/collections/MutableMap.merge: R|kotlin/collections/List<kotlin/String>?|>|(String(), R|kotlin/collections/listOf|<R|kotlin/String|>(String()), <L> = SAM(merge@fun <anonymous>(a: R|@EnhancedNullability kotlin/collections/List<kotlin/String>|, b: R|@EnhancedNullability kotlin/collections/List<kotlin/String>|): R|@EnhancedNullability kotlin/collections/List<kotlin/String>?| <inline=NoInline> {
^ R|<local>/a|.R|kotlin/collections/plus|<R|kotlin/String|>(R|<local>/b|)
}
)
))
}
@@ -2,10 +2,10 @@ FILE: test.kt
public final fun foo(): R|kotlin/Unit| {
lval externalsMap: R|kotlin/collections/MutableMap<java/io/File, kotlin/String?>| = R|kotlin/collections/mutableMapOf|<R|java/io/File|, R|kotlin/String?|>()
local final fun test(file: R|java/io/File|): R|kotlin/Unit| {
lval base: R|java/io/File!| = Q|your/ContainerUtil|.R|your/ContainerUtil.find*s|<R|java/io/File!|>(R|<local>/externalsMap|.R|SubstitutionOverride<kotlin/collections/MutableMap.keys: R|kotlin/collections/MutableSet<java/io/File>|>|, <L> = find@fun <anonymous>(it: R|java/io/File!|): R|kotlin/Boolean| <inline=NoInline> {
lval base: R|java/io/File!| = Q|your/ContainerUtil|.R|your/ContainerUtil.find*s|<R|java/io/File!|>(R|<local>/externalsMap|.R|SubstitutionOverride<kotlin/collections/MutableMap.keys: R|kotlin/collections/MutableSet<java/io/File>|>|, <L> = SAM(find@fun <anonymous>(it: R|java/io/File!|): R|kotlin/Boolean| <inline=NoInline> {
^ Q|my/FileUtil|.R|my/FileUtil.isAncestor*s|(R|<local>/it|, R|<local>/file|, Boolean(false))
}
)
))
}
}
@@ -1,7 +1,7 @@
FILE: removeIf.kt
public final fun test(collection: R|kotlin/collections/MutableCollection<kotlin/Boolean>|): R|kotlin/Unit| {
R|<local>/collection|.R|SubstitutionOverride<kotlin/collections/MutableCollection.removeIf: R|kotlin/Boolean|>|(<L> = removeIf@fun <anonymous>(it: R|@EnhancedNullability kotlin/Boolean|): R|kotlin/Boolean| <inline=NoInline> {
R|<local>/collection|.R|SubstitutionOverride<kotlin/collections/MutableCollection.removeIf: R|kotlin/Boolean|>|(<L> = SAM(removeIf@fun <anonymous>(it: R|@EnhancedNullability kotlin/Boolean|): R|kotlin/Boolean| <inline=NoInline> {
^ R|<local>/it|
}
)
))
}
@@ -2,8 +2,8 @@ FILE: samForComparator.kt
public final fun foo(x: R|kotlin/Comparator<in kotlin/CharSequence>|): R|kotlin/Unit| {
}
public final fun main(): R|kotlin/Unit| {
R|/foo|(<L> = foo@fun <anonymous>(x: R|kotlin/CharSequence!|, y: R|kotlin/CharSequence!|): R|kotlin/Int| <inline=NoInline> {
R|/foo|(<L> = SAM(foo@fun <anonymous>(x: R|kotlin/CharSequence!|, y: R|kotlin/CharSequence!|): R|kotlin/Int| <inline=NoInline> {
^ R|<local>/x|.R|kotlin/CharSequence.length|.R|kotlin/Int.minus|(R|<local>/y|.R|kotlin/CharSequence.length|)
}
)
))
}
@@ -10,10 +10,10 @@ FILE: typeAliasWithForEach.kt
public final typealias Arguments = R|kotlin/collections/Map<kotlin/String, ArgsInfo>|
public final fun R|Arguments|.deepCopy(): R|Arguments| {
lval result: R|java/util/HashMap<kotlin/String, ArgsInfo>| = R|java/util/HashMap.HashMap|<R|kotlin/String|, R|ArgsInfo|>()
this@R|/deepCopy|.R|SubstitutionOverride<kotlin/collections/Map.forEach: R|kotlin/Unit|>|(<L> = forEach@fun <anonymous>(key: R|@EnhancedNullability kotlin/String|, value: R|@EnhancedNullability ArgsInfo|): R|kotlin/Unit| <inline=NoInline> {
this@R|/deepCopy|.R|SubstitutionOverride<kotlin/collections/Map.forEach: R|kotlin/Unit|>|(<L> = SAM(forEach@fun <anonymous>(key: R|@EnhancedNullability kotlin/String|, value: R|@EnhancedNullability ArgsInfo|): R|kotlin/Unit| <inline=NoInline> {
R|<local>/result|.R|kotlin/collections/set|<R|kotlin/String|, R|ArgsInfo|>(R|<local>/key|, R|/ArgsInfoImpl.ArgsInfoImpl|(R|<local>/value|))
Unit
}
)
))
^deepCopy R|<local>/result|
}