[Analysis API] Migrate existing code fragment tests to the new API

This commit is contained in:
Yan Zhulanow
2024-01-18 23:37:27 +09:00
committed by Space Team
parent ef890e9b76
commit 3cd04a9e9e
139 changed files with 793 additions and 314 deletions
@@ -1,3 +1,8 @@
// LANGUAGE: +ContextReceivers
// MODULE: context
// FILE: context.kt
fun test() {
with(Foo()) {
call()
@@ -6,11 +11,17 @@ fun test() {
context(Foo)
fun call() {
<caret>val x = 0
<caret_context>val x = 0
}
class Foo {
val foo: String = "foo"
}
// LANGUAGE: +ContextReceivers
// MODULE: main
// MODULE_KIND: CodeFragment
// FILE: fragment.kt
// CODE_FRAGMENT_KIND: EXPRESSION
foo
@@ -1,3 +1,8 @@
// LANGUAGE: +ContextReceivers
// MODULE: context
// FILE: context.kt
fun test() {
with(Foo()) {
call()
@@ -6,11 +11,17 @@ fun test() {
context(Foo)
fun call() {
<caret>val x = 0
<caret_context>val x = 0
}
class Foo {
val foo: String = "foo"
}
// LANGUAGE: +ContextReceivers
// MODULE: main
// MODULE_KIND: CodeFragment
// FILE: fragment.kt
// CODE_FRAGMENT_KIND: EXPRESSION
this@Foo.foo
@@ -1,11 +1,21 @@
// MODULE: context
// FILE: context.kt
fun test() {
with("Hello, world!") {
with(Foo()) {
<caret>val x = 0
<caret_context>val x = 0
}
}
}
class Foo {
val foo: String = "foo"
}
}
// MODULE: main
// MODULE_KIND: CodeFragment
// FILE: fragment.kt
// CODE_FRAGMENT_KIND: EXPRESSION
length + foo.length
@@ -1,5 +1,16 @@
// MODULE: context
// FILE: context.kt
fun test() {
with("Hello, world!") {
<caret>val x = 0
<caret_context>val x = 0
}
}
}
// MODULE: main
// MODULE_KIND: CodeFragment
// FILE: fragment.kt
// CODE_FRAGMENT_KIND: EXPRESSION
this@with.length
@@ -1,5 +1,16 @@
// MODULE: context
// FILE: context.kt
fun test() {
with("Hello, world!") str@{
<caret>val x = 0
<caret_context>val x = 0
}
}
}
// MODULE: main
// MODULE_KIND: CodeFragment
// FILE: fragment.kt
// CODE_FRAGMENT_KIND: EXPRESSION
this@str.length
@@ -1,8 +1,19 @@
// MODULE: context
// FILE: context.kt
fun test() {
1.ext
}
val Int.ext: String
get() {
<caret>return "foo"
}
<caret_context>return "foo"
}
// MODULE: main
// MODULE_KIND: CodeFragment
// FILE: fragment.kt
// CODE_FRAGMENT_KIND: EXPRESSION
dec()
@@ -1,8 +1,19 @@
// MODULE: context
// FILE: context.kt
fun test() {
1.ext
}
val Int.ext: String
get() {
<caret>return "foo"
}
<caret_context>return "foo"
}
// MODULE: main
// MODULE_KIND: CodeFragment
// FILE: fragment.kt
// CODE_FRAGMENT_KIND: EXPRESSION
this.dec()
@@ -1,8 +1,19 @@
// MODULE: context
// FILE: context.kt
fun test() {
1.ext
}
val Int.ext: String
get() {
<caret>return "foo"
}
<caret_context>return "foo"
}
// MODULE: main
// MODULE_KIND: CodeFragment
// FILE: fragment.kt
// CODE_FRAGMENT_KIND: EXPRESSION
this@ext.dec()
@@ -1,3 +1,6 @@
// MODULE: context
// FILE: context.kt
interface Foo
class FooImpl : Foo {
@@ -8,6 +11,15 @@ fun makeFoo(): Foo = FooImpl()
fun main() {
makeFoo().apply {
<caret>Unit
<caret_context>Unit
}
}
}
// MODULE: main
// MODULE_KIND: CodeFragment
// FILE: fragment.kt
// CODE_FRAGMENT_KIND: BLOCK
this as FooImpl
n
@@ -1,5 +1,16 @@
// MODULE: context
// FILE: context.kt
class Foo(a: Int, b: String) {
init {
<caret>val x = 0
<caret_context>val x = 0
}
}
}
// MODULE: main
// MODULE_KIND: CodeFragment
// FILE: fragment.kt
// CODE_FRAGMENT_KIND: EXPRESSION
a + b.length
@@ -1,4 +1,15 @@
// MODULE: context
// FILE: context.kt
fun test() {
val x = 0
<caret>val y = 0
}
<caret_context>val y = 0
}
// MODULE: main
// MODULE_KIND: CodeFragment
// FILE: fragment.kt
// CODE_FRAGMENT_KIND: EXPRESSION
x
@@ -1,3 +1,6 @@
// MODULE: context
// FILE: context.kt
import kotlin.reflect.KProperty
class Delegate(private var value: String) {
@@ -12,5 +15,14 @@ class Delegate(private var value: String) {
fun test() {
var x by Delegate("a")
<caret>x
<caret_context>x
}
// MODULE: main
// MODULE_KIND: CodeFragment
// FILE: fragment.kt
// CODE_FRAGMENT_KIND: BLOCK
x = "O"
x + "K"
@@ -1,5 +1,5 @@
MODULE_FRAGMENT
FILE fqName:<root> fileName:localFunction.kt
FILE fqName:<root> fileName:context.kt
FUN name:call visibility:local modality:FINAL <> (a:kotlin.Int, b:kotlin.String) returnType:kotlin.Unit
VALUE_PARAMETER name:a index:0 type:kotlin.Int
VALUE_PARAMETER name:b index:1 type:kotlin.String
@@ -1,3 +1,6 @@
// MODULE: context
// FILE: context.kt
fun test() {
fun call(a: Int, b: String) {
println(b.repeat(a))
@@ -5,5 +8,13 @@ fun test() {
val x = 2
val y = "foo"
<caret>val z = Unit
}
<caret_context>val z = Unit
}
// MODULE: main
// MODULE_KIND: CodeFragment
// FILE: fragment.kt
// CODE_FRAGMENT_KIND: EXPRESSION
call(x, y)
@@ -4,4 +4,4 @@ public final class CodeFragment {
public final static method run(p0: int, p1: java.lang.String): void
}
public final class LocalFunctionKt
public final class ContextKt
@@ -1,5 +1,5 @@
MODULE_FRAGMENT
FILE fqName:<root> fileName:localFunctionContainingClassClosure.kt
FILE fqName:<root> fileName:context.kt
CLASS CLASS name:Foo modality:FINAL visibility:public superTypes:[kotlin.Any]
$this: VALUE_PARAMETER INSTANCE_RECEIVER name:<this> type:<root>.Foo
CONSTRUCTOR visibility:public <> () returnType:<root>.Foo [primary]
@@ -1,11 +1,22 @@
// MODULE: context
// FILE: context.kt
class Foo {
fun test() {
fun call() {
consume(this@Foo)
}
<caret>call()
<caret_context>call()
}
}
fun consume(obj: Foo) {}
fun consume(obj: Foo) {}
// MODULE: main
// MODULE_KIND: CodeFragment
// FILE: fragment.kt
// CODE_FRAGMENT_KIND: EXPRESSION
call()
@@ -4,11 +4,11 @@ public final class CodeFragment {
public final static method run(p0: Foo): void
}
public final class ContextKt
public final class Foo {
// source: 'localFunctionContainingClassClosure.kt'
// source: 'context.kt'
public method <init>(): void
private final static method test$call(p0: Foo): void
public final method test(): void
}
public final class LocalFunctionContainingClassClosureKt
@@ -1,5 +1,5 @@
MODULE_FRAGMENT
FILE fqName:<root> fileName:localFunctionExtensionReceiverClosure.kt
FILE fqName:<root> fileName:context.kt
FUN name:block visibility:public modality:FINAL <T> (obj:T of <root>.block, block:@[ExtensionFunctionType] kotlin.Function1<T of <root>.block, kotlin.Unit>) returnType:kotlin.Unit
TYPE_PARAMETER name:T index:0 variance: superTypes:[kotlin.Any?] reified:false
VALUE_PARAMETER name:obj index:0 type:T of <root>.block
@@ -1,10 +1,13 @@
// MODULE: context
// FILE: context.kt
fun test() {
block("foo") {
fun call() {
consume(this@block)
}
<caret>call()
<caret_context>call()
}
}
@@ -12,4 +15,12 @@ fun <T> block(obj: T, block: T.() -> Unit) {
obj.block()
}
fun consume(text: String) {}
fun consume(text: String) {}
// MODULE: main
// MODULE_KIND: CodeFragment
// FILE: fragment.kt
// CODE_FRAGMENT_KIND: EXPRESSION
call()
@@ -1,8 +1,8 @@
public final class CodeFragment {
// source: 'fragment.kt'
inner (anonymous) class LocalFunctionExtensionReceiverClosureKt$test$1
inner (anonymous) class ContextKt$test$1
public method <init>(): void
public final static method run(p0: java.lang.String): void
}
public final class LocalFunctionExtensionReceiverClosureKt
public final class ContextKt
@@ -1,5 +1,5 @@
MODULE_FRAGMENT
FILE fqName:<root> fileName:localFunctionLambdaParameterClosure.kt
FILE fqName:<root> fileName:context.kt
FUN name:block visibility:public modality:FINAL <T> (obj:T of <root>.block, block:kotlin.Function1<T of <root>.block, kotlin.Unit>) returnType:kotlin.Unit
TYPE_PARAMETER name:T index:0 variance: superTypes:[kotlin.Any?] reified:false
VALUE_PARAMETER name:obj index:0 type:T of <root>.block
@@ -1,10 +1,13 @@
// MODULE: context
// FILE: context.kt
fun test() {
block("foo") { foo ->
fun call() {
consume(foo)
}
<caret>call()
<caret_context>call()
}
}
@@ -12,4 +15,12 @@ fun <T> block(obj: T, block: (T) -> Unit) {
block(obj)
}
fun consume(text: String) {}
fun consume(text: String) {}
// MODULE: main
// MODULE_KIND: CodeFragment
// FILE: fragment.kt
// CODE_FRAGMENT_KIND: EXPRESSION
call()
@@ -1,8 +1,8 @@
public final class CodeFragment {
// source: 'fragment.kt'
inner (anonymous) class LocalFunctionLambdaParameterClosureKt$test$1
inner (anonymous) class ContextKt$test$1
public method <init>(): void
public final static method run(p0: java.lang.String): void
}
public final class LocalFunctionLambdaParameterClosureKt
public final class ContextKt
@@ -1,5 +1,5 @@
MODULE_FRAGMENT
FILE fqName:<root> fileName:localFunctionLocalClosure.kt
FILE fqName:<root> fileName:context.kt
FUN name:call visibility:local modality:FINAL <> () returnType:kotlin.Unit
FUN name:consume visibility:public modality:FINAL <> (n:kotlin.Int) returnType:kotlin.Unit
VALUE_PARAMETER name:n index:0 type:kotlin.Int
@@ -1,3 +1,6 @@
// MODULE: context
// FILE: context.kt
fun test() {
val x = 0
@@ -5,7 +8,15 @@ fun test() {
consume(x)
}
<caret>call()
<caret_context>call()
}
fun consume(n: Int) {}
fun consume(n: Int) {}
// MODULE: main
// MODULE_KIND: CodeFragment
// FILE: fragment.kt
// CODE_FRAGMENT_KIND: EXPRESSION
call()
@@ -4,4 +4,4 @@ public final class CodeFragment {
public final static method run(p0: int): void
}
public final class LocalFunctionLocalClosureKt
public final class ContextKt
@@ -1,5 +1,5 @@
MODULE_FRAGMENT
FILE fqName:<root> fileName:localFunctionLocalClosureMutating.kt
FILE fqName:<root> fileName:context.kt
FUN name:call visibility:local modality:FINAL <> () returnType:kotlin.Unit
FUN name:test visibility:public modality:FINAL <> () returnType:kotlin.Unit
BLOCK_BODY
@@ -1,3 +1,6 @@
// MODULE: context
// FILE: context.kt
fun test() {
var x = 0
@@ -5,5 +8,13 @@ fun test() {
x = 1
}
<caret>call()
}
<caret_context>call()
}
// MODULE: main
// MODULE_KIND: CodeFragment
// FILE: fragment.kt
// CODE_FRAGMENT_KIND: EXPRESSION
call()
@@ -5,4 +5,4 @@ public final class CodeFragment {
public final inner class kotlin/jvm/internal/Ref$IntRef
}
public final class LocalFunctionLocalClosureMutatingKt
public final class ContextKt
@@ -1,5 +1,5 @@
MODULE_FRAGMENT
FILE fqName:<root> fileName:localFunctionMultipleCapturing.kt
FILE fqName:<root> fileName:context.kt
CLASS CLASS name:Foo modality:FINAL visibility:public superTypes:[kotlin.Any]
$this: VALUE_PARAMETER INSTANCE_RECEIVER name:<this> type:<root>.Foo
CONSTRUCTOR visibility:public <> () returnType:<root>.Foo [primary]
@@ -1,3 +1,6 @@
// MODULE: context
// FILE: context.kt
class Foo {
fun String.test() {
var x: Int
@@ -9,8 +12,16 @@ class Foo {
x = 42
}
<caret>call(1)
<caret_context>call(1)
}
}
fun consume(obj: Any) {}
fun consume(obj: Any) {}
// MODULE: main
// MODULE_KIND: CodeFragment
// FILE: fragment.kt
// CODE_FRAGMENT_KIND: EXPRESSION
call(0)
@@ -5,12 +5,12 @@ public final class CodeFragment {
public final inner class kotlin/jvm/internal/Ref$IntRef
}
public final class ContextKt
public final class Foo {
// source: 'localFunctionMultipleCapturing.kt'
// source: 'context.kt'
public method <init>(): void
private final static method test$call(p0: Foo, p1: java.lang.String, p2: kotlin.jvm.internal.Ref$IntRef, p3: int): void
public final method test(p0: java.lang.String): void
public final inner class kotlin/jvm/internal/Ref$IntRef
}
public final class LocalFunctionMultipleCapturingKt
@@ -1,5 +1,5 @@
MODULE_FRAGMENT
FILE fqName:<root> fileName:localFunctionParameterClosure.kt
FILE fqName:<root> fileName:context.kt
FUN name:call visibility:local modality:FINAL <> () returnType:kotlin.Unit
FUN name:consume visibility:public modality:FINAL <> (n:kotlin.Int) returnType:kotlin.Unit
VALUE_PARAMETER name:n index:0 type:kotlin.Int
@@ -1,9 +1,20 @@
// MODULE: context
// FILE: context.kt
fun test(x: Int) {
fun call() {
consume(x)
}
<caret>call()
<caret_context>call()
}
fun consume(n: Int) {}
fun consume(n: Int) {}
// MODULE: main
// MODULE_KIND: CodeFragment
// FILE: fragment.kt
// CODE_FRAGMENT_KIND: EXPRESSION
call()
@@ -4,4 +4,4 @@ public final class CodeFragment {
public final static method run(p0: int): void
}
public final class LocalFunctionParameterClosureKt
public final class ContextKt
@@ -1,7 +1,17 @@
// MODULE: context
// FILE: context.kt
fun test() {
var x = 0
<caret>val y = 0
<caret_context>val y = 0
}
// MODULE: main
// MODULE_KIND: CodeFragment
// FILE: fragment.kt
// CODE_FRAGMENT_KIND: BLOCK
// FragmentSharedVariablesLowering depends on a specific function name
// CODE_FRAGMENT_METHOD_NAME: generated_for_debugger_fun
// CODE_FRAGMENT_METHOD_NAME: generated_for_debugger_fun
x = 1
@@ -1,4 +1,16 @@
// MODULE: context
// FILE: context.kt
fun test() {
var x = "a"
<caret>x
<caret_context>x
}
// MODULE: main
// MODULE_KIND: CodeFragment
// FILE: fragment.kt
// CODE_FRAGMENT_KIND: BLOCK
x = "O"
x + "K"
@@ -12,7 +12,7 @@ MODULE_FRAGMENT
VALUE_PARAMETER name:p3 index:3 type:<root>.Ctx4
EXPRESSION_BODY
BLOCK type=kotlin.Int origin=null
CALL 'public final fun useWithCtx1Ctx2Ctx3Ctx4 ($context_receiver_0: <root>.Ctx1, $context_receiver_1: <root>.Ctx2, $context_receiver_2: <root>.Ctx3, $context_receiver_3: <root>.Ctx4): kotlin.Int declared in <root>.MultipleClassAndFunctionContextReceiversKt' type=kotlin.Int origin=null
CALL 'public final fun useWithCtx1Ctx2Ctx3Ctx4 ($context_receiver_0: <root>.Ctx1, $context_receiver_1: <root>.Ctx2, $context_receiver_2: <root>.Ctx3, $context_receiver_3: <root>.Ctx4): kotlin.Int declared in <root>.ContextKt' type=kotlin.Int origin=null
$context_receiver_0: GET_FIELD 'FIELD FIELD_FOR_CLASS_CONTEXT_RECEIVER name:contextReceiverField0 type:<root>.Ctx1 visibility:private [final]' type=<root>.Ctx1 origin=null
receiver: GET_VAR 'p0: <root>.Test declared in <root>.CodeFragment.run' type=<root>.Test origin=null
$context_receiver_1: GET_FIELD 'FIELD FIELD_FOR_CLASS_CONTEXT_RECEIVER name:contextReceiverField1 type:<root>.Ctx2 visibility:private [final]' type=<root>.Ctx2 origin=null
@@ -1,4 +1,8 @@
// LANGUAGE: +ContextReceivers
// MODULE: context
// FILE: context.kt
class Ctx1
class Ctx2
class Ctx3
@@ -11,6 +15,14 @@ context(Ctx1, Ctx2)
class Test {
context(Ctx3, Ctx4)
fun foo() {
<caret>val x = 1
<caret_context>val x = 1
}
}
// MODULE: main
// MODULE_KIND: CodeFragment
// FILE: fragment.kt
// CODE_FRAGMENT_KIND: EXPRESSION
useWithCtx1Ctx2Ctx3Ctx4()
@@ -10,7 +10,7 @@ MODULE_FRAGMENT
VALUE_PARAMETER name:p1 index:1 type:<root>.Test
EXPRESSION_BODY
BLOCK type=kotlin.Int origin=null
CALL 'public final fun useWithCtx1Ctx2 ($context_receiver_0: <root>.Ctx1, $context_receiver_1: <root>.Ctx2): kotlin.Int declared in <root>.MultipleClassContextReceiversKt' type=kotlin.Int origin=null
CALL 'public final fun useWithCtx1Ctx2 ($context_receiver_0: <root>.Ctx1, $context_receiver_1: <root>.Ctx2): kotlin.Int declared in <root>.ContextKt' type=kotlin.Int origin=null
$context_receiver_0: GET_FIELD 'FIELD FIELD_FOR_CLASS_CONTEXT_RECEIVER name:contextReceiverField0 type:<root>.Ctx1 visibility:private [final]' type=<root>.Ctx1 origin=null
receiver: GET_VAR 'p0: <root>.Test declared in <root>.CodeFragment.run' type=<root>.Test origin=null
$context_receiver_1: GET_FIELD 'FIELD FIELD_FOR_CLASS_CONTEXT_RECEIVER name:contextReceiverField1 type:<root>.Ctx2 visibility:private [final]' type=<root>.Ctx2 origin=null
@@ -1,4 +1,8 @@
// LANGUAGE: +ContextReceivers
// MODULE: context
// FILE: context.kt
class Ctx1
class Ctx2
@@ -8,6 +12,14 @@ fun useWithCtx1Ctx2() = 3
context(Ctx1, Ctx2)
class Test {
fun foo() {
<caret>val x = 1
<caret_context>val x = 1
}
}
// MODULE: main
// MODULE_KIND: CodeFragment
// FILE: fragment.kt
// CODE_FRAGMENT_KIND: EXPRESSION
useWithCtx1Ctx2()
@@ -10,6 +10,6 @@ MODULE_FRAGMENT
VALUE_PARAMETER name:p1 index:1 type:<root>.Ctx2
EXPRESSION_BODY
BLOCK type=kotlin.Int origin=null
CALL 'public final fun useWithCtx1Ctx2 ($context_receiver_0: <root>.Ctx1, $context_receiver_1: <root>.Ctx2): kotlin.Int declared in <root>.MultipleFunctionContextReceiversKt' type=kotlin.Int origin=null
CALL 'public final fun useWithCtx1Ctx2 ($context_receiver_0: <root>.Ctx1, $context_receiver_1: <root>.Ctx2): kotlin.Int declared in <root>.ContextKt' type=kotlin.Int origin=null
$context_receiver_0: GET_VAR 'p0: <root>.Ctx1 declared in <root>.CodeFragment.run' type=<root>.Ctx1 origin=null
$context_receiver_1: GET_VAR 'p1: <root>.Ctx2 declared in <root>.CodeFragment.run' type=<root>.Ctx2 origin=null
@@ -1,4 +1,8 @@
// LANGUAGE: +ContextReceivers
// MODULE: context
// FILE: context.kt
class Ctx1
class Ctx2
@@ -7,5 +11,13 @@ fun useWithCtx1Ctx2() = 3
context(Ctx1, Ctx2)
fun foo() {
<caret>val x = 1
}
<caret_context>val x = 1
}
// MODULE: main
// MODULE_KIND: CodeFragment
// FILE: fragment.kt
// CODE_FRAGMENT_KIND: EXPRESSION
useWithCtx1Ctx2()
@@ -1 +0,0 @@
callFoo(this@Foo) + callString(a) + callString(b)
@@ -12,11 +12,11 @@ MODULE_FRAGMENT
BLOCK type=kotlin.Int origin=null
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 plus (other: kotlin.Int): kotlin.Int [operator] declared in kotlin.Int' type=kotlin.Int origin=PLUS
$this: CALL 'public final fun callFoo (foo: <root>.Foo): kotlin.Int declared in <root>.NestedOuterClassKt' type=kotlin.Int origin=null
$this: CALL 'public final fun callFoo (foo: <root>.Foo): kotlin.Int declared in <root>.ContextKt' type=kotlin.Int origin=null
foo: GET_VAR 'p0: <root>.Foo declared in <root>.CodeFragment.run' type=<root>.Foo origin=null
other: CALL 'public final fun callString (string: kotlin.String): kotlin.Int declared in <root>.NestedOuterClassKt' type=kotlin.Int origin=null
other: CALL 'public final fun callString (string: kotlin.String): kotlin.Int declared in <root>.ContextKt' type=kotlin.Int origin=null
string: CALL 'private final fun <get-a> (): kotlin.String declared in <root>.Foo' type=kotlin.String origin=GET_PROPERTY
$this: GET_VAR 'p0: <root>.Foo declared in <root>.CodeFragment.run' type=<root>.Foo origin=null
other: CALL 'public final fun callString (string: kotlin.String): kotlin.Int declared in <root>.NestedOuterClassKt' type=kotlin.Int origin=null
other: CALL 'public final fun callString (string: kotlin.String): kotlin.Int declared in <root>.ContextKt' type=kotlin.Int origin=null
string: CALL 'private final fun <get-b> (): kotlin.String declared in <root>.Foo.Bar' type=kotlin.String origin=GET_PROPERTY
$this: GET_VAR 'p1: <root>.Foo.Bar declared in <root>.CodeFragment.run' type=<root>.Foo.Bar origin=null
@@ -1,3 +1,6 @@
// MODULE: context
// FILE: context.kt
class Foo {
private val a: String = "foo"
@@ -5,7 +8,7 @@ class Foo {
private val b: String = "bar"
fun test() {
<caret>val x = 0
<caret_context>val x = 0
}
}
}
@@ -16,4 +19,12 @@ fun callFoo(foo: Foo): Int {
fun callString(string: String): Int {
return 1
}
}
// MODULE: main
// MODULE_KIND: CodeFragment
// FILE: fragment.kt
// CODE_FRAGMENT_KIND: EXPRESSION
callFoo(this@Foo) + callString(a) + callString(b)
@@ -1,7 +1,18 @@
// MODULE: context
// FILE: context.kt
object Foo {
fun test() {
<caret>val x = 0
<caret_context>val x = 0
}
fun call() {}
}
}
// MODULE: main
// MODULE_KIND: CodeFragment
// FILE: fragment.kt
// CODE_FRAGMENT_KIND: EXPRESSION
call()
@@ -1,7 +1,18 @@
// MODULE: context
// FILE: context.kt
class Test {
val a: String = "foo"
fun test() {
<caret>val x = 0
<caret_context>val x = 0
}
}
}
// MODULE: main
// MODULE_KIND: CodeFragment
// FILE: fragment.kt
// CODE_FRAGMENT_KIND: EXPRESSION
a.length
@@ -1,7 +1,18 @@
// MODULE: context
// FILE: context.kt
class Test {
var a: String = "foo"
fun test() {
<caret>val x = 0
<caret_context>val x = 0
}
}
}
// MODULE: main
// MODULE_KIND: CodeFragment
// FILE: fragment.kt
// CODE_FRAGMENT_KIND: BLOCK
a = "bar"
@@ -1,2 +0,0 @@
@Suppress("INVISIBLE_SETTER")
a = "bar"
@@ -1,7 +1,19 @@
// MODULE: context
// FILE: context.kt
class Test {
private var a: String = "foo"
fun test() {
<caret>val x = 0
<caret_context>val x = 0
}
}
}
// MODULE: main
// MODULE_KIND: CodeFragment
// FILE: fragment.kt
// CODE_FRAGMENT_KIND: EXPRESSION
@Suppress("INVISIBLE_SETTER")
a = "bar"
@@ -1,2 +0,0 @@
// Need to choose public foo(Any) call instead of more specific but private call foo(Int)
a.foo(5)
@@ -1,8 +1,19 @@
// MODULE: context
// FILE: context.kt
class A {
private fun foo(x: Int) = 1 + x
fun foo(x: Any) = 2
}
fun test(a: A) {
<caret>val x = 0
<caret_context>val x = 0
}
// MODULE: main
// MODULE_KIND: CodeFragment
// FILE: fragment.kt
// CODE_FRAGMENT_KIND: EXPRESSION
// Need to choose public foo(Any) call instead of more specific but private call foo(Int)
a.foo(5)
@@ -1,7 +1,18 @@
// MODULE: context
// FILE: context.kt
class A {
private fun foo() = 2
}
fun test(a: A) {
<caret>val x = 0
<caret_context>val x = 0
}
// MODULE: main
// MODULE_KIND: CodeFragment
// FILE: fragment.kt
// CODE_FRAGMENT_KIND: EXPRESSION
a.foo()
@@ -9,6 +9,6 @@ MODULE_FRAGMENT
VALUE_PARAMETER name:p0 index:0 type:<root>.Test
EXPRESSION_BODY
BLOCK type=kotlin.Int origin=null
CALL 'public final fun useWithCtx2 ($context_receiver_0: <root>.Ctx2): kotlin.Int declared in <root>.SecondClassContextReceiverKt' type=kotlin.Int origin=null
CALL 'public final fun useWithCtx2 ($context_receiver_0: <root>.Ctx2): kotlin.Int declared in <root>.ContextKt' type=kotlin.Int origin=null
$context_receiver_0: GET_FIELD 'FIELD FIELD_FOR_CLASS_CONTEXT_RECEIVER name:contextReceiverField1 type:<root>.Ctx2 visibility:private [final]' type=<root>.Ctx2 origin=null
receiver: GET_VAR 'p0: <root>.Test declared in <root>.CodeFragment.run' type=<root>.Test origin=null
@@ -1,4 +1,8 @@
// LANGUAGE: +ContextReceivers
// MODULE: context
// FILE: context.kt
class Ctx1
class Ctx2
@@ -8,6 +12,14 @@ fun useWithCtx2() = 3
context(Ctx1, Ctx2)
class Test {
fun foo() {
<caret>val x = 1
<caret_context>val x = 1
}
}
// MODULE: main
// MODULE_KIND: CodeFragment
// FILE: fragment.kt
// CODE_FRAGMENT_KIND: EXPRESSION
useWithCtx2()
@@ -9,6 +9,6 @@ MODULE_FRAGMENT
VALUE_PARAMETER name:p0 index:0 type:<root>.Test
EXPRESSION_BODY
BLOCK type=kotlin.Int origin=null
CALL 'public final fun useWithCtx1 ($context_receiver_0: <root>.Ctx1): kotlin.Int declared in <root>.SingleClassContextReceiverKt' type=kotlin.Int origin=null
CALL 'public final fun useWithCtx1 ($context_receiver_0: <root>.Ctx1): kotlin.Int declared in <root>.ContextKt' type=kotlin.Int origin=null
$context_receiver_0: GET_FIELD 'FIELD FIELD_FOR_CLASS_CONTEXT_RECEIVER name:contextReceiverField0 type:<root>.Ctx1 visibility:private [final]' type=<root>.Ctx1 origin=null
receiver: GET_VAR 'p0: <root>.Test declared in <root>.CodeFragment.run' type=<root>.Test origin=null
@@ -1,4 +1,8 @@
// LANGUAGE: +ContextReceivers
// MODULE: context
// FILE: context.kt
class Ctx1
context(Ctx1)
@@ -7,6 +11,14 @@ fun useWithCtx1() = 3
context(Ctx1)
class Test {
fun foo() {
<caret>val x = 1
<caret_context>val x = 1
}
}
// MODULE: main
// MODULE_KIND: CodeFragment
// FILE: fragment.kt
// CODE_FRAGMENT_KIND: EXPRESSION
useWithCtx1()
@@ -1,9 +1,12 @@
// MODULE: context
// FILE: context.kt
fun test() {
dumbWith("Hello, world!") {
if (this is String) {
dumbWith(Foo()) {
if (this is Foo) {
<caret>val x = 0
<caret_context>val x = 0
}
}
}
@@ -16,4 +19,12 @@ inline fun dumbWith(obj: Any?, block: Any?.() -> Unit) {
class Foo {
val foo: String = "foo"
}
}
// MODULE: main
// MODULE_KIND: CodeFragment
// FILE: fragment.kt
// CODE_FRAGMENT_KIND: EXPRESSION
length + foo.length
@@ -1,9 +1,20 @@
// MODULE: context
// FILE: context.kt
fun test(foo: Any?) {
if (foo is Foo) {
<caret>val x = 0
<caret_context>val x = 0
}
}
class Foo {
fun call() {}
}
}
// MODULE: main
// MODULE_KIND: CodeFragment
// FILE: fragment.kt
// CODE_FRAGMENT_KIND: EXPRESSION
foo.call()
@@ -1,7 +1,18 @@
// MODULE: context
// FILE: context.kt
fun test(foo: Foo?) {
<caret>val x = 0
<caret_context>val x = 0
}
class Foo {
fun call() {}
}
}
// MODULE: main
// MODULE_KIND: CodeFragment
// FILE: fragment.kt
// CODE_FRAGMENT_KIND: EXPRESSION
foo?.call()