FIR checker: substitute type parameters in dispatch receiver type
Consider the following code:
```
fun test(a: List<String>) {
a.first()
}
```
The dispatch receiver type of `first` in this case is `List<T>` before
this change. After this change, it's `List<String>`.
In addition, this change also replace the dispatch receiver type with
the more specific type if available. For example, consider the following
```
class MyList: ArrayList<String>()
fun test(a: MyList) {
a.get(0)
}
```
The dispatch receiver type of `get` is `MyList`, instead of
`ArrayList<String>`. That is, a fake override is created in this case.
This commit is contained in:
committed by
teamcityserver
parent
c047adbaec
commit
765cad8448
@@ -461,8 +461,8 @@ KtFirFunctionSymbol:
|
||||
annotatedType: [] kotlin/Boolean
|
||||
annotationClassIds: []
|
||||
annotations: []
|
||||
callableIdIfNonLocal: kotlin/collections/List.isEmpty
|
||||
dispatchType: kotlin/collections/List<E>
|
||||
callableIdIfNonLocal: kotlin/collections/MutableList.isEmpty
|
||||
dispatchType: kotlin/collections/MutableList<E>
|
||||
hasStableParameterNames: true
|
||||
isExtension: false
|
||||
isExternal: false
|
||||
@@ -538,11 +538,11 @@ KtFirKotlinPropertySymbol:
|
||||
annotatedType: [] kotlin/Int
|
||||
annotationClassIds: []
|
||||
annotations: []
|
||||
callableIdIfNonLocal: kotlin/collections/List.size
|
||||
dispatchType: kotlin/collections/List<E>
|
||||
getter: KtFirPropertyGetterSymbol(<getter>)
|
||||
callableIdIfNonLocal: kotlin/collections/MutableList.size
|
||||
dispatchType: kotlin/collections/MutableList<E>
|
||||
getter: null
|
||||
hasBackingField: false
|
||||
hasGetter: true
|
||||
hasGetter: false
|
||||
hasSetter: false
|
||||
initializer: null
|
||||
isConst: false
|
||||
|
||||
+3
-3
@@ -1,4 +1,4 @@
|
||||
Resolved to:
|
||||
0: (in kotlin.collections.IntIterator) operator fun next(): kotlin.Int
|
||||
1: (in kotlin.collections.Iterator) operator fun hasNext(): kotlin.Boolean
|
||||
2: (in kotlin.ranges.IntProgression) open operator fun iterator(): kotlin.collections.IntIterator
|
||||
0: (in kotlin.collections.IntIterator) abstract operator fun hasNext(): kotlin.Boolean
|
||||
1: (in kotlin.collections.IntIterator) operator fun next(): kotlin.Int
|
||||
2: (in kotlin.ranges.IntProgression) open operator fun iterator(): kotlin.collections.IntIterator
|
||||
+3
-3
@@ -1,4 +1,4 @@
|
||||
Resolved to:
|
||||
0: (in kotlin.collections.CharIterator) operator fun next(): kotlin.Char
|
||||
1: (in kotlin.collections.Iterator) operator fun hasNext(): kotlin.Boolean
|
||||
2: (in kotlin.text) operator fun kotlin.CharSequence.iterator(): kotlin.collections.CharIterator
|
||||
0: (in kotlin.collections.CharIterator) abstract operator fun hasNext(): kotlin.Boolean
|
||||
1: (in kotlin.collections.CharIterator) operator fun next(): kotlin.Char
|
||||
2: (in kotlin.text) operator fun kotlin.CharSequence.iterator(): kotlin.collections.CharIterator
|
||||
+2
-2
@@ -2,6 +2,6 @@ KT element: KtForExpression
|
||||
FIR element: FirWhileLoopImpl
|
||||
|
||||
FIR element rendered:
|
||||
while(R|<local>/<iterator>|.R|kotlin/collections/Iterator.hasNext|()) {
|
||||
while(R|<local>/<iterator>|.R|SubstitutionOverride<kotlin/collections/IntIterator.hasNext: R|kotlin/Boolean|>|()) {
|
||||
lval x: R|kotlin/Int| = R|<local>/<iterator>|.R|kotlin/collections/IntIterator.next|()
|
||||
}
|
||||
}
|
||||
+6
@@ -596,6 +596,12 @@ public class DiagnosisCompilerTestFE10TestdataTestGenerated extends AbstractDiag
|
||||
runTest("compiler/testData/diagnostics/tests/PropertyInitializers.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("protectedWithGenericsInDifferentPackage.kt")
|
||||
public void testProtectedWithGenericsInDifferentPackage() throws Exception {
|
||||
runTest("compiler/testData/diagnostics/tests/protectedWithGenericsInDifferentPackage.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("publishedApi.kt")
|
||||
public void testPublishedApi() throws Exception {
|
||||
|
||||
@@ -18,10 +18,10 @@ FILE: bareTypes2.kt
|
||||
|
||||
}
|
||||
public final fun test(x: R|A<*>|): R|kotlin/Unit| {
|
||||
when ((R|<local>/x| as? R|C|)?.{ $subj$.R|/A.field| }) {
|
||||
when ((R|<local>/x| as? R|C|)?.{ $subj$.R|SubstitutionOverride</C.field: R|kotlin/Any|>| }) {
|
||||
($subj$ is R|kotlin/String|) -> {
|
||||
when () {
|
||||
==((R|<local>/x| as? R|B<*>|)?.{ $subj$.R|/A.cond| }, Boolean(true)) -> {
|
||||
==((R|<local>/x| as? R|B<*>|)?.{ $subj$.R|SubstitutionOverride</B.cond: R|kotlin/Boolean|>| }, Boolean(true)) -> {
|
||||
R|<local>/x|.R|/C.foo|()
|
||||
}
|
||||
}
|
||||
|
||||
@@ -204,7 +204,7 @@ digraph complex_kt {
|
||||
color=blue
|
||||
62 [label="Enter loop condition"];
|
||||
63 [label="Access variable R|<local>/<iterator>|"];
|
||||
64 [label="Function call: R|<local>/<iterator>|.R|kotlin/collections/Iterator.hasNext|()"];
|
||||
64 [label="Function call: R|<local>/<iterator>|.R|SubstitutionOverride<kotlin/collections/Iterator.hasNext: R|kotlin/Boolean|>|()"];
|
||||
65 [label="Exit loop condition"];
|
||||
}
|
||||
subgraph cluster_23 {
|
||||
|
||||
@@ -27,7 +27,7 @@ FILE: complex.kt
|
||||
public final inline fun <reified T : R|kotlin/Any|> R|kotlin/collections/List<*>|.firstIsInstanceOrNull(): R|T?| {
|
||||
{
|
||||
lval <iterator>: R|kotlin/collections/Iterator<kotlin/Any?>| = this@R|/firstIsInstanceOrNull|.R|SubstitutionOverride<kotlin/collections/List.iterator: R|kotlin/collections/Iterator<CapturedType(*)>|>|()
|
||||
while(R|<local>/<iterator>|.R|kotlin/collections/Iterator.hasNext|()) {
|
||||
while(R|<local>/<iterator>|.R|SubstitutionOverride<kotlin/collections/Iterator.hasNext: R|kotlin/Boolean|>|()) {
|
||||
lval element: R|kotlin/Any?| = R|<local>/<iterator>|.R|SubstitutionOverride<kotlin/collections/Iterator.next: R|kotlin/Any?|>|()
|
||||
when () {
|
||||
(R|<local>/element| is R|T|) -> {
|
||||
|
||||
@@ -133,7 +133,7 @@ digraph loops_kt {
|
||||
color=blue
|
||||
45 [label="Enter loop condition"];
|
||||
46 [label="Access variable R|<local>/<iterator>|"];
|
||||
47 [label="Function call: R|<local>/<iterator>|.R|kotlin/collections/Iterator.hasNext|()"];
|
||||
47 [label="Function call: R|<local>/<iterator>|.R|SubstitutionOverride<kotlin/collections/IntIterator.hasNext: R|kotlin/Boolean|>|()"];
|
||||
48 [label="Exit loop condition"];
|
||||
}
|
||||
subgraph cluster_17 {
|
||||
|
||||
@@ -16,7 +16,7 @@ FILE: loops.kt
|
||||
public final fun testFor(x: R|kotlin/Any?|): R|kotlin/Unit| {
|
||||
{
|
||||
lval <iterator>: R|kotlin/collections/IntIterator| = Int(0).R|kotlin/Int.rangeTo|(Int(5)).R|kotlin/ranges/IntProgression.iterator|()
|
||||
while(R|<local>/<iterator>|.R|kotlin/collections/Iterator.hasNext|()) {
|
||||
while(R|<local>/<iterator>|.R|SubstitutionOverride<kotlin/collections/IntIterator.hasNext: R|kotlin/Boolean|>|()) {
|
||||
lval i: R|kotlin/Int| = R|<local>/<iterator>|.R|kotlin/collections/IntIterator.next|()
|
||||
lval y: R|kotlin/Boolean| = (R|<local>/x| is R|kotlin/String|)
|
||||
}
|
||||
|
||||
+12
-12
@@ -23,11 +23,11 @@ FILE: qualifiedSupertypeExtendedByOtherSupertype.kt
|
||||
}
|
||||
|
||||
public final fun test(): R|kotlin/Unit| {
|
||||
this@R|/Test|.super<R|IBase<kotlin/String>|>.R|/IBase.foo|()
|
||||
this@R|/Test|.super<R|IBase<kotlin/String>|>.R|/IBase.bar|()
|
||||
this@R|/Test|.super<R|IDerived<kotlin/String>|>.R|/IDerived.foo|()
|
||||
this@R|/Test|.super<R|IDerived<kotlin/String>|>.R|/IBase.bar|()
|
||||
this@R|/Test|.super<R|IDerived<kotlin/String>|>.R|/IDerived.qux|()
|
||||
this@R|/Test|.super<R|IBase<kotlin/String>|>.R|SubstitutionOverride</IBase.foo: R|kotlin/Unit|>|()
|
||||
this@R|/Test|.super<R|IBase<kotlin/String>|>.R|SubstitutionOverride</IBase.bar: R|kotlin/Unit|>|()
|
||||
this@R|/Test|.super<R|IDerived<kotlin/String>|>.R|SubstitutionOverride</IDerived.foo: R|kotlin/Unit|>|()
|
||||
this@R|/Test|.super<R|IDerived<kotlin/String>|>.R|SubstitutionOverride</IDerived.bar: R|kotlin/Unit|>|()
|
||||
this@R|/Test|.super<R|IDerived<kotlin/String>|>.R|SubstitutionOverride</IDerived.qux: R|kotlin/Unit|>|()
|
||||
}
|
||||
|
||||
}
|
||||
@@ -37,13 +37,13 @@ FILE: qualifiedSupertypeExtendedByOtherSupertype.kt
|
||||
}
|
||||
|
||||
public final fun test(): R|kotlin/Unit| {
|
||||
this@R|/Test2|.super<R|IBase<kotlin/String>|>.R|/IBase.foo|()
|
||||
this@R|/Test2|.super<R|IBase<kotlin/String>|>.R|/IBase.bar|()
|
||||
this@R|/Test2|.super<R|IBase<kotlin/String>|>.R|/IBase.foo|()
|
||||
this@R|/Test2|.super<R|IBase<kotlin/String>|>.R|/IBase.bar|()
|
||||
this@R|/Test2|.super<R|IDerived<kotlin/String>|>.R|/IDerived.foo|()
|
||||
this@R|/Test2|.super<R|IDerived<kotlin/String>|>.R|/IBase.bar|()
|
||||
this@R|/Test2|.super<R|IDerived<kotlin/String>|>.R|/IDerived.qux|()
|
||||
this@R|/Test2|.super<R|IBase<kotlin/String>|>.R|SubstitutionOverride</IBase.foo: R|kotlin/Unit|>|()
|
||||
this@R|/Test2|.super<R|IBase<kotlin/String>|>.R|SubstitutionOverride</IBase.bar: R|kotlin/Unit|>|()
|
||||
this@R|/Test2|.super<R|IBase<kotlin/String>|>.R|SubstitutionOverride</IBase.foo: R|kotlin/Unit|>|()
|
||||
this@R|/Test2|.super<R|IBase<kotlin/String>|>.R|SubstitutionOverride</IBase.bar: R|kotlin/Unit|>|()
|
||||
this@R|/Test2|.super<R|IDerived<kotlin/String>|>.R|SubstitutionOverride</IDerived.foo: R|kotlin/Unit|>|()
|
||||
this@R|/Test2|.super<R|IDerived<kotlin/String>|>.R|SubstitutionOverride</IDerived.bar: R|kotlin/Unit|>|()
|
||||
this@R|/Test2|.super<R|IDerived<kotlin/String>|>.R|SubstitutionOverride</IDerived.qux: R|kotlin/Unit|>|()
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
+1
-1
@@ -22,7 +22,7 @@ FILE: enumValues.kt
|
||||
lval values: R|kotlin/Array<MyEnum>| = Q|MyEnum|.R|/MyEnum.values|()
|
||||
{
|
||||
lval <iterator>: R|kotlin/collections/Iterator<MyEnum>| = R|<local>/values|.R|SubstitutionOverride<kotlin/Array.iterator: R|kotlin/collections/Iterator<MyEnum>|>|()
|
||||
while(R|<local>/<iterator>|.R|kotlin/collections/Iterator.hasNext|()) {
|
||||
while(R|<local>/<iterator>|.R|SubstitutionOverride<kotlin/collections/Iterator.hasNext: R|kotlin/Boolean|>|()) {
|
||||
lval value: R|MyEnum| = R|<local>/<iterator>|.R|SubstitutionOverride<kotlin/collections/Iterator.next: R|MyEnum|>|()
|
||||
R|<local>/value|.R|/MyEnum.bar|()
|
||||
}
|
||||
|
||||
+1
-1
@@ -5,7 +5,7 @@ FILE: test.kt
|
||||
}
|
||||
|
||||
public final override fun getLookupString(): R|kotlin/String| {
|
||||
^getLookupString this@R|/MyDecorator|.R|/MyDecorator.delegate|.R|/LookupElement.lookupString|
|
||||
^getLookupString this@R|/MyDecorator|.R|/Decorator.delegate|.R|/LookupElement.lookupString|
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
+1
-1
@@ -30,6 +30,6 @@ FILE: importedReceiver.kt
|
||||
(Q|My|, String()).R|/My.bar|<R|kotlin/String|>()
|
||||
Q|My|.R|/My.baz|()
|
||||
(Q|My|, Boolean(true)).R|/My.gau|()
|
||||
Q|My|.R|/Your.wat|()
|
||||
Q|My|.R|SubstitutionOverride</My.wat: R|kotlin/Unit|>|()
|
||||
(Q|My|, Boolean(false)).R|SubstitutionOverride</My.watwat: R|kotlin/Unit|>|<R|kotlin/Boolean|>()
|
||||
}
|
||||
|
||||
+2
-2
@@ -68,7 +68,7 @@ FILE: CanBeValChecker.kt
|
||||
R|<local>/a| = Int(1)
|
||||
{
|
||||
lval <iterator>: R|kotlin/collections/IntIterator| = Int(1).R|kotlin/Int.rangeTo|(Int(10)).R|kotlin/ranges/IntProgression.iterator|()
|
||||
while(R|<local>/<iterator>|.R|kotlin/collections/Iterator.hasNext|()) {
|
||||
while(R|<local>/<iterator>|.R|SubstitutionOverride<kotlin/collections/IntIterator.hasNext: R|kotlin/Boolean|>|()) {
|
||||
lval i: R|kotlin/Int| = R|<local>/<iterator>|.R|kotlin/collections/IntIterator.next|()
|
||||
R|kotlin/io/print|(R|<local>/i|)
|
||||
}
|
||||
@@ -171,7 +171,7 @@ FILE: CanBeValChecker.kt
|
||||
lvar a: R|kotlin/String?|
|
||||
lval unused: R|kotlin/Int| = Int(0)
|
||||
when () {
|
||||
==(R|<local>/args|.R|kotlin/Array.size|, Int(1)) -> {
|
||||
==(R|<local>/args|.R|SubstitutionOverride<kotlin/Array.size: R|kotlin/Int|>|, Int(1)) -> {
|
||||
R|<local>/a| = R|<local>/args|.R|SubstitutionOverride<kotlin/Array.get: R|kotlin/String?|>|(Int(0))
|
||||
}
|
||||
else -> {
|
||||
|
||||
Vendored
+3
-3
@@ -2,7 +2,7 @@ FILE: NoWarning.kt
|
||||
public final fun foo(): R|kotlin/Unit| {
|
||||
{
|
||||
lval <iterator>: R|kotlin/collections/IntIterator| = Int(1).R|kotlin/Int.rangeTo|(Int(2)).R|kotlin/ranges/IntProgression.iterator|()
|
||||
while(R|<local>/<iterator>|.R|kotlin/collections/Iterator.hasNext|()) {
|
||||
while(R|<local>/<iterator>|.R|SubstitutionOverride<kotlin/collections/IntIterator.hasNext: R|kotlin/Boolean|>|()) {
|
||||
lval i: R|kotlin/Int| = R|<local>/<iterator>|.R|kotlin/collections/IntIterator.next|()
|
||||
}
|
||||
|
||||
@@ -19,7 +19,7 @@ FILE: NoWarning.kt
|
||||
public final fun backward(): R|kotlin/Unit| {
|
||||
{
|
||||
lval <iterator>: R|kotlin/collections/IntIterator| = Int(2).R|kotlin/ranges/downTo|(Int(1)).R|kotlin/ranges/IntProgression.iterator|()
|
||||
while(R|<local>/<iterator>|.R|kotlin/collections/Iterator.hasNext|()) {
|
||||
while(R|<local>/<iterator>|.R|SubstitutionOverride<kotlin/collections/IntIterator.hasNext: R|kotlin/Boolean|>|()) {
|
||||
lval i: R|kotlin/Int| = R|<local>/<iterator>|.R|kotlin/collections/IntIterator.next|()
|
||||
}
|
||||
|
||||
@@ -36,7 +36,7 @@ FILE: NoWarning.kt
|
||||
public final fun until(): R|kotlin/Unit| {
|
||||
{
|
||||
lval <iterator>: R|kotlin/collections/IntIterator| = Int(1).R|kotlin/ranges/until|(Int(2)).R|kotlin/ranges/IntProgression.iterator|()
|
||||
while(R|<local>/<iterator>|.R|kotlin/collections/Iterator.hasNext|()) {
|
||||
while(R|<local>/<iterator>|.R|SubstitutionOverride<kotlin/collections/IntIterator.hasNext: R|kotlin/Boolean|>|()) {
|
||||
lval i: R|kotlin/Int| = R|<local>/<iterator>|.R|kotlin/collections/IntIterator.next|()
|
||||
}
|
||||
|
||||
|
||||
Vendored
+3
-3
@@ -2,7 +2,7 @@ FILE: Warning.kt
|
||||
public final fun foo(): R|kotlin/Unit| {
|
||||
{
|
||||
lval <iterator>: R|kotlin/collections/IntIterator| = Int(2).R|kotlin/Int.rangeTo|(Int(1)).R|kotlin/ranges/IntProgression.iterator|()
|
||||
while(R|<local>/<iterator>|.R|kotlin/collections/Iterator.hasNext|()) {
|
||||
while(R|<local>/<iterator>|.R|SubstitutionOverride<kotlin/collections/IntIterator.hasNext: R|kotlin/Boolean|>|()) {
|
||||
lval i: R|kotlin/Int| = R|<local>/<iterator>|.R|kotlin/collections/IntIterator.next|()
|
||||
}
|
||||
|
||||
@@ -19,7 +19,7 @@ FILE: Warning.kt
|
||||
public final fun backward(): R|kotlin/Unit| {
|
||||
{
|
||||
lval <iterator>: R|kotlin/collections/IntIterator| = Int(1).R|kotlin/ranges/downTo|(Int(2)).R|kotlin/ranges/IntProgression.iterator|()
|
||||
while(R|<local>/<iterator>|.R|kotlin/collections/Iterator.hasNext|()) {
|
||||
while(R|<local>/<iterator>|.R|SubstitutionOverride<kotlin/collections/IntIterator.hasNext: R|kotlin/Boolean|>|()) {
|
||||
lval i: R|kotlin/Int| = R|<local>/<iterator>|.R|kotlin/collections/IntIterator.next|()
|
||||
}
|
||||
|
||||
@@ -36,7 +36,7 @@ FILE: Warning.kt
|
||||
public final fun until(): R|kotlin/Unit| {
|
||||
{
|
||||
lval <iterator>: R|kotlin/collections/IntIterator| = Int(1).R|kotlin/ranges/until|(Int(1)).R|kotlin/ranges/IntProgression.iterator|()
|
||||
while(R|<local>/<iterator>|.R|kotlin/collections/Iterator.hasNext|()) {
|
||||
while(R|<local>/<iterator>|.R|SubstitutionOverride<kotlin/collections/IntIterator.hasNext: R|kotlin/Boolean|>|()) {
|
||||
lval i: R|kotlin/Int| = R|<local>/<iterator>|.R|kotlin/collections/IntIterator.next|()
|
||||
}
|
||||
|
||||
|
||||
Vendored
+1
-1
@@ -5,7 +5,7 @@ FILE: manyLocalVariables.kt
|
||||
lvar c: R|kotlin/Int| = Int(3)
|
||||
{
|
||||
lval <iterator>: R|kotlin/collections/IntIterator| = Int(0).R|kotlin/Int.rangeTo|(Int(5)).R|kotlin/ranges/IntProgression.iterator|()
|
||||
while(R|<local>/<iterator>|.R|kotlin/collections/Iterator.hasNext|()) {
|
||||
while(R|<local>/<iterator>|.R|SubstitutionOverride<kotlin/collections/IntIterator.hasNext: R|kotlin/Boolean|>|()) {
|
||||
lval i: R|kotlin/Int| = R|<local>/<iterator>|.R|kotlin/collections/IntIterator.next|()
|
||||
when () {
|
||||
==(R|<local>/a|, Int(2)) -> {
|
||||
|
||||
@@ -10,7 +10,7 @@ FILE: fib.kt
|
||||
lvar prev: R|kotlin/Int| = Int(1)
|
||||
{
|
||||
lval <iterator>: R|kotlin/collections/IntIterator| = Int(2).R|kotlin/Int.rangeTo|(R|<local>/n|).R|kotlin/ranges/IntProgression.iterator|()
|
||||
while(R|<local>/<iterator>|.R|kotlin/collections/Iterator.hasNext|()) {
|
||||
while(R|<local>/<iterator>|.R|SubstitutionOverride<kotlin/collections/IntIterator.hasNext: R|kotlin/Boolean|>|()) {
|
||||
lval i: R|kotlin/Int| = R|<local>/<iterator>|.R|kotlin/collections/IntIterator.next|()
|
||||
lval temp: R|kotlin/Int| = R|<local>/current|
|
||||
R|<local>/current| = R|<local>/current|.R|kotlin/Int.plus|(R|<local>/prev|)
|
||||
|
||||
+2
-2
@@ -7,7 +7,7 @@ FILE: nestedExtensionFunctionType.kt
|
||||
public final fun test_1(a: R|A|, ys: R|kotlin/collections/List<@ExtensionFunctionType kotlin/Function1<A, kotlin/Unit>>|): R|kotlin/Unit| {
|
||||
{
|
||||
lval <iterator>: R|kotlin/collections/Iterator<@ExtensionFunctionType kotlin/Function1<A, kotlin/Unit>>| = R|<local>/ys|.R|SubstitutionOverride<kotlin/collections/List.iterator: R|kotlin/collections/Iterator<@ExtensionFunctionType kotlin/Function1<A, kotlin/Unit>>|>|()
|
||||
while(R|<local>/<iterator>|.R|kotlin/collections/Iterator.hasNext|()) {
|
||||
while(R|<local>/<iterator>|.R|SubstitutionOverride<kotlin/collections/Iterator.hasNext: R|kotlin/Boolean|>|()) {
|
||||
lval y: R|(A) -> kotlin/Unit| = R|<local>/<iterator>|.R|SubstitutionOverride<kotlin/collections/Iterator.next: R|(A) -> kotlin/Unit|>|()
|
||||
R|<local>/y|.R|SubstitutionOverride<kotlin/Function1.invoke: R|kotlin/Unit|>|(R|<local>/a|)
|
||||
}
|
||||
@@ -18,7 +18,7 @@ FILE: nestedExtensionFunctionType.kt
|
||||
public final fun test_2(a: R|A|, vararg zs: R|kotlin/Array<out @ExtensionFunctionType kotlin/Function1<A, kotlin/Unit>>|): R|kotlin/Unit| {
|
||||
{
|
||||
lval <iterator>: R|kotlin/collections/Iterator<@ExtensionFunctionType kotlin/Function1<A, kotlin/Unit>>| = R|<local>/zs|.R|SubstitutionOverride<kotlin/Array.iterator: R|kotlin/collections/Iterator<CapturedType(out @ExtensionFunctionType kotlin/Function1<A, kotlin/Unit>)>|>|()
|
||||
while(R|<local>/<iterator>|.R|kotlin/collections/Iterator.hasNext|()) {
|
||||
while(R|<local>/<iterator>|.R|SubstitutionOverride<kotlin/collections/Iterator.hasNext: R|kotlin/Boolean|>|()) {
|
||||
lval z: R|(A) -> kotlin/Unit| = R|<local>/<iterator>|.R|SubstitutionOverride<kotlin/collections/Iterator.next: R|(A) -> kotlin/Unit|>|()
|
||||
R|<local>/z|.R|SubstitutionOverride<kotlin/Function1.invoke: R|kotlin/Unit|>|(R|<local>/a|)
|
||||
}
|
||||
|
||||
+2
-2
@@ -13,9 +13,9 @@ FILE: compilerPhase.kt
|
||||
|
||||
}
|
||||
public final inline fun <R, D> R|PhaserState<D>|.downlevel(nlevels: R|kotlin/Int|, block: R|() -> R|): R|R| {
|
||||
this@R|/downlevel|.R|/PhaserState.depth| = this@R|/downlevel|.R|/PhaserState.depth|.R|kotlin/Int.plus|(R|<local>/nlevels|)
|
||||
this@R|/downlevel|.R|SubstitutionOverride</PhaserState.depth: R|kotlin/Int|>| = this@R|/downlevel|.R|SubstitutionOverride</PhaserState.depth: R|kotlin/Int|>|.R|kotlin/Int.plus|(R|<local>/nlevels|)
|
||||
lval result: R|R| = R|<local>/block|.R|SubstitutionOverride<kotlin/Function0.invoke: R|R|>|()
|
||||
this@R|/downlevel|.R|/PhaserState.depth| = this@R|/downlevel|.R|/PhaserState.depth|.R|kotlin/Int.minus|(R|<local>/nlevels|)
|
||||
this@R|/downlevel|.R|SubstitutionOverride</PhaserState.depth: R|kotlin/Int|>| = this@R|/downlevel|.R|SubstitutionOverride</PhaserState.depth: R|kotlin/Int|>|.R|kotlin/Int.minus|(R|<local>/nlevels|)
|
||||
^downlevel R|<local>/result|
|
||||
}
|
||||
public abstract interface CompilerPhase<in Context : R|CommonBackendContext|, Input, Output> : R|kotlin/Any| {
|
||||
|
||||
+2
-2
@@ -22,11 +22,11 @@ FILE: main.kt
|
||||
|
||||
}
|
||||
public final fun main(d1: R|D1|, e1: R|E1|, d2: R|D2|, e2: R|E2|): R|kotlin/Unit| {
|
||||
R|<local>/d1|.R|/D1.foo|
|
||||
R|<local>/d1|.R|/KB.foo|
|
||||
R|<local>/d1|.<Unresolved name: bar>#
|
||||
R|<local>/e1|.R|/E1.foo|
|
||||
R|<local>/e1|.<Unresolved name: bar>#
|
||||
R|<local>/d2|.R|/D2.foo|
|
||||
R|<local>/d2|.R|/KB.foo|
|
||||
R|<local>/d2|.<Unresolved name: bar>#
|
||||
R|<local>/e2|.R|/E2.foo|
|
||||
R|<local>/e2|.<Unresolved name: bar>#
|
||||
|
||||
+2
-2
@@ -54,7 +54,7 @@ digraph boundSmartcastsInBranches_kt {
|
||||
color=blue
|
||||
18 [label="Enter loop condition"];
|
||||
19 [label="Access variable R|<local>/<iterator>|"];
|
||||
20 [label="Function call: R|<local>/<iterator>|.R|kotlin/collections/Iterator.hasNext|()"];
|
||||
20 [label="Function call: R|<local>/<iterator>|.R|SubstitutionOverride<kotlin/collections/Iterator.hasNext: R|kotlin/Boolean|>|()"];
|
||||
21 [label="Exit loop condition"];
|
||||
}
|
||||
subgraph cluster_8 {
|
||||
@@ -84,7 +84,7 @@ digraph boundSmartcastsInBranches_kt {
|
||||
35 [label="Enter block"];
|
||||
36 [label="Access variable R|<local>/a|"];
|
||||
37 [label="Assignment: R|<local>/goodA|"];
|
||||
38 [label="Jump: continue@@@[R|<local>/<iterator>|.R|kotlin/collections/Iterator.hasNext|()] "];
|
||||
38 [label="Jump: continue@@@[R|<local>/<iterator>|.R|SubstitutionOverride<kotlin/collections/Iterator.hasNext: R|kotlin/Boolean|>|()] "];
|
||||
39 [label="Stub" style="filled" fillcolor=gray];
|
||||
40 [label="Exit block" style="filled" fillcolor=gray];
|
||||
}
|
||||
|
||||
+2
-2
@@ -12,12 +12,12 @@ FILE: boundSmartcastsInBranches.kt
|
||||
lvar goodA: R|A?| = Null(null)
|
||||
{
|
||||
lval <iterator>: R|kotlin/collections/Iterator<A>| = R|<local>/list|.R|SubstitutionOverride<kotlin/collections/List.iterator: R|kotlin/collections/Iterator<A>|>|()
|
||||
while(R|<local>/<iterator>|.R|kotlin/collections/Iterator.hasNext|()) {
|
||||
while(R|<local>/<iterator>|.R|SubstitutionOverride<kotlin/collections/Iterator.hasNext: R|kotlin/Boolean|>|()) {
|
||||
lval a: R|A| = R|<local>/<iterator>|.R|SubstitutionOverride<kotlin/collections/Iterator.next: R|A|>|()
|
||||
when () {
|
||||
==(R|<local>/goodA|, Null(null)) -> {
|
||||
R|<local>/goodA| = R|<local>/a|
|
||||
continue@@@[R|<local>/<iterator>|.R|kotlin/collections/Iterator.hasNext|()]
|
||||
continue@@@[R|<local>/<iterator>|.R|SubstitutionOverride<kotlin/collections/Iterator.hasNext: R|kotlin/Boolean|>|()]
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Vendored
+6
-6
@@ -51,7 +51,7 @@ digraph implicitReceiverAsWhenSubject_kt {
|
||||
color=blue
|
||||
23 [label="Enter block"];
|
||||
24 [label="Access variable this@R|/test_1|"];
|
||||
25 [label="Access variable R|kotlin/collections/List.size|"];
|
||||
25 [label="Access variable R|SubstitutionOverride<kotlin/collections/List.size: R|kotlin/Int|>|"];
|
||||
26 [label="Exit block"];
|
||||
}
|
||||
27 [label="Exit when branch result"];
|
||||
@@ -59,7 +59,7 @@ digraph implicitReceiverAsWhenSubject_kt {
|
||||
}
|
||||
29 [label="Jump: ^test_1 when (this@R|/test_1|) {
|
||||
($subj$ is R|kotlin/collections/List<*>|) -> {
|
||||
this@R|/test_1|.R|kotlin/collections/List.size|
|
||||
this@R|/test_1|.R|SubstitutionOverride<kotlin/collections/List.size: R|kotlin/Int|>|
|
||||
}
|
||||
($subj$ is R|kotlin/String|) -> {
|
||||
this@R|/test_1|.R|kotlin/String.length|
|
||||
@@ -159,9 +159,9 @@ digraph implicitReceiverAsWhenSubject_kt {
|
||||
color=blue
|
||||
59 [label="Enter block"];
|
||||
60 [label="Access variable R|<local>/x|"];
|
||||
61 [label="Access variable R|kotlin/collections/List.size|"];
|
||||
61 [label="Access variable R|SubstitutionOverride<kotlin/collections/List.size: R|kotlin/Int|>|"];
|
||||
62 [label="Access variable this@R|/test_2|"];
|
||||
63 [label="Access variable R|kotlin/collections/List.size|"];
|
||||
63 [label="Access variable R|SubstitutionOverride<kotlin/collections/List.size: R|kotlin/Int|>|"];
|
||||
64 [label="Exit block"];
|
||||
}
|
||||
65 [label="Exit when branch result"];
|
||||
@@ -169,8 +169,8 @@ digraph implicitReceiverAsWhenSubject_kt {
|
||||
}
|
||||
67 [label="Jump: ^test_2 when (lval x: R|kotlin/Any| = this@R|/test_2|) {
|
||||
($subj$ is R|kotlin/collections/List<*>|) -> {
|
||||
R|<local>/x|.R|kotlin/collections/List.size|
|
||||
this@R|/test_2|.R|kotlin/collections/List.size|
|
||||
R|<local>/x|.R|SubstitutionOverride<kotlin/collections/List.size: R|kotlin/Int|>|
|
||||
this@R|/test_2|.R|SubstitutionOverride<kotlin/collections/List.size: R|kotlin/Int|>|
|
||||
}
|
||||
($subj$ is R|kotlin/String|) -> {
|
||||
R|<local>/x|.R|kotlin/String.length|
|
||||
|
||||
+3
-3
@@ -2,7 +2,7 @@ FILE: implicitReceiverAsWhenSubject.kt
|
||||
public final fun R|kotlin/Any|.test_1(): R|kotlin/Int| {
|
||||
^test_1 when (this@R|/test_1|) {
|
||||
($subj$ is R|kotlin/collections/List<*>|) -> {
|
||||
this@R|/test_1|.R|kotlin/collections/List.size|
|
||||
this@R|/test_1|.R|SubstitutionOverride<kotlin/collections/List.size: R|kotlin/Int|>|
|
||||
}
|
||||
($subj$ is R|kotlin/String|) -> {
|
||||
this@R|/test_1|.R|kotlin/String.length|
|
||||
@@ -16,8 +16,8 @@ FILE: implicitReceiverAsWhenSubject.kt
|
||||
public final fun R|kotlin/Any|.test_2(): R|kotlin/Int| {
|
||||
^test_2 when (lval x: R|kotlin/Any| = this@R|/test_2|) {
|
||||
($subj$ is R|kotlin/collections/List<*>|) -> {
|
||||
R|<local>/x|.R|kotlin/collections/List.size|
|
||||
this@R|/test_2|.R|kotlin/collections/List.size|
|
||||
R|<local>/x|.R|SubstitutionOverride<kotlin/collections/List.size: R|kotlin/Int|>|
|
||||
this@R|/test_2|.R|SubstitutionOverride<kotlin/collections/List.size: R|kotlin/Int|>|
|
||||
}
|
||||
($subj$ is R|kotlin/String|) -> {
|
||||
R|<local>/x|.R|kotlin/String.length|
|
||||
|
||||
+3
-3
@@ -547,7 +547,7 @@ digraph implicitReceivers_kt {
|
||||
subgraph cluster_52 {
|
||||
color=blue
|
||||
202 [label="Enter block"];
|
||||
203 [label="Access variable R|kotlin/collections/List.size|"];
|
||||
203 [label="Access variable R|SubstitutionOverride<kotlin/collections/List.size: R|kotlin/Int|>|"];
|
||||
204 [label="Exit block"];
|
||||
}
|
||||
205 [label="Exit when branch result"];
|
||||
@@ -555,7 +555,7 @@ digraph implicitReceivers_kt {
|
||||
}
|
||||
207 [label="Jump: ^test_5 when () {
|
||||
(this@R|/test_5| is R|kotlin/collections/List<*>|) -> {
|
||||
this@R|/test_5|.R|kotlin/collections/List.size|
|
||||
this@R|/test_5|.R|SubstitutionOverride<kotlin/collections/List.size: R|kotlin/Int|>|
|
||||
}
|
||||
(this@R|/test_5| is R|kotlin/String|) -> {
|
||||
this@R|/test_5|.R|kotlin/String.length|
|
||||
@@ -612,7 +612,7 @@ digraph implicitReceivers_kt {
|
||||
212 [label="Enter block"];
|
||||
213 [label="Access variable this@R|/test_6|"];
|
||||
214 [label="Type operator: (this@R|/test_6| as R|kotlin/collections/List<*>|)"];
|
||||
215 [label="Access variable R|kotlin/collections/List.size|"];
|
||||
215 [label="Access variable R|SubstitutionOverride<kotlin/collections/List.size: R|kotlin/Int|>|"];
|
||||
216 [label="Access variable this@R|/test_6|"];
|
||||
217 [label="Type operator: (this@R|/test_6| as R|kotlin/String|)"];
|
||||
218 [label="Access variable R|kotlin/String.length|"];
|
||||
|
||||
Vendored
+2
-2
@@ -100,7 +100,7 @@ FILE: implicitReceivers.kt
|
||||
public final fun R|kotlin/Any|.test_5(): R|kotlin/Int| {
|
||||
^test_5 when () {
|
||||
(this@R|/test_5| is R|kotlin/collections/List<*>|) -> {
|
||||
this@R|/test_5|.R|kotlin/collections/List.size|
|
||||
this@R|/test_5|.R|SubstitutionOverride<kotlin/collections/List.size: R|kotlin/Int|>|
|
||||
}
|
||||
(this@R|/test_5| is R|kotlin/String|) -> {
|
||||
this@R|/test_5|.R|kotlin/String.length|
|
||||
@@ -113,7 +113,7 @@ FILE: implicitReceivers.kt
|
||||
}
|
||||
public final fun R|kotlin/Any|.test_6(): R|kotlin/Unit| {
|
||||
(this@R|/test_6| as R|kotlin/collections/List<*>|)
|
||||
this@R|/test_6|.R|kotlin/collections/List.size|
|
||||
this@R|/test_6|.R|SubstitutionOverride<kotlin/collections/List.size: R|kotlin/Int|>|
|
||||
(this@R|/test_6| as R|kotlin/String|)
|
||||
this@R|/test_6|.R|kotlin/String.length|
|
||||
}
|
||||
|
||||
+2
-2
@@ -181,7 +181,7 @@ digraph smartcastToNothing_kt {
|
||||
color=blue
|
||||
61 [label="Enter loop condition"];
|
||||
62 [label="Access variable R|<local>/<iterator>|"];
|
||||
63 [label="Function call: R|<local>/<iterator>|.R|kotlin/collections/Iterator.hasNext|()"];
|
||||
63 [label="Function call: R|<local>/<iterator>|.R|SubstitutionOverride<kotlin/collections/Iterator.hasNext: R|kotlin/Boolean|>|()"];
|
||||
64 [label="Exit loop condition"];
|
||||
}
|
||||
subgraph cluster_19 {
|
||||
@@ -213,7 +213,7 @@ digraph smartcastToNothing_kt {
|
||||
subgraph cluster_23 {
|
||||
color=blue
|
||||
82 [label="Enter block" style="filled" fillcolor=gray];
|
||||
83 [label="Jump: break@@@[R|<local>/<iterator>|.R|kotlin/collections/Iterator.hasNext|()] " style="filled" fillcolor=gray];
|
||||
83 [label="Jump: break@@@[R|<local>/<iterator>|.R|SubstitutionOverride<kotlin/collections/Iterator.hasNext: R|kotlin/Boolean|>|()] " style="filled" fillcolor=gray];
|
||||
84 [label="Stub" style="filled" fillcolor=gray];
|
||||
85 [label="Exit block" style="filled" fillcolor=gray];
|
||||
}
|
||||
|
||||
+2
-2
@@ -32,12 +32,12 @@ FILE: smartcastToNothing.kt
|
||||
lvar s: R|A?| = Null(null)
|
||||
{
|
||||
lval <iterator>: R|kotlin/collections/Iterator<kotlin/Nothing>| = R|<local>/results|.R|SubstitutionOverride<kotlin/collections/List.iterator: R|kotlin/collections/Iterator<kotlin/Nothing>|>|()
|
||||
while(R|<local>/<iterator>|.R|kotlin/collections/Iterator.hasNext|()) {
|
||||
while(R|<local>/<iterator>|.R|SubstitutionOverride<kotlin/collections/Iterator.hasNext: R|kotlin/Boolean|>|()) {
|
||||
lval result: R|kotlin/Nothing| = R|<local>/<iterator>|.R|SubstitutionOverride<kotlin/collections/Iterator.next: R|kotlin/Nothing|>|()
|
||||
R|<local>/s| = R|<local>/result|
|
||||
when () {
|
||||
R|<local>/result|.<Unresolved name: b># -> {
|
||||
break@@@[R|<local>/<iterator>|.R|kotlin/collections/Iterator.hasNext|()]
|
||||
break@@@[R|<local>/<iterator>|.R|SubstitutionOverride<kotlin/collections/Iterator.hasNext: R|kotlin/Boolean|>|()]
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+2
-2
@@ -11,7 +11,7 @@ FILE: varargInPrimaryConstructor.kt
|
||||
public final fun test_1(foo: R|Foo|): R|kotlin/Unit| {
|
||||
{
|
||||
lval <iterator>: R|kotlin/collections/Iterator<kotlin/String>| = R|<local>/foo|.R|/Foo.strings|.R|SubstitutionOverride<kotlin/Array.iterator: R|kotlin/collections/Iterator<CapturedType(out kotlin/String)>|>|()
|
||||
while(R|<local>/<iterator>|.R|kotlin/collections/Iterator.hasNext|()) {
|
||||
while(R|<local>/<iterator>|.R|SubstitutionOverride<kotlin/collections/Iterator.hasNext: R|kotlin/Boolean|>|()) {
|
||||
lval s: R|kotlin/String| = R|<local>/<iterator>|.R|SubstitutionOverride<kotlin/collections/Iterator.next: R|kotlin/String|>|()
|
||||
R|<local>/s|.R|kotlin/String.length|
|
||||
}
|
||||
@@ -22,7 +22,7 @@ FILE: varargInPrimaryConstructor.kt
|
||||
public final fun test_2(vararg strings: R|kotlin/Array<out kotlin/String>|): R|kotlin/Unit| {
|
||||
{
|
||||
lval <iterator>: R|kotlin/collections/Iterator<kotlin/String>| = R|<local>/strings|.R|SubstitutionOverride<kotlin/Array.iterator: R|kotlin/collections/Iterator<CapturedType(out kotlin/String)>|>|()
|
||||
while(R|<local>/<iterator>|.R|kotlin/collections/Iterator.hasNext|()) {
|
||||
while(R|<local>/<iterator>|.R|SubstitutionOverride<kotlin/collections/Iterator.hasNext: R|kotlin/Boolean|>|()) {
|
||||
lval s: R|kotlin/String| = R|<local>/<iterator>|.R|SubstitutionOverride<kotlin/collections/Iterator.next: R|kotlin/String|>|()
|
||||
R|<local>/s|.R|kotlin/String.length|
|
||||
}
|
||||
|
||||
@@ -20,7 +20,7 @@ FILE: components.kt
|
||||
public final fun foo(list: R|kotlin/collections/List<D>|): R|kotlin/Unit| {
|
||||
{
|
||||
lval <iterator>: R|kotlin/collections/Iterator<D>| = R|<local>/list|.R|SubstitutionOverride<kotlin/collections/List.iterator: R|kotlin/collections/Iterator<D>|>|()
|
||||
while(R|<local>/<iterator>|.R|kotlin/collections/Iterator.hasNext|()) {
|
||||
while(R|<local>/<iterator>|.R|SubstitutionOverride<kotlin/collections/Iterator.hasNext: R|kotlin/Boolean|>|()) {
|
||||
lval <destruct>: R|D| = R|<local>/<iterator>|.R|SubstitutionOverride<kotlin/collections/Iterator.next: R|D|>|()
|
||||
lval x: R|kotlin/Int| = R|<local>/<destruct>|.R|/D.component1|()
|
||||
lval y: R|kotlin/String| = R|<local>/<destruct>|.R|/D.component2|()
|
||||
|
||||
+1
-1
@@ -143,7 +143,7 @@ digraph flow_kt {
|
||||
color=blue
|
||||
64 [label="Enter loop condition"];
|
||||
65 [label="Access variable R|<local>/<iterator>|"];
|
||||
66 [label="Function call: R|<local>/<iterator>|.R|kotlin/collections/Iterator.hasNext|()"];
|
||||
66 [label="Function call: R|<local>/<iterator>|.R|SubstitutionOverride<kotlin/collections/IntIterator.hasNext: R|kotlin/Boolean|>|()"];
|
||||
67 [label="Exit loop condition"];
|
||||
}
|
||||
subgraph cluster_20 {
|
||||
|
||||
+1
-1
@@ -28,7 +28,7 @@ FILE: flow.kt
|
||||
Boolean(true) -> {
|
||||
{
|
||||
lval <iterator>: R|kotlin/collections/IntIterator| = Int(0).R|kotlin/Int.rangeTo|(Int(0)).R|kotlin/ranges/IntProgression.iterator|()
|
||||
while(R|<local>/<iterator>|.R|kotlin/collections/Iterator.hasNext|()) {
|
||||
while(R|<local>/<iterator>|.R|SubstitutionOverride<kotlin/collections/IntIterator.hasNext: R|kotlin/Boolean|>|()) {
|
||||
lval i: R|kotlin/Int| = R|<local>/<iterator>|.R|kotlin/collections/IntIterator.next|()
|
||||
R|<local>/x|.R|SubstitutionOverride<kotlin/Function0.invoke: R|kotlin/Unit|>|()
|
||||
}
|
||||
|
||||
+1
-1
@@ -253,7 +253,7 @@ FILE: forLoopChecker.kt
|
||||
|
||||
{
|
||||
lval <iterator>: R|kotlin/collections/Iterator<kotlin/Int>| = R|<local>/range1|.R|/Range1.iterator|()
|
||||
while(R|<local>/<iterator>|.R|kotlin/collections/Iterator.hasNext|()) {
|
||||
while(R|<local>/<iterator>|.R|SubstitutionOverride<kotlin/collections/Iterator.hasNext: R|kotlin/Boolean|>|()) {
|
||||
lval i: R|kotlin/Int| = R|<local>/<iterator>|.R|SubstitutionOverride<kotlin/collections/Iterator.next: R|kotlin/Int|>|()
|
||||
}
|
||||
|
||||
|
||||
+1
-1
@@ -44,7 +44,7 @@ FILE: DeepCopyIrTree.kt
|
||||
this@R|/DeepCopyIrTreeWithSymbols|.R|/DeepCopyIrTreeWithSymbols.typeRemapper|.R|/withinScope|<R|kotlin/Unit|>(this@R|/DeepCopyIrTreeWithSymbols.copyTypeParametersFrom|, <L> = withinScope@fun <anonymous>(): R|kotlin/Unit| <inline=Inline, kind=UNKNOWN> {
|
||||
{
|
||||
lval <iterator>: R|kotlin/collections/Iterator<kotlin/Pair<IrTypeParameter, IrTypeParameter>>| = this@R|/DeepCopyIrTreeWithSymbols.copyTypeParametersFrom|.R|/IrTypeParametersContainer.typeParameters|.R|kotlin/collections/zip|<R|IrTypeParameter|, R|IrTypeParameter|>(R|<local>/other|.R|/IrTypeParametersContainer.typeParameters|).R|SubstitutionOverride<kotlin/collections/List.iterator: R|kotlin/collections/Iterator<kotlin/Pair<IrTypeParameter, IrTypeParameter>>|>|()
|
||||
while(R|<local>/<iterator>|.R|kotlin/collections/Iterator.hasNext|()) {
|
||||
while(R|<local>/<iterator>|.R|SubstitutionOverride<kotlin/collections/Iterator.hasNext: R|kotlin/Boolean|>|()) {
|
||||
lval <destruct>: R|kotlin/Pair<IrTypeParameter, IrTypeParameter>| = R|<local>/<iterator>|.R|SubstitutionOverride<kotlin/collections/Iterator.next: R|kotlin/Pair<IrTypeParameter, IrTypeParameter>|>|()
|
||||
lval thisTypeParameter: R|IrTypeParameter| = R|<local>/<destruct>|.R|SubstitutionOverride<kotlin/Pair.component1: R|IrTypeParameter|>|()
|
||||
lval otherTypeParameter: R|IrTypeParameter| = R|<local>/<destruct>|.R|SubstitutionOverride<kotlin/Pair.component2: R|IrTypeParameter|>|()
|
||||
|
||||
+2
-2
@@ -46,10 +46,10 @@ FILE: valueOfOrNull.kt
|
||||
public final inline fun <reified E : R|kotlin/Enum<E>|> valueOfOrNull(value: R|kotlin/String|): R|E?| {
|
||||
{
|
||||
lval <iterator>: R|kotlin/collections/Iterator<E>| = R|kotlin/enumValues|<R|E|>().R|SubstitutionOverride<kotlin/Array.iterator: R|kotlin/collections/Iterator<E>|>|()
|
||||
while(R|<local>/<iterator>|.R|kotlin/collections/Iterator.hasNext|()) {
|
||||
while(R|<local>/<iterator>|.R|SubstitutionOverride<kotlin/collections/Iterator.hasNext: R|kotlin/Boolean|>|()) {
|
||||
lval enumValue: R|E| = R|<local>/<iterator>|.R|SubstitutionOverride<kotlin/collections/Iterator.next: R|E|>|()
|
||||
when () {
|
||||
==(R|<local>/enumValue|.R|kotlin/Enum.name|, R|<local>/value|) -> {
|
||||
==(R|<local>/enumValue|.R|SubstitutionOverride<kotlin/Enum.name: R|kotlin/String|>|, R|<local>/value|) -> {
|
||||
^valueOfOrNull R|<local>/enumValue|
|
||||
}
|
||||
}
|
||||
|
||||
+6
@@ -596,6 +596,12 @@ public class FirOldFrontendDiagnosticsTestGenerated extends AbstractFirDiagnosti
|
||||
runTest("compiler/testData/diagnostics/tests/PropertyInitializers.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("protectedWithGenericsInDifferentPackage.kt")
|
||||
public void testProtectedWithGenericsInDifferentPackage() throws Exception {
|
||||
runTest("compiler/testData/diagnostics/tests/protectedWithGenericsInDifferentPackage.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("publishedApi.kt")
|
||||
public void testPublishedApi() throws Exception {
|
||||
|
||||
+6
@@ -596,6 +596,12 @@ public class FirOldFrontendDiagnosticsWithLightTreeTestGenerated extends Abstrac
|
||||
runTest("compiler/testData/diagnostics/tests/PropertyInitializers.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("protectedWithGenericsInDifferentPackage.kt")
|
||||
public void testProtectedWithGenericsInDifferentPackage() throws Exception {
|
||||
runTest("compiler/testData/diagnostics/tests/protectedWithGenericsInDifferentPackage.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("publishedApi.kt")
|
||||
public void testPublishedApi() throws Exception {
|
||||
|
||||
@@ -33,6 +33,7 @@ import org.jetbrains.kotlin.name.Name
|
||||
import org.jetbrains.kotlin.resolve.calls.tasks.ExplicitReceiverKind.*
|
||||
import org.jetbrains.kotlin.resolve.calls.tower.CandidateApplicability
|
||||
import org.jetbrains.kotlin.types.AbstractNullabilityChecker
|
||||
import org.jetbrains.kotlin.types.TypeApproximatorConfiguration
|
||||
|
||||
abstract class ResolutionStage {
|
||||
abstract suspend fun check(candidate: Candidate, callInfo: CallInfo, sink: CheckerSink, context: ResolutionContext)
|
||||
@@ -122,8 +123,14 @@ object CheckDispatchReceiver : ResolutionStage() {
|
||||
!explicitReceiverExpression.isStable &&
|
||||
(isCandidateFromUnstableSmartcast || (isReceiverNullable && !explicitReceiverExpression.smartcastType.canBeNull))
|
||||
) {
|
||||
val dispatchReceiverType = (candidate.symbol as? FirCallableSymbol<*>)?.dispatchReceiverType?.let {
|
||||
context.session.inferenceComponents.approximator.approximateToSuperType(
|
||||
it,
|
||||
TypeApproximatorConfiguration.FinalApproximationAfterResolutionAndInference
|
||||
) ?: it
|
||||
}
|
||||
val targetType =
|
||||
(candidate.symbol as? FirCallableSymbol<*>)?.dispatchReceiverType ?: explicitReceiverExpression.smartcastType.coneType
|
||||
dispatchReceiverType ?: explicitReceiverExpression.smartcastType.coneType
|
||||
sink.yieldDiagnostic(
|
||||
UnstableSmartCast(
|
||||
explicitReceiverExpression,
|
||||
|
||||
@@ -9,8 +9,8 @@ import org.jetbrains.kotlin.fir.*
|
||||
import org.jetbrains.kotlin.fir.declarations.FirDeclarationOrigin
|
||||
import org.jetbrains.kotlin.fir.declarations.FirSimpleFunction
|
||||
import org.jetbrains.kotlin.fir.declarations.getDeprecationsFromAccessors
|
||||
import org.jetbrains.kotlin.fir.declarations.utils.isStatic
|
||||
import org.jetbrains.kotlin.fir.declarations.synthetic.buildSyntheticProperty
|
||||
import org.jetbrains.kotlin.fir.declarations.utils.isStatic
|
||||
import org.jetbrains.kotlin.fir.scopes.*
|
||||
import org.jetbrains.kotlin.fir.symbols.SyntheticSymbol
|
||||
import org.jetbrains.kotlin.fir.symbols.impl.FirAccessorSymbol
|
||||
@@ -105,7 +105,7 @@ class FirSyntheticPropertiesScope(
|
||||
}
|
||||
}
|
||||
|
||||
val classLookupTag = getterSymbol.dispatchReceiverClassOrNull()
|
||||
val classLookupTag = getterSymbol.originalOrSelf().dispatchReceiverClassOrNull()
|
||||
val packageName = classLookupTag?.classId?.packageFqName ?: getterSymbol.callableId.packageName
|
||||
val className = classLookupTag?.classId?.relativeClassName
|
||||
|
||||
|
||||
+58
-14
@@ -17,7 +17,9 @@ import org.jetbrains.kotlin.fir.originalForSubstitutionOverride
|
||||
import org.jetbrains.kotlin.fir.resolve.ScopeSessionKey
|
||||
import org.jetbrains.kotlin.fir.resolve.substitution.ConeSubstitutor
|
||||
import org.jetbrains.kotlin.fir.resolve.substitution.chain
|
||||
import org.jetbrains.kotlin.fir.scopes.*
|
||||
import org.jetbrains.kotlin.fir.scopes.FakeOverrideSubstitution
|
||||
import org.jetbrains.kotlin.fir.scopes.FirTypeScope
|
||||
import org.jetbrains.kotlin.fir.scopes.ProcessorAction
|
||||
import org.jetbrains.kotlin.fir.symbols.ensureResolved
|
||||
import org.jetbrains.kotlin.fir.symbols.impl.*
|
||||
import org.jetbrains.kotlin.fir.types.ConeClassLikeType
|
||||
@@ -77,7 +79,9 @@ class FirClassSubstitutionScope(
|
||||
val original = callableSymbol.originalForSubstitutionOverride?.takeIf { originalInCache(it) }
|
||||
?: return useSiteMemberScope.processDirectOverriddenCallablesWithBaseScope(callableSymbol, processor)
|
||||
|
||||
if (!processor(original, useSiteMemberScope)) return ProcessorAction.STOP
|
||||
if (original != callableSymbol) {
|
||||
if (!processor(original, useSiteMemberScope)) return ProcessorAction.STOP
|
||||
}
|
||||
|
||||
return useSiteMemberScope.processDirectOverriddenCallablesWithBaseScope(original, processor)
|
||||
}
|
||||
@@ -120,14 +124,29 @@ class FirClassSubstitutionScope(
|
||||
val member = original.fir
|
||||
if (skipPrivateMembers && member.visibility == Visibilities.Private) return original
|
||||
|
||||
val (newTypeParameters, newReceiverType, newReturnType, newSubstitutor, fakeOverrideSubstitution) = createSubstitutedData(member)
|
||||
val (newTypeParameters, newDispatchReceiverType, newReceiverType, newReturnType, newSubstitutor, fakeOverrideSubstitution) = createSubstitutedData(
|
||||
member
|
||||
)
|
||||
val newParameterTypes = member.valueParameters.map {
|
||||
it.returnTypeRef.coneType.substitute(newSubstitutor)
|
||||
}
|
||||
|
||||
if (newReceiverType == null && newReturnType == null && newParameterTypes.all { it == null } &&
|
||||
newTypeParameters === member.typeParameters && fakeOverrideSubstitution == null
|
||||
if (newReceiverType == null &&
|
||||
newReturnType == null &&
|
||||
newParameterTypes.all { it == null } &&
|
||||
newTypeParameters === member.typeParameters &&
|
||||
fakeOverrideSubstitution == null
|
||||
) {
|
||||
if (original.dispatchReceiverType?.substitute(substitutor) != null) {
|
||||
return FirFakeOverrideGenerator.createSubstitutionOverrideFunction(
|
||||
session,
|
||||
member,
|
||||
original,
|
||||
newDispatchReceiverType ?: dispatchReceiverTypeForSubstitutedMembers,
|
||||
derivedClassId = newOwnerClassId,
|
||||
isExpect = makeExpect,
|
||||
)
|
||||
}
|
||||
return original
|
||||
}
|
||||
|
||||
@@ -140,7 +159,7 @@ class FirClassSubstitutionScope(
|
||||
session,
|
||||
member,
|
||||
original,
|
||||
dispatchReceiverTypeForSubstitutedMembers,
|
||||
newDispatchReceiverType ?: dispatchReceiverTypeForSubstitutedMembers,
|
||||
newReceiverType,
|
||||
newReturnType,
|
||||
newParameterTypes,
|
||||
@@ -155,7 +174,7 @@ class FirClassSubstitutionScope(
|
||||
if (substitutor == ConeSubstitutor.Empty) return original
|
||||
val constructor = original.fir
|
||||
|
||||
val (newTypeParameters, _, newReturnType, newSubstitutor, fakeOverrideSubstitution) = createSubstitutedData(constructor)
|
||||
val (newTypeParameters, _, _, newReturnType, newSubstitutor, fakeOverrideSubstitution) = createSubstitutedData(constructor)
|
||||
val newParameterTypes = constructor.valueParameters.map {
|
||||
it.returnTypeRef.coneType.substitute(newSubstitutor)
|
||||
}
|
||||
@@ -176,11 +195,25 @@ class FirClassSubstitutionScope(
|
||||
val member = original.fir
|
||||
if (skipPrivateMembers && member.visibility == Visibilities.Private) return original
|
||||
|
||||
val (newTypeParameters, newReceiverType, newReturnType, _, fakeOverrideSubstitution) = createSubstitutedData(member)
|
||||
val (newTypeParameters, newDispatchReceiverType, newReceiverType, newReturnType, _, fakeOverrideSubstitution) = createSubstitutedData(
|
||||
member
|
||||
)
|
||||
|
||||
if (newReceiverType == null && newReturnType == null &&
|
||||
newTypeParameters === member.typeParameters && fakeOverrideSubstitution == null
|
||||
if (newReceiverType == null &&
|
||||
newReturnType == null &&
|
||||
newTypeParameters === member.typeParameters &&
|
||||
fakeOverrideSubstitution == null
|
||||
) {
|
||||
if (original.dispatchReceiverType?.substitute(substitutor) != null) {
|
||||
return FirFakeOverrideGenerator.createSubstitutionOverrideProperty(
|
||||
session,
|
||||
member,
|
||||
original,
|
||||
newDispatchReceiverType ?: dispatchReceiverTypeForSubstitutedMembers,
|
||||
derivedClassId = newOwnerClassId,
|
||||
isExpect = makeExpect,
|
||||
)
|
||||
}
|
||||
return original
|
||||
}
|
||||
|
||||
@@ -189,7 +222,7 @@ class FirClassSubstitutionScope(
|
||||
session,
|
||||
member,
|
||||
original,
|
||||
dispatchReceiverTypeForSubstitutedMembers,
|
||||
newDispatchReceiverType ?: dispatchReceiverTypeForSubstitutedMembers,
|
||||
newReceiverType,
|
||||
newReturnType,
|
||||
newTypeParameters as List<FirTypeParameter>,
|
||||
@@ -201,6 +234,7 @@ class FirClassSubstitutionScope(
|
||||
|
||||
private data class SubstitutedData(
|
||||
val typeParameters: List<FirTypeParameterRef>,
|
||||
val dispatchReceiverType: ConeKotlinType?,
|
||||
val receiverType: ConeKotlinType?,
|
||||
val returnType: ConeKotlinType?,
|
||||
val substitutor: ConeSubstitutor,
|
||||
@@ -218,11 +252,20 @@ class FirClassSubstitutionScope(
|
||||
val receiverType = member.receiverTypeRef?.coneType
|
||||
val newReceiverType = receiverType?.substitute(substitutor)
|
||||
|
||||
val newDispatchReceiverType = dispatchReceiverTypeForSubstitutedMembers.substitute(substitutor)
|
||||
|
||||
member.symbol.ensureResolved(FirResolvePhase.STATUS)
|
||||
val returnType = member.returnTypeRef.coneTypeSafe<ConeKotlinType>()
|
||||
val fakeOverrideSubstitution = runIf(returnType == null) { FakeOverrideSubstitution(substitutor, member.symbol) }
|
||||
val newReturnType = returnType?.substitute(substitutor)
|
||||
return SubstitutedData(newTypeParameters, newReceiverType, newReturnType, substitutor, fakeOverrideSubstitution)
|
||||
return SubstitutedData(
|
||||
newTypeParameters,
|
||||
newDispatchReceiverType,
|
||||
newReceiverType,
|
||||
newReturnType,
|
||||
substitutor,
|
||||
fakeOverrideSubstitution
|
||||
)
|
||||
}
|
||||
|
||||
fun createSubstitutionOverrideField(original: FirFieldSymbol): FirFieldSymbol {
|
||||
@@ -255,7 +298,8 @@ class FirClassSubstitutionScope(
|
||||
it.returnTypeRef.coneType.substitute()
|
||||
}.orEmpty()
|
||||
|
||||
if (newReturnType == null &&
|
||||
if (original.dispatchReceiverType?.substitute(substitutor) == null &&
|
||||
newReturnType == null &&
|
||||
newGetterParameterTypes.all { it == null } &&
|
||||
newSetterParameterTypes.all { it == null }
|
||||
) {
|
||||
@@ -266,7 +310,7 @@ class FirClassSubstitutionScope(
|
||||
session,
|
||||
member,
|
||||
original,
|
||||
dispatchReceiverTypeForSubstitutedMembers,
|
||||
substitutor.substituteOrSelf(dispatchReceiverTypeForSubstitutedMembers),
|
||||
newReturnType,
|
||||
newGetterParameterTypes,
|
||||
newSetterParameterTypes,
|
||||
|
||||
+10
-6
@@ -42,9 +42,11 @@ object FirFakeOverrideGenerator {
|
||||
isExpect: Boolean = baseFunction.isExpect,
|
||||
fakeOverrideSubstitution: FakeOverrideSubstitution? = null
|
||||
): FirNamedFunctionSymbol {
|
||||
val symbol = FirNamedFunctionSymbol(
|
||||
CallableId(derivedClassId ?: baseSymbol.callableId.classId!!, baseFunction.name)
|
||||
)
|
||||
val symbol = if (derivedClassId == null) {
|
||||
FirNamedFunctionSymbol(baseSymbol.callableId)
|
||||
} else {
|
||||
FirNamedFunctionSymbol(CallableId(derivedClassId, baseFunction.name))
|
||||
}
|
||||
createSubstitutionOverrideFunction(
|
||||
symbol, session, baseFunction, newDispatchReceiverType, newReceiverType, newReturnType,
|
||||
newParameterTypes, newTypeParameters, isExpect, fakeOverrideSubstitution
|
||||
@@ -261,9 +263,11 @@ object FirFakeOverrideGenerator {
|
||||
isExpect: Boolean = baseProperty.isExpect,
|
||||
fakeOverrideSubstitution: FakeOverrideSubstitution? = null
|
||||
): FirPropertySymbol {
|
||||
val symbol = FirPropertySymbol(
|
||||
CallableId(derivedClassId ?: baseSymbol.callableId.classId!!, baseProperty.name)
|
||||
)
|
||||
val symbol = if (derivedClassId == null) {
|
||||
FirPropertySymbol(baseSymbol.callableId)
|
||||
} else {
|
||||
FirPropertySymbol(CallableId(derivedClassId, baseProperty.name))
|
||||
}
|
||||
createCopyForFirProperty(
|
||||
symbol, baseProperty, session, FirDeclarationOrigin.SubstitutionOverride, isExpect,
|
||||
newDispatchReceiverType, newTypeParameters, newReceiverType, newReturnType,
|
||||
|
||||
+13
-7
@@ -174,16 +174,22 @@ class FirTypeIntersectionScope private constructor(
|
||||
}
|
||||
|
||||
val baseMembers = mutableSetOf<S>()
|
||||
for ((unwrappedMember, scope) in unwrappedMemberSet) {
|
||||
for ((member, scope) in this) {
|
||||
@Suppress("UNCHECKED_CAST")
|
||||
if (unwrappedMember is FirNamedFunctionSymbol) {
|
||||
scope.processOverriddenFunctions(unwrappedMember) {
|
||||
baseMembers += it.fir.unwrapSubstitutionOverrides().symbol as S
|
||||
if (member is FirNamedFunctionSymbol) {
|
||||
scope.processOverriddenFunctions(member) {
|
||||
val symbol = it.fir.unwrapSubstitutionOverrides().symbol
|
||||
if (symbol != member.fir.unwrapSubstitutionOverrides().symbol) {
|
||||
baseMembers += symbol as S
|
||||
}
|
||||
ProcessorAction.NEXT
|
||||
}
|
||||
} else if (unwrappedMember is FirPropertySymbol) {
|
||||
scope.processOverriddenProperties(unwrappedMember) {
|
||||
baseMembers += it.fir.unwrapSubstitutionOverrides().symbol as S
|
||||
} else if (member is FirPropertySymbol) {
|
||||
scope.processOverriddenProperties(member) {
|
||||
val symbol = it.fir.unwrapSubstitutionOverrides().symbol
|
||||
if (symbol != member.fir.unwrapSubstitutionOverrides().symbol) {
|
||||
baseMembers += symbol as S
|
||||
}
|
||||
ProcessorAction.NEXT
|
||||
}
|
||||
}
|
||||
|
||||
@@ -58,7 +58,7 @@ FILE fqName:<root> fileName:/noSymbolForIntRangeIterator.kt
|
||||
$this: CONST Int type=kotlin.Int value=0
|
||||
other: GET_VAR 'val x: kotlin.Int [val] declared in <root>.test' type=kotlin.Int origin=null
|
||||
WHILE label=null origin=FOR_LOOP_INNER_WHILE
|
||||
condition: CALL 'public abstract fun hasNext (): kotlin.Boolean [operator] declared in kotlin.collections.Iterator' type=kotlin.Boolean origin=FOR_LOOP_HAS_NEXT
|
||||
condition: CALL 'public abstract fun hasNext (): kotlin.Boolean [fake_override,operator] declared in kotlin.collections.IntIterator' type=kotlin.Boolean origin=FOR_LOOP_HAS_NEXT
|
||||
$this: GET_VAR 'val tmp_1: kotlin.collections.IntIterator [val] declared in <root>.test.localFunc' type=kotlin.collections.IntIterator origin=null
|
||||
body: BLOCK type=kotlin.Unit origin=FOR_LOOP_INNER_WHILE
|
||||
VAR FOR_LOOP_VARIABLE name:i type:kotlin.Int [val]
|
||||
@@ -78,7 +78,7 @@ FILE fqName:<root> fileName:/noSymbolForIntRangeIterator.kt
|
||||
$this: CONST Int type=kotlin.Int value=0
|
||||
other: GET_VAR 'val y: kotlin.Int [val] declared in <root>.test' type=kotlin.Int origin=null
|
||||
WHILE label=null origin=FOR_LOOP_INNER_WHILE
|
||||
condition: CALL 'public abstract fun hasNext (): kotlin.Boolean [operator] declared in kotlin.collections.Iterator' type=kotlin.Boolean origin=FOR_LOOP_HAS_NEXT
|
||||
condition: CALL 'public abstract fun hasNext (): kotlin.Boolean [fake_override,operator] declared in kotlin.collections.IntIterator' type=kotlin.Boolean origin=FOR_LOOP_HAS_NEXT
|
||||
$this: GET_VAR 'val tmp_2: kotlin.collections.IntIterator [val] declared in <root>.test.localFunc.<anonymous>' type=kotlin.collections.IntIterator origin=null
|
||||
body: BLOCK type=kotlin.Unit origin=FOR_LOOP_INNER_WHILE
|
||||
VAR FOR_LOOP_VARIABLE name:j type:kotlin.Int [val]
|
||||
|
||||
+41
@@ -0,0 +1,41 @@
|
||||
// FILE: foo/Super.java
|
||||
package foo
|
||||
|
||||
public abstract class Super<T> {
|
||||
protected abstract String getName();
|
||||
protected abstract void setName(String s);
|
||||
|
||||
protected abstract String getName2();
|
||||
protected abstract void setName2(String s);
|
||||
|
||||
protected abstract void doSomething();
|
||||
protected abstract void doSomething2();
|
||||
}
|
||||
|
||||
// FILE: bar/Sub.kt
|
||||
package bar
|
||||
|
||||
abstract class Sub<T>: foo.Super<T>() {
|
||||
abstract override fun getName(): String
|
||||
abstract override fun setName(s: String)
|
||||
abstract override fun doSomething()
|
||||
}
|
||||
|
||||
// FILE: foo/test.kt
|
||||
package foo
|
||||
|
||||
fun test(s: bar.Sub<String>) {
|
||||
s.<!INVISIBLE_REFERENCE!>name<!>
|
||||
s.<!INVISIBLE_REFERENCE!>name<!> = ""
|
||||
s.name2
|
||||
s.name2 = ""
|
||||
s.<!INVISIBLE_REFERENCE!>doSomething<!>()
|
||||
s.doSomething2()
|
||||
val s2: Super<String> = s
|
||||
s2.<!INVISIBLE_REFERENCE!>name<!>
|
||||
s2.<!INVISIBLE_REFERENCE!>name<!> = ""
|
||||
s2.name2
|
||||
s2.name2 = ""
|
||||
s2.<!INVISIBLE_REFERENCE!>doSomething<!>()
|
||||
s2.doSomething2()
|
||||
}
|
||||
+41
@@ -0,0 +1,41 @@
|
||||
// FILE: foo/Super.java
|
||||
package foo
|
||||
|
||||
public abstract class Super<T> {
|
||||
protected abstract String getName();
|
||||
protected abstract void setName(String s);
|
||||
|
||||
protected abstract String getName2();
|
||||
protected abstract void setName2(String s);
|
||||
|
||||
protected abstract void doSomething();
|
||||
protected abstract void doSomething2();
|
||||
}
|
||||
|
||||
// FILE: bar/Sub.kt
|
||||
package bar
|
||||
|
||||
abstract class Sub<T>: foo.Super<T>() {
|
||||
abstract override fun getName(): String
|
||||
abstract override fun setName(s: String)
|
||||
abstract override fun doSomething()
|
||||
}
|
||||
|
||||
// FILE: foo/test.kt
|
||||
package foo
|
||||
|
||||
fun test(s: bar.Sub<String>) {
|
||||
s.<!INVISIBLE_MEMBER!>name<!>
|
||||
s.<!INVISIBLE_MEMBER!>name<!> = ""
|
||||
s.name2
|
||||
s.name2 = ""
|
||||
s.<!INVISIBLE_MEMBER!>doSomething<!>()
|
||||
s.doSomething2()
|
||||
val s2: Super<String> = s
|
||||
s2.name
|
||||
s2.name = ""
|
||||
s2.name2
|
||||
s2.name2 = ""
|
||||
s2.doSomething()
|
||||
s2.doSomething2()
|
||||
}
|
||||
+35
@@ -0,0 +1,35 @@
|
||||
package
|
||||
|
||||
package bar {
|
||||
|
||||
public abstract class Sub</*0*/ T> : foo.Super<T> {
|
||||
public constructor Sub</*0*/ T>()
|
||||
protected abstract override /*1*/ fun doSomething(): kotlin.Unit
|
||||
protected/*protected and package*/ abstract override /*1*/ /*fake_override*/ fun doSomething2(): kotlin.Unit
|
||||
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||
protected abstract override /*1*/ fun getName(): kotlin.String
|
||||
protected/*protected and package*/ abstract override /*1*/ /*fake_override*/ fun getName2(): kotlin.String!
|
||||
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||
protected abstract override /*1*/ fun setName(/*0*/ s: kotlin.String): kotlin.Unit
|
||||
protected/*protected and package*/ abstract override /*1*/ /*fake_override*/ fun setName2(/*0*/ s: kotlin.String!): kotlin.Unit
|
||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||
}
|
||||
}
|
||||
|
||||
package foo {
|
||||
public fun test(/*0*/ s: bar.Sub<kotlin.String>): kotlin.Unit
|
||||
|
||||
public abstract class Super</*0*/ T : kotlin.Any!> {
|
||||
public constructor Super</*0*/ T : kotlin.Any!>()
|
||||
protected/*protected and package*/ abstract fun doSomething(): kotlin.Unit
|
||||
protected/*protected and package*/ abstract fun doSomething2(): kotlin.Unit
|
||||
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||
protected/*protected and package*/ abstract fun getName(): kotlin.String!
|
||||
protected/*protected and package*/ abstract fun getName2(): kotlin.String!
|
||||
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||
protected/*protected and package*/ abstract fun setName(/*0*/ s: kotlin.String!): kotlin.Unit
|
||||
protected/*protected and package*/ abstract fun setName2(/*0*/ s: kotlin.String!): kotlin.Unit
|
||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||
}
|
||||
}
|
||||
|
||||
+2
-2
@@ -93,7 +93,7 @@ FILE fqName:<root> fileName:/inlineCollectionOfInlineClass.kt
|
||||
$this: VALUE_PARAMETER name:<this> type:<root>.InlineMutableSet
|
||||
BLOCK_BODY
|
||||
RETURN type=kotlin.Nothing from='public final fun <get-size> (): kotlin.Int declared in <root>.InlineMutableSet'
|
||||
CALL 'public abstract fun <get-size> (): kotlin.Int declared in kotlin.collections.Set' type=kotlin.Int origin=GET_PROPERTY
|
||||
CALL 'public abstract fun <get-size> (): kotlin.Int [fake_override] declared in kotlin.collections.MutableSet' type=kotlin.Int origin=GET_PROPERTY
|
||||
$this: CALL 'private final fun <get-ms> (): kotlin.collections.MutableSet<<root>.IT> declared in <root>.InlineMutableSet' type=kotlin.collections.MutableSet<<root>.IT> origin=GET_PROPERTY
|
||||
$this: GET_VAR '<this>: <root>.InlineMutableSet declared in <root>.InlineMutableSet.<get-size>' type=<root>.InlineMutableSet origin=null
|
||||
FUN name:contains visibility:public modality:FINAL <> ($this:<root>.InlineMutableSet, element:<root>.IT) returnType:kotlin.Boolean [operator]
|
||||
@@ -124,7 +124,7 @@ FILE fqName:<root> fileName:/inlineCollectionOfInlineClass.kt
|
||||
$this: VALUE_PARAMETER name:<this> type:<root>.InlineMutableSet
|
||||
BLOCK_BODY
|
||||
RETURN type=kotlin.Nothing from='public final fun isEmpty (): kotlin.Boolean declared in <root>.InlineMutableSet'
|
||||
CALL 'public abstract fun isEmpty (): kotlin.Boolean declared in kotlin.collections.Set' type=kotlin.Boolean origin=null
|
||||
CALL 'public abstract fun isEmpty (): kotlin.Boolean [fake_override] declared in kotlin.collections.MutableSet' type=kotlin.Boolean origin=null
|
||||
$this: CALL 'private final fun <get-ms> (): kotlin.collections.MutableSet<<root>.IT> declared in <root>.InlineMutableSet' type=kotlin.collections.MutableSet<<root>.IT> origin=GET_PROPERTY
|
||||
$this: GET_VAR '<this>: <root>.InlineMutableSet declared in <root>.InlineMutableSet.isEmpty' type=<root>.InlineMutableSet origin=null
|
||||
FUN name:add visibility:public modality:FINAL <> ($this:<root>.InlineMutableSet, element:<root>.IT) returnType:kotlin.Boolean
|
||||
|
||||
@@ -17,7 +17,7 @@ FILE fqName:<root> fileName:/breakContinueInWhen.kt
|
||||
CALL 'public final fun iterator (): kotlin.collections.IntIterator [operator] declared in kotlin.IntArray' type=kotlin.collections.IntIterator origin=null
|
||||
$this: GET_VAR 'val xs: kotlin.IntArray [val] declared in <root>.testBreakFor' type=kotlin.IntArray origin=null
|
||||
WHILE label=null origin=FOR_LOOP_INNER_WHILE
|
||||
condition: CALL 'public abstract fun hasNext (): kotlin.Boolean [operator] declared in kotlin.collections.Iterator' type=kotlin.Boolean origin=FOR_LOOP_HAS_NEXT
|
||||
condition: CALL 'public abstract fun hasNext (): kotlin.Boolean [fake_override,operator] declared in kotlin.collections.IntIterator' type=kotlin.Boolean origin=FOR_LOOP_HAS_NEXT
|
||||
$this: GET_VAR 'val tmp_0: kotlin.collections.IntIterator [val] declared in <root>.testBreakFor' type=kotlin.collections.IntIterator origin=null
|
||||
body: BLOCK type=kotlin.Unit origin=FOR_LOOP_INNER_WHILE
|
||||
VAR FOR_LOOP_VARIABLE name:x type:kotlin.Int [val]
|
||||
@@ -76,7 +76,7 @@ FILE fqName:<root> fileName:/breakContinueInWhen.kt
|
||||
CALL 'public final fun iterator (): kotlin.collections.IntIterator [operator] declared in kotlin.IntArray' type=kotlin.collections.IntIterator origin=null
|
||||
$this: GET_VAR 'val xs: kotlin.IntArray [val] declared in <root>.testContinueFor' type=kotlin.IntArray origin=null
|
||||
WHILE label=null origin=FOR_LOOP_INNER_WHILE
|
||||
condition: CALL 'public abstract fun hasNext (): kotlin.Boolean [operator] declared in kotlin.collections.Iterator' type=kotlin.Boolean origin=FOR_LOOP_HAS_NEXT
|
||||
condition: CALL 'public abstract fun hasNext (): kotlin.Boolean [fake_override,operator] declared in kotlin.collections.IntIterator' type=kotlin.Boolean origin=FOR_LOOP_HAS_NEXT
|
||||
$this: GET_VAR 'val tmp_1: kotlin.collections.IntIterator [val] declared in <root>.testContinueFor' type=kotlin.collections.IntIterator origin=null
|
||||
body: BLOCK type=kotlin.Unit origin=FOR_LOOP_INNER_WHILE
|
||||
VAR FOR_LOOP_VARIABLE name:x type:kotlin.Int [val]
|
||||
|
||||
+1
-1
@@ -9,7 +9,7 @@ FILE fqName:<root> fileName:/withVarargViewedAsArray.kt
|
||||
CALL 'public final fun iterator (): kotlin.collections.IntIterator [operator] declared in kotlin.IntArray' type=kotlin.collections.IntIterator origin=null
|
||||
$this: GET_VAR 'args: kotlin.IntArray [vararg] declared in <root>.sum' type=kotlin.IntArray origin=null
|
||||
WHILE label=null origin=FOR_LOOP_INNER_WHILE
|
||||
condition: CALL 'public abstract fun hasNext (): kotlin.Boolean [operator] declared in kotlin.collections.Iterator' type=kotlin.Boolean origin=FOR_LOOP_HAS_NEXT
|
||||
condition: CALL 'public abstract fun hasNext (): kotlin.Boolean [fake_override,operator] declared in kotlin.collections.IntIterator' type=kotlin.Boolean origin=FOR_LOOP_HAS_NEXT
|
||||
$this: GET_VAR 'val tmp_0: kotlin.collections.IntIterator [val] declared in <root>.sum' type=kotlin.collections.IntIterator origin=null
|
||||
body: BLOCK type=kotlin.Unit origin=FOR_LOOP_INNER_WHILE
|
||||
VAR FOR_LOOP_VARIABLE name:arg type:kotlin.Int [val]
|
||||
|
||||
+1
-1
@@ -63,7 +63,7 @@ FILE fqName:<root> fileName:/for.kt
|
||||
$this: CONST Int type=kotlin.Int value=1
|
||||
other: CONST Int type=kotlin.Int value=10
|
||||
WHILE label=null origin=FOR_LOOP_INNER_WHILE
|
||||
condition: CALL 'public abstract fun hasNext (): kotlin.Boolean [operator] declared in kotlin.collections.Iterator' type=kotlin.Boolean origin=FOR_LOOP_HAS_NEXT
|
||||
condition: CALL 'public abstract fun hasNext (): kotlin.Boolean [fake_override,operator] declared in kotlin.collections.IntIterator' type=kotlin.Boolean origin=FOR_LOOP_HAS_NEXT
|
||||
$this: GET_VAR 'val tmp_3: kotlin.collections.IntIterator [val] declared in <root>.testRange' type=kotlin.collections.IntIterator origin=null
|
||||
body: BLOCK type=kotlin.Unit origin=FOR_LOOP_INNER_WHILE
|
||||
VAR FOR_LOOP_VARIABLE name:i type:kotlin.Int [val]
|
||||
|
||||
+1
-1
@@ -8,7 +8,7 @@ FILE fqName:<root> fileName:/kt47245.kt
|
||||
$this: CONST Int type=kotlin.Int value=0
|
||||
other: CONST Int type=kotlin.Int value=0
|
||||
WHILE label=null origin=FOR_LOOP_INNER_WHILE
|
||||
condition: CALL 'public abstract fun hasNext (): kotlin.Boolean [operator] declared in kotlin.collections.Iterator' type=kotlin.Boolean origin=FOR_LOOP_HAS_NEXT
|
||||
condition: CALL 'public abstract fun hasNext (): kotlin.Boolean [fake_override,operator] declared in kotlin.collections.IntIterator' type=kotlin.Boolean origin=FOR_LOOP_HAS_NEXT
|
||||
$this: GET_VAR 'val tmp_0: kotlin.collections.IntIterator [val] declared in <root>.test' type=kotlin.collections.IntIterator origin=null
|
||||
body: BLOCK type=kotlin.Unit origin=FOR_LOOP_INNER_WHILE
|
||||
VAR FOR_LOOP_VARIABLE name:i type:kotlin.Int [val]
|
||||
|
||||
@@ -82,7 +82,7 @@ FILE fqName:<root> fileName:/thisOfGenericOuterClass.kt
|
||||
CALL 'public final fun plus (other: kotlin.Int): kotlin.Int [operator] declared in kotlin.Int' type=kotlin.Int origin=PLUS
|
||||
$this: CALL 'public final fun <get-x> (): T of <root>.Outer declared in <root>.Outer' type=kotlin.Int origin=GET_PROPERTY
|
||||
$this: GET_VAR '<this>: <root>.Outer<kotlin.Int> declared in <root>.test' type=<root>.Outer<kotlin.Int> origin=null
|
||||
other: CALL 'public final fun <get-y> (): kotlin.Int declared in <root>.Outer.Inner' type=kotlin.Int origin=GET_PROPERTY
|
||||
other: CALL 'public final fun <get-y> (): kotlin.Int [fake_override] declared in <root>.test.<no name provided>' type=kotlin.Int origin=GET_PROPERTY
|
||||
$this: GET_VAR '<this>: <root>.test.<no name provided> declared in <root>.test.<no name provided>' type=<root>.test.<no name provided> origin=null
|
||||
FUN DEFAULT_PROPERTY_ACCESSOR name:<get-xx> visibility:public modality:FINAL <> ($this:<root>.test.<no name provided>) returnType:kotlin.Int
|
||||
correspondingProperty: PROPERTY name:xx visibility:public modality:FINAL [val]
|
||||
|
||||
@@ -575,7 +575,7 @@ FILE fqName:<root> fileName:/ArrayMap.kt
|
||||
arg1: CALL 'public final fun <get-size> (): kotlin.Int declared in kotlin.Array' type=kotlin.Int origin=GET_PROPERTY
|
||||
$this: CALL 'private final fun <get-data> (): kotlin.Array<kotlin.Any?> declared in <root>.ArrayMapImpl' type=kotlin.Array<kotlin.Any?> origin=GET_PROPERTY
|
||||
$this: GET_VAR '<this>: <root>.ArrayMapImpl<T of <root>.ArrayMapImpl> declared in <root>.ArrayMapImpl.iterator' type=<root>.ArrayMapImpl<T of <root>.ArrayMapImpl> origin=null
|
||||
then: CALL 'protected final fun done (): kotlin.Unit declared in kotlin.collections.AbstractIterator' type=kotlin.Unit origin=null
|
||||
then: CALL 'protected final fun done (): kotlin.Unit [fake_override] declared in <root>.ArrayMapImpl.iterator.<no name provided>' type=kotlin.Unit origin=null
|
||||
$this: GET_VAR '<this>: <root>.ArrayMapImpl.iterator.<no name provided><T of <root>.ArrayMapImpl> declared in <root>.ArrayMapImpl.iterator.<no name provided>.computeNext' type=<root>.ArrayMapImpl.iterator.<no name provided><T of <root>.ArrayMapImpl> origin=null
|
||||
BRANCH
|
||||
if: CONST Boolean type=kotlin.Boolean value=true
|
||||
|
||||
+3
-7
@@ -31,10 +31,9 @@ FILE fqName:<root> fileName:/DelegationAndInheritanceFromJava.kt
|
||||
FUN DELEGATED_MEMBER name:clear visibility:public modality:OPEN <> ($this:<root>.Impl) returnType:kotlin.Unit
|
||||
overridden:
|
||||
public abstract fun clear (): kotlin.Unit [fake_override] declared in <root>.Foo.A
|
||||
public abstract fun clear (): kotlin.Unit [fake_override] declared in <root>.Foo.B
|
||||
$this: VALUE_PARAMETER name:<this> type:<root>.Impl
|
||||
BLOCK_BODY
|
||||
CALL 'public abstract fun clear (): kotlin.Unit declared in kotlin.collections.MutableSet' type=kotlin.Unit origin=null
|
||||
CALL 'public abstract fun clear (): kotlin.Unit [fake_override] declared in <root>.Foo.B' type=kotlin.Unit origin=null
|
||||
$this: GET_FIELD 'FIELD DELEGATE name:<$$delegate_0> type:<root>.Foo.B visibility:local [final]' type=<root>.Foo.B origin=null
|
||||
receiver: GET_VAR '<this>: <root>.Impl declared in <root>.Impl.clear' type=<root>.Impl origin=null
|
||||
FUN DELEGATED_MEMBER name:iterator visibility:public modality:OPEN <> ($this:<root>.Impl) returnType:kotlin.collections.MutableIterator<@[FlexibleNullability] kotlin.String?> [operator]
|
||||
@@ -104,26 +103,23 @@ FILE fqName:<root> fileName:/DelegationAndInheritanceFromJava.kt
|
||||
FUN DELEGATED_MEMBER name:isEmpty visibility:public modality:OPEN <> ($this:<root>.Impl) returnType:kotlin.Boolean
|
||||
overridden:
|
||||
public abstract fun isEmpty (): kotlin.Boolean [fake_override] declared in <root>.Foo.A
|
||||
public abstract fun isEmpty (): kotlin.Boolean [fake_override] declared in <root>.Foo.B
|
||||
$this: VALUE_PARAMETER name:<this> type:<root>.Impl
|
||||
BLOCK_BODY
|
||||
RETURN type=kotlin.Nothing from='public open fun isEmpty (): kotlin.Boolean declared in <root>.Impl'
|
||||
CALL 'public abstract fun isEmpty (): kotlin.Boolean declared in kotlin.collections.Set' type=kotlin.Boolean origin=null
|
||||
CALL 'public abstract fun isEmpty (): kotlin.Boolean [fake_override] declared in <root>.Foo.B' type=kotlin.Boolean origin=null
|
||||
$this: GET_FIELD 'FIELD DELEGATE name:<$$delegate_0> type:<root>.Foo.B visibility:local [final]' type=<root>.Foo.B origin=null
|
||||
receiver: GET_VAR '<this>: <root>.Impl declared in <root>.Impl.isEmpty' type=<root>.Impl origin=null
|
||||
PROPERTY DELEGATED_MEMBER name:size visibility:public modality:OPEN [val]
|
||||
overridden:
|
||||
public abstract size: kotlin.Int [fake_override,val]
|
||||
public abstract size: kotlin.Int [fake_override,val]
|
||||
FUN DELEGATED_MEMBER name:<get-size> visibility:public modality:OPEN <> ($this:<root>.Impl) returnType:kotlin.Int
|
||||
correspondingProperty: PROPERTY DELEGATED_MEMBER name:size visibility:public modality:OPEN [val]
|
||||
overridden:
|
||||
public abstract fun <get-size> (): kotlin.Int [fake_override] declared in <root>.Foo.A
|
||||
public abstract fun <get-size> (): kotlin.Int [fake_override] declared in <root>.Foo.B
|
||||
$this: VALUE_PARAMETER name:<this> type:<root>.Impl
|
||||
BLOCK_BODY
|
||||
RETURN type=kotlin.Nothing from='public open fun <get-size> (): kotlin.Int declared in <root>.Impl'
|
||||
CALL 'public abstract fun <get-size> (): kotlin.Int declared in kotlin.collections.Set' type=kotlin.Int origin=null
|
||||
CALL 'public abstract fun <get-size> (): kotlin.Int [fake_override] declared in <root>.Foo.B' type=kotlin.Int origin=null
|
||||
$this: GET_FIELD 'FIELD DELEGATE name:<$$delegate_0> type:<root>.Foo.B visibility:local [final]' type=<root>.Foo.B origin=null
|
||||
receiver: GET_VAR '<this>: <root>.Impl declared in <root>.Impl.<get-size>' type=<root>.Impl origin=null
|
||||
FIELD DELEGATE name:<$$delegate_0> type:<root>.Foo.B visibility:local [final]
|
||||
|
||||
@@ -201,12 +201,11 @@ FILE fqName:<root> fileName:/MultiList.kt
|
||||
public open fun contains (p0: @[FlexibleNullability] E of java.util.ArrayList?): kotlin.Boolean [operator] declared in java.util.ArrayList
|
||||
$this: VALUE_PARAMETER name:<this> type:java.util.ArrayList<E of java.util.ArrayList>
|
||||
VALUE_PARAMETER name:p0 index:0 type:@[FlexibleNullability] <root>.Some<T of <root>.SomeList>?
|
||||
FUN FAKE_OVERRIDE name:containsAll visibility:public modality:OPEN <> ($this:kotlin.collections.List<E of kotlin.collections.List>, elements:kotlin.collections.Collection<<root>.Some<T of <root>.SomeList>>) returnType:kotlin.Boolean [fake_override]
|
||||
FUN FAKE_OVERRIDE name:containsAll visibility:public modality:OPEN <> ($this:java.util.AbstractCollection<E of java.util.AbstractCollection>, p0:kotlin.collections.Collection<@[FlexibleNullability] <root>.Some<T of <root>.SomeList>?>) returnType:kotlin.Boolean [fake_override]
|
||||
overridden:
|
||||
public abstract fun containsAll (elements: kotlin.collections.Collection<<root>.Some<T of <root>.MyList>>): kotlin.Boolean [fake_override] declared in <root>.MyList
|
||||
public open fun containsAll (p0: kotlin.collections.Collection<@[FlexibleNullability] E of java.util.ArrayList?>): kotlin.Boolean [fake_override] declared in java.util.ArrayList
|
||||
$this: VALUE_PARAMETER name:<this> type:kotlin.collections.List<E of kotlin.collections.List>
|
||||
VALUE_PARAMETER name:elements index:0 type:kotlin.collections.Collection<<root>.Some<T of <root>.SomeList>>
|
||||
$this: VALUE_PARAMETER name:<this> type:java.util.AbstractCollection<E of java.util.AbstractCollection>
|
||||
VALUE_PARAMETER name:p0 index:0 type:kotlin.collections.Collection<@[FlexibleNullability] <root>.Some<T of <root>.SomeList>?>
|
||||
FUN FAKE_OVERRIDE name:get visibility:public modality:OPEN <> ($this:java.util.ArrayList<E of java.util.ArrayList>, p0:kotlin.Int) returnType:@[FlexibleNullability] <root>.Some<T of <root>.SomeList>? [fake_override,operator]
|
||||
overridden:
|
||||
public open fun get (p0: kotlin.Int): @[FlexibleNullability] E of java.util.ArrayList? [operator] declared in java.util.ArrayList
|
||||
@@ -396,11 +395,11 @@ FILE fqName:<root> fileName:/MultiList.kt
|
||||
public open fun contains (p0: @[FlexibleNullability] <root>.Some<T of <root>.SomeList>?): kotlin.Boolean [fake_override,operator] declared in <root>.SomeList
|
||||
$this: VALUE_PARAMETER name:<this> type:java.util.ArrayList<E of java.util.ArrayList>
|
||||
VALUE_PARAMETER name:p0 index:0 type:@[FlexibleNullability] <root>.Some<kotlin.String>?
|
||||
FUN FAKE_OVERRIDE name:containsAll visibility:public modality:OPEN <> ($this:kotlin.collections.List<E of kotlin.collections.List>, elements:kotlin.collections.Collection<<root>.Some<kotlin.String>>) returnType:kotlin.Boolean [fake_override]
|
||||
FUN FAKE_OVERRIDE name:containsAll visibility:public modality:OPEN <> ($this:java.util.AbstractCollection<E of java.util.AbstractCollection>, p0:kotlin.collections.Collection<@[FlexibleNullability] <root>.Some<kotlin.String>?>) returnType:kotlin.Boolean [fake_override]
|
||||
overridden:
|
||||
public open fun containsAll (elements: kotlin.collections.Collection<<root>.Some<T of <root>.SomeList>>): kotlin.Boolean [fake_override] declared in <root>.SomeList
|
||||
$this: VALUE_PARAMETER name:<this> type:kotlin.collections.List<E of kotlin.collections.List>
|
||||
VALUE_PARAMETER name:elements index:0 type:kotlin.collections.Collection<<root>.Some<kotlin.String>>
|
||||
public open fun containsAll (p0: kotlin.collections.Collection<@[FlexibleNullability] <root>.Some<T of <root>.SomeList>?>): kotlin.Boolean [fake_override] declared in <root>.SomeList
|
||||
$this: VALUE_PARAMETER name:<this> type:java.util.AbstractCollection<E of java.util.AbstractCollection>
|
||||
VALUE_PARAMETER name:p0 index:0 type:kotlin.collections.Collection<@[FlexibleNullability] <root>.Some<kotlin.String>?>
|
||||
FUN FAKE_OVERRIDE name:get visibility:public modality:OPEN <> ($this:java.util.ArrayList<E of java.util.ArrayList>, p0:kotlin.Int) returnType:@[FlexibleNullability] <root>.Some<kotlin.String>? [fake_override,operator]
|
||||
overridden:
|
||||
public open fun get (p0: kotlin.Int): @[FlexibleNullability] <root>.Some<T of <root>.SomeList>? [fake_override,operator] declared in <root>.SomeList
|
||||
|
||||
@@ -10,7 +10,7 @@ FILE fqName:<root> fileName:/coercionInLoop.kt
|
||||
VAR name:i type:kotlin.Int [var]
|
||||
CONST Int type=kotlin.Int value=0
|
||||
WHILE label=null origin=WHILE_LOOP
|
||||
condition: CALL 'public abstract fun hasNext (): kotlin.Boolean [operator] declared in kotlin.collections.Iterator' type=kotlin.Boolean origin=null
|
||||
condition: CALL 'public abstract fun hasNext (): kotlin.Boolean [fake_override,operator] declared in kotlin.collections.DoubleIterator' type=kotlin.Boolean origin=null
|
||||
$this: GET_VAR 'val x: kotlin.collections.DoubleIterator [val] declared in <root>.box' type=kotlin.collections.DoubleIterator origin=null
|
||||
body: BLOCK type=kotlin.Int origin=null
|
||||
WHEN type=kotlin.Unit origin=IF
|
||||
|
||||
+4
-4
@@ -9,7 +9,7 @@ FILE fqName:<root> fileName:/enhancedNullabilityInForLoop.kt
|
||||
CALL 'public abstract fun iterator (): kotlin.collections.MutableIterator<E of kotlin.collections.MutableList> [fake_override,operator] declared in kotlin.collections.MutableList' type=kotlin.collections.MutableIterator<@[EnhancedNullability] <root>.P> origin=FOR_LOOP_ITERATOR
|
||||
$this: CALL 'public open fun listOfNotNull (): @[FlexibleNullability] kotlin.collections.List<@[EnhancedNullability] <root>.P>? declared in <root>.J' type=@[FlexibleNullability] kotlin.collections.List<@[EnhancedNullability] <root>.P>? origin=null
|
||||
WHILE label=null origin=FOR_LOOP_INNER_WHILE
|
||||
condition: CALL 'public abstract fun hasNext (): kotlin.Boolean [operator] declared in kotlin.collections.Iterator' type=kotlin.Boolean origin=FOR_LOOP_HAS_NEXT
|
||||
condition: CALL 'public abstract fun hasNext (): kotlin.Boolean [fake_override,operator] declared in kotlin.collections.MutableIterator' type=kotlin.Boolean origin=FOR_LOOP_HAS_NEXT
|
||||
$this: GET_VAR 'val tmp_0: kotlin.collections.MutableIterator<@[EnhancedNullability] <root>.P> [val] declared in <root>.testForInListUnused' type=kotlin.collections.MutableIterator<@[EnhancedNullability] <root>.P> origin=null
|
||||
body: BLOCK type=kotlin.Unit origin=FOR_LOOP_INNER_WHILE
|
||||
VAR FOR_LOOP_VARIABLE name:x type:<root>.P [val]
|
||||
@@ -23,7 +23,7 @@ FILE fqName:<root> fileName:/enhancedNullabilityInForLoop.kt
|
||||
CALL 'public abstract fun iterator (): kotlin.collections.MutableIterator<E of kotlin.collections.MutableList> [fake_override,operator] declared in kotlin.collections.MutableList' type=kotlin.collections.MutableIterator<@[EnhancedNullability] <root>.P> origin=FOR_LOOP_ITERATOR
|
||||
$this: CALL 'public open fun listOfNotNull (): @[FlexibleNullability] kotlin.collections.List<@[EnhancedNullability] <root>.P>? declared in <root>.J' type=@[FlexibleNullability] kotlin.collections.List<@[EnhancedNullability] <root>.P>? origin=null
|
||||
WHILE label=null origin=FOR_LOOP_INNER_WHILE
|
||||
condition: CALL 'public abstract fun hasNext (): kotlin.Boolean [operator] declared in kotlin.collections.Iterator' type=kotlin.Boolean origin=FOR_LOOP_HAS_NEXT
|
||||
condition: CALL 'public abstract fun hasNext (): kotlin.Boolean [fake_override,operator] declared in kotlin.collections.MutableIterator' type=kotlin.Boolean origin=FOR_LOOP_HAS_NEXT
|
||||
$this: GET_VAR 'val tmp_1: kotlin.collections.MutableIterator<@[EnhancedNullability] <root>.P> [val] declared in <root>.testForInListDestructured' type=kotlin.collections.MutableIterator<@[EnhancedNullability] <root>.P> origin=null
|
||||
body: BLOCK type=kotlin.Unit origin=FOR_LOOP_INNER_WHILE
|
||||
VAR FOR_LOOP_VARIABLE name:<destruct> type:<root>.P [val]
|
||||
@@ -43,7 +43,7 @@ FILE fqName:<root> fileName:/enhancedNullabilityInForLoop.kt
|
||||
CALL 'public abstract fun iterator (): kotlin.collections.MutableIterator<E of kotlin.collections.MutableList> [fake_override,operator] declared in kotlin.collections.MutableList' type=kotlin.collections.MutableIterator<@[EnhancedNullability] <root>.P> origin=null
|
||||
$this: CALL 'public open fun listOfNotNull (): @[FlexibleNullability] kotlin.collections.List<@[EnhancedNullability] <root>.P>? declared in <root>.J' type=@[FlexibleNullability] kotlin.collections.List<@[EnhancedNullability] <root>.P>? origin=null
|
||||
WHILE label=null origin=WHILE_LOOP
|
||||
condition: CALL 'public abstract fun hasNext (): kotlin.Boolean [operator] declared in kotlin.collections.Iterator' type=kotlin.Boolean origin=null
|
||||
condition: CALL 'public abstract fun hasNext (): kotlin.Boolean [fake_override,operator] declared in kotlin.collections.MutableIterator' type=kotlin.Boolean origin=null
|
||||
$this: GET_VAR 'val iterator: kotlin.collections.MutableIterator<@[EnhancedNullability] <root>.P> [val] declared in <root>.testDesugaredForInList' type=kotlin.collections.MutableIterator<@[EnhancedNullability] <root>.P> origin=null
|
||||
body: BLOCK type=kotlin.Unit origin=null
|
||||
VAR name:x type:<root>.P [val]
|
||||
@@ -73,7 +73,7 @@ FILE fqName:<root> fileName:/enhancedNullabilityInForLoop.kt
|
||||
CALL 'public abstract fun iterator (): kotlin.collections.MutableIterator<E of kotlin.collections.MutableList> [fake_override,operator] declared in kotlin.collections.MutableList' type=kotlin.collections.MutableIterator<@[EnhancedNullability] <root>.P> origin=FOR_LOOP_ITERATOR
|
||||
$this: CALL 'public open fun listOfNotNull (): @[FlexibleNullability] kotlin.collections.List<@[EnhancedNullability] <root>.P>? declared in <root>.J' type=@[FlexibleNullability] kotlin.collections.List<@[EnhancedNullability] <root>.P>? origin=null
|
||||
WHILE label=null origin=FOR_LOOP_INNER_WHILE
|
||||
condition: CALL 'public abstract fun hasNext (): kotlin.Boolean [operator] declared in kotlin.collections.Iterator' type=kotlin.Boolean origin=FOR_LOOP_HAS_NEXT
|
||||
condition: CALL 'public abstract fun hasNext (): kotlin.Boolean [fake_override,operator] declared in kotlin.collections.MutableIterator' type=kotlin.Boolean origin=FOR_LOOP_HAS_NEXT
|
||||
$this: GET_VAR 'val tmp_3: kotlin.collections.MutableIterator<@[EnhancedNullability] <root>.P> [val] declared in <root>.testForInListUse' type=kotlin.collections.MutableIterator<@[EnhancedNullability] <root>.P> origin=null
|
||||
body: BLOCK type=kotlin.Unit origin=FOR_LOOP_INNER_WHILE
|
||||
VAR FOR_LOOP_VARIABLE name:x type:<root>.P [val]
|
||||
|
||||
@@ -188,11 +188,11 @@ FILE fqName:<root> fileName:/smartCastOnFakeOverrideReceiver.kt
|
||||
TYPE_OP type=<root>.GB<kotlin.Int, kotlin.String> origin=CAST typeOperand=<root>.GB<kotlin.Int, kotlin.String>
|
||||
GET_VAR 'a: kotlin.Any declared in <root>.GB.testGB1' type=kotlin.Any origin=null
|
||||
TYPE_OP type=kotlin.Unit origin=IMPLICIT_COERCION_TO_UNIT typeOperand=kotlin.Unit
|
||||
CALL 'public final fun f (): kotlin.Int declared in <root>.GA' type=kotlin.Int origin=null
|
||||
CALL 'public final fun f (): kotlin.Int [fake_override] declared in <root>.GB' type=kotlin.Int origin=null
|
||||
$this: TYPE_OP type=<root>.GB<kotlin.Int, kotlin.String> origin=IMPLICIT_CAST typeOperand=<root>.GB<kotlin.Int, kotlin.String>
|
||||
GET_VAR 'a: kotlin.Any declared in <root>.GB.testGB1' type=kotlin.Any origin=null
|
||||
TYPE_OP type=kotlin.Unit origin=IMPLICIT_COERCION_TO_UNIT typeOperand=kotlin.Unit
|
||||
CALL 'public final fun <get-aVal> (): kotlin.Int declared in <root>.GA' type=kotlin.Int origin=GET_PROPERTY
|
||||
CALL 'public final fun <get-aVal> (): kotlin.Int [fake_override] declared in <root>.GB' type=kotlin.Int origin=GET_PROPERTY
|
||||
$this: TYPE_OP type=<root>.GB<kotlin.Int, kotlin.String> origin=IMPLICIT_CAST typeOperand=<root>.GB<kotlin.Int, kotlin.String>
|
||||
GET_VAR 'a: kotlin.Any declared in <root>.GB.testGB1' type=kotlin.Any origin=null
|
||||
FUN FAKE_OVERRIDE name:f visibility:public modality:FINAL <> ($this:<root>.GA<T of <root>.GA>) returnType:kotlin.Int [fake_override]
|
||||
|
||||
Generated
+6
@@ -596,6 +596,12 @@ public class DiagnosticTestGenerated extends AbstractDiagnosticTest {
|
||||
runTest("compiler/testData/diagnostics/tests/PropertyInitializers.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("protectedWithGenericsInDifferentPackage.kt")
|
||||
public void testProtectedWithGenericsInDifferentPackage() throws Exception {
|
||||
runTest("compiler/testData/diagnostics/tests/protectedWithGenericsInDifferentPackage.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("publishedApi.kt")
|
||||
public void testPublishedApi() throws Exception {
|
||||
|
||||
Reference in New Issue
Block a user