Add test methods and data base on raw fir builder test data
This commit is contained in:
committed by
Mikhail Glukhikh
parent
fd8205e317
commit
8047aa22a4
@@ -47,6 +47,7 @@ dependencies {
|
|||||||
testCompile(projectTests(":compiler:fir:psi2fir"))
|
testCompile(projectTests(":compiler:fir:psi2fir"))
|
||||||
testCompile(projectTests(":compiler:fir:fir2ir"))
|
testCompile(projectTests(":compiler:fir:fir2ir"))
|
||||||
testCompile(projectTests(":compiler:fir:resolve"))
|
testCompile(projectTests(":compiler:fir:resolve"))
|
||||||
|
testCompile(projectTests(":compiler:visualizer"))
|
||||||
testCompile(projectTests(":generators:test-generator"))
|
testCompile(projectTests(":generators:test-generator"))
|
||||||
testCompile(project(":compiler:ir.ir2cfg"))
|
testCompile(project(":compiler:ir.ir2cfg"))
|
||||||
testCompile(project(":compiler:ir.tree")) // used for deepCopyWithSymbols call that is removed by proguard from the compiler TODO: make it more straightforward
|
testCompile(project(":compiler:ir.tree")) // used for deepCopyWithSymbols call that is removed by proguard from the compiler TODO: make it more straightforward
|
||||||
|
|||||||
@@ -54,6 +54,7 @@ import org.jetbrains.kotlin.resolve.constraintSystem.AbstractConstraintSystemTes
|
|||||||
import org.jetbrains.kotlin.serialization.AbstractLocalClassProtoTest
|
import org.jetbrains.kotlin.serialization.AbstractLocalClassProtoTest
|
||||||
import org.jetbrains.kotlin.test.TargetBackend
|
import org.jetbrains.kotlin.test.TargetBackend
|
||||||
import org.jetbrains.kotlin.types.AbstractTypeBindingTest
|
import org.jetbrains.kotlin.types.AbstractTypeBindingTest
|
||||||
|
import org.jetbrains.kotlin.visualizer.AbstractPsiVisualizer
|
||||||
|
|
||||||
fun main(args: Array<String>) {
|
fun main(args: Array<String>) {
|
||||||
System.setProperty("java.awt.headless", "true")
|
System.setProperty("java.awt.headless", "true")
|
||||||
@@ -480,4 +481,9 @@ fun main(args: Array<String>) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
testGroup("compiler/visualizer/tests", "compiler/fir/psi2fir/testData") {
|
||||||
|
testClass<AbstractPsiVisualizer>("PsiVisualizerForRawFirDataGenerated") {
|
||||||
|
model("rawBuilder", testMethod = "doFirBuilderDataTest")
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,4 @@
|
|||||||
|
open class A
|
||||||
|
|
||||||
|
|
||||||
|
class B : A
|
||||||
@@ -0,0 +1,13 @@
|
|||||||
|
abstract class A {
|
||||||
|
abstract class Nested
|
||||||
|
}
|
||||||
|
|
||||||
|
typealias TA = A
|
||||||
|
|
||||||
|
// fun TA.<init>(): TA /* = A */
|
||||||
|
// │
|
||||||
|
class B : TA() {
|
||||||
|
// constructor A.Nested()
|
||||||
|
// │
|
||||||
|
class NestedInB : Nested()
|
||||||
|
}
|
||||||
@@ -0,0 +1,21 @@
|
|||||||
|
package p
|
||||||
|
|
||||||
|
abstract class My {
|
||||||
|
// constructor My()
|
||||||
|
// │
|
||||||
|
abstract class NestedOne : My() {
|
||||||
|
// constructor My.NestedOne()
|
||||||
|
// │
|
||||||
|
abstract class NestedTwo : NestedOne() {
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// constructor My()
|
||||||
|
// │
|
||||||
|
class Your : My() {
|
||||||
|
// constructor My.NestedOne()
|
||||||
|
// │
|
||||||
|
class NestedThree : NestedOne()
|
||||||
|
}
|
||||||
@@ -0,0 +1,16 @@
|
|||||||
|
package a.b
|
||||||
|
|
||||||
|
class C<T, out S> {
|
||||||
|
inner class D<R, in P> {
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
interface Test {
|
||||||
|
// C<out CharSequence, *>.D<in collections/List<*>, *>
|
||||||
|
// │ package a
|
||||||
|
// │ │ package a/b
|
||||||
|
// │ │ │ class C<T, S> collections/List<*>
|
||||||
|
// │ │ │ │ │
|
||||||
|
val x: a.b.C<out CharSequence, *>.D<in List<*>, *>
|
||||||
|
}
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
open class Base<T>(val x: T)
|
||||||
|
|
||||||
|
// constructor Base<T>(T)
|
||||||
|
// │ Derived.<init>.x: T
|
||||||
|
// │ │
|
||||||
|
class Derived<T : Any>(x: T) : Base<T>(x)
|
||||||
|
|
||||||
|
// constructor Derived<T : Any>(T)
|
||||||
|
// │ create.x: T
|
||||||
|
// │ │
|
||||||
|
fun <T : Any> create(x: T): Derived<T> = Derived(x)
|
||||||
@@ -0,0 +1,62 @@
|
|||||||
|
import my.println
|
||||||
|
|
||||||
|
enum class Order {
|
||||||
|
FIRST,
|
||||||
|
SECOND,
|
||||||
|
THIRD
|
||||||
|
}
|
||||||
|
|
||||||
|
enum class Planet(val m: Double, internal val r: Double) {
|
||||||
|
// constructor Planet(Double, Double)
|
||||||
|
// │Double
|
||||||
|
// ││ Double
|
||||||
|
// ││ │
|
||||||
|
MERCURY(1.0, 2.0) {
|
||||||
|
override fun sayHello() {
|
||||||
|
// fun io/println(Any?): Unit
|
||||||
|
// │
|
||||||
|
println("Hello!!!")
|
||||||
|
}
|
||||||
|
},
|
||||||
|
// constructor Planet(Double, Double)
|
||||||
|
// │Double
|
||||||
|
// ││ Double
|
||||||
|
// ││ │
|
||||||
|
VENERA(3.0, 4.0) {
|
||||||
|
override fun sayHello() {
|
||||||
|
// fun io/println(Any?): Unit
|
||||||
|
// │
|
||||||
|
println("Ola!!!")
|
||||||
|
}
|
||||||
|
},
|
||||||
|
// constructor Planet(Double, Double)
|
||||||
|
// │Double
|
||||||
|
// ││ Double
|
||||||
|
// ││ │
|
||||||
|
EARTH(5.0, 6.0) {
|
||||||
|
override fun sayHello() {
|
||||||
|
// fun io/println(Any?): Unit
|
||||||
|
// │
|
||||||
|
println("Privet!!!")
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
// val (Planet/Companion).G: Double
|
||||||
|
// │ fun (Double).times(Double): Double
|
||||||
|
// │ │ val (Planet).m: Double
|
||||||
|
// │ │ │ fun (Double).div(Double): Double
|
||||||
|
// │ │ │ │ val (Planet).r: Double
|
||||||
|
// │ │ │ │ │ fun (Double).times(Double): Double
|
||||||
|
// Double │ │ │ │ │ │ val (Planet).r: Double
|
||||||
|
// │ │ │ │ │ │ │ │
|
||||||
|
val g: Double = G * m / (r * r)
|
||||||
|
|
||||||
|
abstract fun sayHello()
|
||||||
|
|
||||||
|
companion object {
|
||||||
|
// Double
|
||||||
|
// │ Double
|
||||||
|
// │ │
|
||||||
|
const val G = 6.67e-11
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,28 @@
|
|||||||
|
interface Some
|
||||||
|
|
||||||
|
object O1 : Some
|
||||||
|
|
||||||
|
object O2 : Some
|
||||||
|
|
||||||
|
enum class SomeEnum(val x: Some) {
|
||||||
|
// constructor SomeEnum(Some)
|
||||||
|
// │object O1: Some
|
||||||
|
// ││
|
||||||
|
FIRST(O1) {
|
||||||
|
// Boolean
|
||||||
|
// │
|
||||||
|
override fun check(y: Some): Boolean = true
|
||||||
|
},
|
||||||
|
// constructor SomeEnum(Some)
|
||||||
|
// │object O2: Some
|
||||||
|
// ││
|
||||||
|
SECOND(O2) {
|
||||||
|
// SomeEnum.SECOND.check.y: Some
|
||||||
|
// │ fun (Any).equals(Any?): Boolean
|
||||||
|
// │ │ object O2: Some
|
||||||
|
// │ │ │
|
||||||
|
override fun check(y: Some): Boolean = y == O2
|
||||||
|
};
|
||||||
|
|
||||||
|
abstract fun check(y: Some): Boolean
|
||||||
|
}
|
||||||
@@ -0,0 +1,15 @@
|
|||||||
|
expect class MyClass
|
||||||
|
|
||||||
|
expect fun foo(): String
|
||||||
|
|
||||||
|
// Int
|
||||||
|
// │
|
||||||
|
expect val x: Int
|
||||||
|
|
||||||
|
actual class MyClass
|
||||||
|
|
||||||
|
actual fun foo() = "Hello"
|
||||||
|
|
||||||
|
// Int Int
|
||||||
|
// │ │
|
||||||
|
actual val x = 42
|
||||||
@@ -0,0 +1,15 @@
|
|||||||
|
// fun ((T) -> Unit).invoke(T): Unit
|
||||||
|
// │
|
||||||
|
fun <T> simpleRun(f: (T) -> Unit): Unit = f()
|
||||||
|
|
||||||
|
// collections/List<T>
|
||||||
|
// │
|
||||||
|
fun <T, R> List<T>.simpleMap(f: (T) -> R): R {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// simpleWith.t: T
|
||||||
|
// │ fun T.invoke(): Unit
|
||||||
|
// │ │
|
||||||
|
fun <T> simpleWith(t: T, f: T.() -> Unit): Unit = t.f()
|
||||||
|
|
||||||
@@ -0,0 +1,7 @@
|
|||||||
|
interface Any
|
||||||
|
|
||||||
|
inline fun <reified T : Any> Any.safeAs(): T? = this as? T
|
||||||
|
|
||||||
|
abstract class Summator {
|
||||||
|
abstract fun <T> plus(first: T, second: T): T
|
||||||
|
}
|
||||||
@@ -0,0 +1,7 @@
|
|||||||
|
// fun TODO(): Nothing
|
||||||
|
// │
|
||||||
|
fun <T> genericFoo(): T = TODO()
|
||||||
|
|
||||||
|
// T fun <T> genericFoo(): T
|
||||||
|
// │ │
|
||||||
|
val <T> T.generic: T get() = genericFoo()
|
||||||
@@ -0,0 +1,12 @@
|
|||||||
|
abstract class Base(val s: String)
|
||||||
|
|
||||||
|
class Outer {
|
||||||
|
// constructor Base(String)
|
||||||
|
// │ Outer.Derived.<init>.s: String
|
||||||
|
// │ │
|
||||||
|
class Derived(s: String) : Base(s)
|
||||||
|
|
||||||
|
// constructor Base(String)
|
||||||
|
// │
|
||||||
|
object Obj : Base("")
|
||||||
|
}
|
||||||
@@ -0,0 +1,14 @@
|
|||||||
|
class NoPrimary {
|
||||||
|
// String
|
||||||
|
// │
|
||||||
|
val x: String
|
||||||
|
|
||||||
|
constructor(x: String) {
|
||||||
|
// val (NoPrimary).x: String
|
||||||
|
// │ NoPrimary.<init>.x: String
|
||||||
|
// │ │
|
||||||
|
this.x = x
|
||||||
|
}
|
||||||
|
|
||||||
|
constructor(): this("")
|
||||||
|
}
|
||||||
@@ -0,0 +1,37 @@
|
|||||||
|
interface SomeInterface {
|
||||||
|
fun foo(x: Int, y: String): String
|
||||||
|
|
||||||
|
// Boolean
|
||||||
|
// │
|
||||||
|
val bar: Boolean
|
||||||
|
}
|
||||||
|
|
||||||
|
class SomeClass : SomeInterface {
|
||||||
|
// Int Int
|
||||||
|
// │ │
|
||||||
|
private val baz = 42
|
||||||
|
|
||||||
|
override fun foo(x: Int, y: String): String {
|
||||||
|
// SomeClass.foo.y: String
|
||||||
|
// │ fun (String).plus(Any?): String
|
||||||
|
// │ │ SomeClass.foo.x: Int
|
||||||
|
// │ │ │ fun (String).plus(Any?): String
|
||||||
|
// │ │ │ │ val (SomeClass).baz: Int
|
||||||
|
// │ │ │ │ │
|
||||||
|
return y + x + baz
|
||||||
|
}
|
||||||
|
|
||||||
|
// Boolean
|
||||||
|
// │
|
||||||
|
override var bar: Boolean
|
||||||
|
// Boolean
|
||||||
|
// │
|
||||||
|
get() = true
|
||||||
|
set(value) {}
|
||||||
|
|
||||||
|
// Double
|
||||||
|
// │
|
||||||
|
lateinit var fau: Double
|
||||||
|
}
|
||||||
|
|
||||||
|
inline class InlineClass
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
fun foo() {}
|
||||||
|
|
||||||
|
suspend fun bar() {}
|
||||||
@@ -0,0 +1,7 @@
|
|||||||
|
interface B
|
||||||
|
|
||||||
|
typealias C = B
|
||||||
|
|
||||||
|
// C /* = B */
|
||||||
|
// │
|
||||||
|
class D : C
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
open class A
|
||||||
|
|
||||||
|
interface B<S, T : A>
|
||||||
|
|
||||||
|
typealias C<T> = B<T, A>
|
||||||
|
|
||||||
|
// C<A> /* = B<A, A> */
|
||||||
|
// │
|
||||||
|
class D : C<A>
|
||||||
+28
@@ -0,0 +1,28 @@
|
|||||||
|
package test
|
||||||
|
|
||||||
|
interface Some
|
||||||
|
|
||||||
|
abstract class My<T : Some> {
|
||||||
|
inner class T
|
||||||
|
|
||||||
|
// T
|
||||||
|
// │
|
||||||
|
abstract val x: T
|
||||||
|
|
||||||
|
abstract fun foo(arg: T)
|
||||||
|
|
||||||
|
// [ERROR : T]
|
||||||
|
// │ class My<T : Some>
|
||||||
|
// │ │
|
||||||
|
abstract val y: My.T
|
||||||
|
|
||||||
|
// [ERROR : T]
|
||||||
|
// │ package test
|
||||||
|
// │ │ class My<T : Some>
|
||||||
|
// │ │ │
|
||||||
|
abstract val z: test.My.T
|
||||||
|
|
||||||
|
// [ERROR : T]
|
||||||
|
// │
|
||||||
|
class Some : T()
|
||||||
|
}
|
||||||
@@ -0,0 +1,20 @@
|
|||||||
|
interface List<out T : Any> {
|
||||||
|
operator fun get(index: Int): T
|
||||||
|
|
||||||
|
infix fun concat(other: List<T>): List<T>
|
||||||
|
}
|
||||||
|
|
||||||
|
typealias StringList = List<out String>
|
||||||
|
typealias AnyList = List<*>
|
||||||
|
|
||||||
|
abstract class AbstractList<out T : Any> : List<T>
|
||||||
|
|
||||||
|
// constructor AbstractList<T : Any>()
|
||||||
|
// │
|
||||||
|
class SomeList : AbstractList<Int>() {
|
||||||
|
// Int
|
||||||
|
// │
|
||||||
|
override fun get(index: Int): Int = 42
|
||||||
|
|
||||||
|
override fun concat(other: List<Int>): List<Int> = this
|
||||||
|
}
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
interface A
|
||||||
|
interface B
|
||||||
|
|
||||||
|
class C<T> where T : A, T : B {
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,52 @@
|
|||||||
|
//constructor annotation/Target(vararg annotation/AnnotationTarget)
|
||||||
|
//│ enum class annotation/AnnotationTarget: Enum<annotation/AnnotationTarget>
|
||||||
|
//│ │ enum entry annotation/AnnotationTarget.EXPRESSION
|
||||||
|
//│ │ │
|
||||||
|
@Target(AnnotationTarget.EXPRESSION)
|
||||||
|
//constructor annotation/Retention(annotation/AnnotationRetention = ...)
|
||||||
|
//│ enum class annotation/AnnotationRetention: Enum<annotation/AnnotationRetention>
|
||||||
|
//│ │ enum entry annotation/AnnotationRetention.SOURCE
|
||||||
|
//│ │ │
|
||||||
|
@Retention(AnnotationRetention.SOURCE)
|
||||||
|
annotation class Ann
|
||||||
|
|
||||||
|
fun foo(arg: Int): Int {
|
||||||
|
// constructor Ann()
|
||||||
|
// │ foo.arg: Int
|
||||||
|
// │ │ fun (Any).equals(Any?): Boolean
|
||||||
|
// Unit │ │ │ Int
|
||||||
|
// │ │ │ │ │
|
||||||
|
if (@Ann arg == 0) {
|
||||||
|
// constructor Ann()
|
||||||
|
// │ Int
|
||||||
|
// │ │
|
||||||
|
@Ann return 1
|
||||||
|
}
|
||||||
|
// constructor Ann()
|
||||||
|
// │ Unit
|
||||||
|
// │ │ foo.arg: Int
|
||||||
|
// │ │ │ fun (Any).equals(Any?): Boolean
|
||||||
|
// │ │ │ │ Int
|
||||||
|
// │ │ │ │ │
|
||||||
|
@Ann if (arg == 1) {
|
||||||
|
// constructor Ann()
|
||||||
|
// │ Int
|
||||||
|
// │ │
|
||||||
|
return (@Ann 1)
|
||||||
|
}
|
||||||
|
// Int
|
||||||
|
// │
|
||||||
|
return 42
|
||||||
|
}
|
||||||
|
|
||||||
|
data class Two(x: Int, y: Int)
|
||||||
|
|
||||||
|
fun bar(two: Two) {
|
||||||
|
// constructor Ann()
|
||||||
|
// │ [ERROR : component1() return type]
|
||||||
|
// │ │ constructor Ann()
|
||||||
|
// │ │ │ [ERROR : component2() return type]
|
||||||
|
// │ │ │ │ bar.two: Two
|
||||||
|
// │ │ │ │ │
|
||||||
|
val (@Ann x, @Ann y) = two
|
||||||
|
}
|
||||||
@@ -0,0 +1,23 @@
|
|||||||
|
// Int Int
|
||||||
|
// │ │
|
||||||
|
val p = 0
|
||||||
|
// Int
|
||||||
|
// │
|
||||||
|
fun foo() = 1
|
||||||
|
|
||||||
|
class Wrapper(val v: IntArray)
|
||||||
|
|
||||||
|
// test.a: IntArray
|
||||||
|
// │ Int
|
||||||
|
// │ │ fun (Int).plus(Int): Int
|
||||||
|
// │ │ │ test.a: IntArray
|
||||||
|
// │ │ │ │ val p: Int
|
||||||
|
// │ │ │ │ │ fun (Int).plus(Int): Int
|
||||||
|
// │ │ │ │ │ │ test.a: IntArray
|
||||||
|
// │ │ │ │ │ │ │ fun foo(): Int
|
||||||
|
// │ │ │ │ │ │ │ │ fun (Int).plus(Int): Int
|
||||||
|
// │ │ │ │ │ │ │ │ │ test.w: Wrapper
|
||||||
|
// │ │ │ │ │ │ │ │ │ │ val (Wrapper).v: IntArray
|
||||||
|
// │ │ │ │ │ │ │ │ │ │ │ Int
|
||||||
|
// │ │ │ │ │ │ │ │ │ │ │ │
|
||||||
|
fun test(a: IntArray, w: Wrapper) = a[0] + a[p] + a[foo()] + w.v[0]
|
||||||
@@ -0,0 +1,28 @@
|
|||||||
|
fun test() {
|
||||||
|
// IntArray
|
||||||
|
// │ fun intArrayOf(vararg Int): IntArray
|
||||||
|
// │ │ Int
|
||||||
|
// │ │ │ Int
|
||||||
|
// │ │ │ │ Int
|
||||||
|
// │ │ │ │ │
|
||||||
|
val x = intArrayOf(1, 2, 3)
|
||||||
|
// val test.x: IntArray
|
||||||
|
// │ Int Int
|
||||||
|
// │ │ │
|
||||||
|
x[1] = 0
|
||||||
|
}
|
||||||
|
|
||||||
|
// Int
|
||||||
|
// │
|
||||||
|
fun foo() = 1
|
||||||
|
|
||||||
|
fun test2() {
|
||||||
|
// fun intArrayOf(vararg Int): IntArray
|
||||||
|
// │ Int
|
||||||
|
// │ │ Int
|
||||||
|
// │ │ │ Int
|
||||||
|
// │ │ │ │ fun foo(): Int
|
||||||
|
// │ │ │ │ │ Int
|
||||||
|
// │ │ │ │ │ │
|
||||||
|
intArrayOf(1, 2, 3)[foo()] = 1
|
||||||
|
}
|
||||||
@@ -0,0 +1,90 @@
|
|||||||
|
// foo.a: Int
|
||||||
|
// │ fun (Int).compareTo(Int): Int
|
||||||
|
// │ │ foo.b: Int
|
||||||
|
// │ │ │ foo.a: Int
|
||||||
|
// Int │ │ │ │ foo.b: Int
|
||||||
|
// │ │ │ │ │ │
|
||||||
|
fun foo(a: Int, b: Int) = if (a > b) a else b
|
||||||
|
|
||||||
|
fun bar(a: Double, b: Double): Double {
|
||||||
|
// Nothing
|
||||||
|
// │ bar.a: Double
|
||||||
|
// │ │ fun (Double).compareTo(Double): Int
|
||||||
|
// │ │ │ bar.b: Double
|
||||||
|
// │ │ │ │
|
||||||
|
if (a > b) {
|
||||||
|
// fun io/println(Double): Unit
|
||||||
|
// │ bar.a: Double
|
||||||
|
// │ │
|
||||||
|
println(a)
|
||||||
|
// bar.a: Double
|
||||||
|
// │
|
||||||
|
return a
|
||||||
|
} else {
|
||||||
|
// fun io/println(Double): Unit
|
||||||
|
// │ bar.b: Double
|
||||||
|
// │ │
|
||||||
|
println(b)
|
||||||
|
// bar.b: Double
|
||||||
|
// │
|
||||||
|
return b
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fun baz(a: Long, b: Long): Long {
|
||||||
|
// Nothing
|
||||||
|
// │
|
||||||
|
when {
|
||||||
|
// baz.a: Long
|
||||||
|
// │ fun (Long).compareTo(Long): Int
|
||||||
|
// │ │ baz.b: Long
|
||||||
|
// │ │ │ Nothing
|
||||||
|
// │ │ │ │
|
||||||
|
a > b -> {
|
||||||
|
// fun io/println(Long): Unit
|
||||||
|
// │ baz.a: Long
|
||||||
|
// │ │
|
||||||
|
println(a)
|
||||||
|
// baz.a: Long
|
||||||
|
// │
|
||||||
|
return a
|
||||||
|
}
|
||||||
|
// Nothing
|
||||||
|
// │ baz.b: Long
|
||||||
|
// │ │
|
||||||
|
else -> return b
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fun grade(g: Int): String {
|
||||||
|
// String
|
||||||
|
// │ grade.g: Int
|
||||||
|
// │ │
|
||||||
|
return when (g) {
|
||||||
|
// Int
|
||||||
|
// │ Int String
|
||||||
|
// │ │ │
|
||||||
|
6, 7 -> "Outstanding"
|
||||||
|
// Int String
|
||||||
|
// │ │
|
||||||
|
5 -> "Excellent"
|
||||||
|
// Int String
|
||||||
|
// │ │
|
||||||
|
4 -> "Good"
|
||||||
|
// Int String
|
||||||
|
// │ │
|
||||||
|
3 -> "Mediocre"
|
||||||
|
// fun (ranges/IntRange).contains(Int): Boolean
|
||||||
|
// │ Int
|
||||||
|
// │ │fun (Int).rangeTo(Int): ranges/IntRange
|
||||||
|
// │ ││ Int String
|
||||||
|
// │ ││ │ │
|
||||||
|
in 1..2 -> "Fail"
|
||||||
|
// String
|
||||||
|
// │
|
||||||
|
is Number -> "Number"
|
||||||
|
// String
|
||||||
|
// │
|
||||||
|
else -> "Unknown"
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,51 @@
|
|||||||
|
class A {
|
||||||
|
fun foo() {}
|
||||||
|
// Int Int
|
||||||
|
// │ │
|
||||||
|
val bar = 0
|
||||||
|
}
|
||||||
|
|
||||||
|
fun A.qux() {}
|
||||||
|
|
||||||
|
fun baz() {}
|
||||||
|
|
||||||
|
// reflect/KFunction0<Unit>
|
||||||
|
// │ constructor A()
|
||||||
|
// │ │ fun (A).foo(): Unit
|
||||||
|
// │ │ │
|
||||||
|
val test1 = A()::foo
|
||||||
|
|
||||||
|
// reflect/KProperty0<Int>
|
||||||
|
// │ constructor A()
|
||||||
|
// │ │ val (A).bar: Int
|
||||||
|
// │ │ │
|
||||||
|
val test2 = A()::bar
|
||||||
|
|
||||||
|
// reflect/KFunction0<Unit>
|
||||||
|
// │ constructor A()
|
||||||
|
// │ │ fun A.qux(): Unit
|
||||||
|
// │ │ │
|
||||||
|
val test3 = A()::qux
|
||||||
|
|
||||||
|
// reflect/KFunction1<A, Unit>
|
||||||
|
// │ class A
|
||||||
|
// │ │ fun (A).foo(): Unit
|
||||||
|
// │ │ │
|
||||||
|
val test4 = A::foo
|
||||||
|
|
||||||
|
// reflect/KProperty1<A, Int>
|
||||||
|
// │ class A
|
||||||
|
// │ │ val (A).bar: Int
|
||||||
|
// │ │ │
|
||||||
|
val test5 = A::bar
|
||||||
|
|
||||||
|
// reflect/KFunction1<A, Unit>
|
||||||
|
// │ class A
|
||||||
|
// │ │ fun A.qux(): Unit
|
||||||
|
// │ │ │
|
||||||
|
val test6 = A::qux
|
||||||
|
|
||||||
|
// reflect/KFunction0<Unit>
|
||||||
|
// │ fun baz(): Unit
|
||||||
|
// │ │
|
||||||
|
val test7 = ::baz
|
||||||
@@ -0,0 +1,67 @@
|
|||||||
|
// distance.x: Int
|
||||||
|
// │ fun (Int).plus(Int): Int
|
||||||
|
// │ │ distance.y: Int
|
||||||
|
// │ │ │
|
||||||
|
infix fun distance(x: Int, y: Int) = x + y
|
||||||
|
|
||||||
|
// Int
|
||||||
|
// │ [ERROR: not resolved]
|
||||||
|
// │ │ Int
|
||||||
|
// │ │ │
|
||||||
|
fun test(): Int = 3 distance 4
|
||||||
|
|
||||||
|
// fun distance(Int, Int): Int
|
||||||
|
// │ Int
|
||||||
|
// │ │ Int
|
||||||
|
// │ │ │
|
||||||
|
fun testRegular(): Int = distance(3, 4)
|
||||||
|
|
||||||
|
class My(var x: Int) {
|
||||||
|
// var (My).x: Int
|
||||||
|
// │
|
||||||
|
operator fun invoke() = x
|
||||||
|
|
||||||
|
fun foo() {}
|
||||||
|
|
||||||
|
// constructor My(Int)
|
||||||
|
// │ var (My).x: Int
|
||||||
|
// │ │
|
||||||
|
fun copy() = My(x)
|
||||||
|
}
|
||||||
|
|
||||||
|
// constructor My(Int)
|
||||||
|
// fun (My).invoke(): Int
|
||||||
|
// │ Int
|
||||||
|
// │ │
|
||||||
|
fun testInvoke(): Int = My(13)()
|
||||||
|
|
||||||
|
fun testQualified(first: My, second: My?) {
|
||||||
|
// fun io/println(Int): Unit
|
||||||
|
// │ testQualified.first: My
|
||||||
|
// │ │ var (My).x: Int
|
||||||
|
// │ │ │
|
||||||
|
println(first.x)
|
||||||
|
// fun io/println(Any?): Unit
|
||||||
|
// │ testQualified.second: My?
|
||||||
|
// │ │ var (My).x: Int
|
||||||
|
// │ │ │
|
||||||
|
println(second?.x)
|
||||||
|
// testQualified.first: My
|
||||||
|
// │ fun (My).foo(): Unit
|
||||||
|
// │ │
|
||||||
|
first.foo()
|
||||||
|
// testQualified.second: My?
|
||||||
|
// │ fun (My).foo(): Unit
|
||||||
|
// │ │
|
||||||
|
second?.foo()
|
||||||
|
// testQualified.first: My
|
||||||
|
// │ fun (My).copy(): My
|
||||||
|
// │ │ fun (My).foo(): Unit
|
||||||
|
// │ │ │
|
||||||
|
first.copy().foo()
|
||||||
|
// testQualified.first: My
|
||||||
|
// │ var (My).x: Int
|
||||||
|
// │ │ Int
|
||||||
|
// │ │ │
|
||||||
|
first.x = 42
|
||||||
|
}
|
||||||
@@ -0,0 +1,27 @@
|
|||||||
|
//WITH_RUNTIME
|
||||||
|
package test
|
||||||
|
|
||||||
|
class A
|
||||||
|
|
||||||
|
fun test() {
|
||||||
|
// class A
|
||||||
|
// │
|
||||||
|
A::class
|
||||||
|
// package test
|
||||||
|
// │
|
||||||
|
test.A::class
|
||||||
|
// constructor A()
|
||||||
|
// │
|
||||||
|
A()::class
|
||||||
|
|
||||||
|
// class A val <T> reflect/KClass<A>.java: java/lang/Class<A>
|
||||||
|
// │ │
|
||||||
|
A::class.java
|
||||||
|
// package test val <T> reflect/KClass<A>.java: java/lang/Class<A>
|
||||||
|
// │ │
|
||||||
|
test.A::class.java
|
||||||
|
// constructor A()
|
||||||
|
// │ val <T> reflect/KClass<out A>.java: java/lang/Class<out A>
|
||||||
|
// │ │
|
||||||
|
A()::class.java
|
||||||
|
}
|
||||||
@@ -0,0 +1,34 @@
|
|||||||
|
annotation class Ann1(val arr: IntArray)
|
||||||
|
|
||||||
|
annotation class Ann2(val arr: DoubleArray)
|
||||||
|
|
||||||
|
annotation class Ann3(val arr: Array<String>)
|
||||||
|
|
||||||
|
//constructor Ann1(IntArray)
|
||||||
|
//│
|
||||||
|
@Ann1([])
|
||||||
|
//constructor Ann2(DoubleArray)
|
||||||
|
//│
|
||||||
|
@Ann2([])
|
||||||
|
//constructor Ann3(Array<String>)
|
||||||
|
//│
|
||||||
|
@Ann3([])
|
||||||
|
class Zero
|
||||||
|
|
||||||
|
//constructor Ann1(IntArray)
|
||||||
|
//│ Int
|
||||||
|
//│ │ Int
|
||||||
|
//│ │ │
|
||||||
|
@Ann1([1, 2])
|
||||||
|
class First
|
||||||
|
|
||||||
|
//constructor Ann2(DoubleArray)
|
||||||
|
//│ Double
|
||||||
|
//│ │
|
||||||
|
@Ann2([3.14])
|
||||||
|
class Second
|
||||||
|
|
||||||
|
//constructor Ann3(Array<String>)
|
||||||
|
//│
|
||||||
|
@Ann3(["Alpha", "Omega"])
|
||||||
|
class Third
|
||||||
@@ -0,0 +1,22 @@
|
|||||||
|
data class Some(val first: Int, val second: Double, val third: String)
|
||||||
|
|
||||||
|
fun foo(some: Some) {
|
||||||
|
// Int
|
||||||
|
// │ Double
|
||||||
|
// │ │ String foo.some: Some
|
||||||
|
// │ │ │ │
|
||||||
|
var (x, y, z: String) = some
|
||||||
|
|
||||||
|
// var foo.x: Int
|
||||||
|
// │fun (Int).inc(): Int
|
||||||
|
// ││
|
||||||
|
x++
|
||||||
|
// var foo.y: Double
|
||||||
|
// │ fun (Double).times(Double): Double
|
||||||
|
// │ │ Double
|
||||||
|
// │ │ │
|
||||||
|
y *= 2.0
|
||||||
|
// var foo.z: String
|
||||||
|
// │
|
||||||
|
z = ""
|
||||||
|
}
|
||||||
@@ -0,0 +1,51 @@
|
|||||||
|
fun foo() {
|
||||||
|
// Int
|
||||||
|
// │fun (Int).rangeTo(Int): ranges/IntRange
|
||||||
|
// ││ Int
|
||||||
|
// ││ │
|
||||||
|
for (i in 1..10) {
|
||||||
|
// fun io/println(Int): Unit
|
||||||
|
// │ val foo.i: Int
|
||||||
|
// │ │
|
||||||
|
println(i)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// collections/List<String>
|
||||||
|
// │
|
||||||
|
fun bar(list: List<String>) {
|
||||||
|
// bar.list: collections/List<String>
|
||||||
|
// │ fun (collections/List<String>).subList(Int, Int): collections/List<String>
|
||||||
|
// │ │ Int
|
||||||
|
// │ │ │ Int
|
||||||
|
// │ │ │ │
|
||||||
|
for (element in list.subList(0, 10)) {
|
||||||
|
// fun io/println(Any?): Unit
|
||||||
|
// │ val bar.element: String
|
||||||
|
// │ │
|
||||||
|
println(element)
|
||||||
|
}
|
||||||
|
// bar.list: collections/List<String>
|
||||||
|
// │ fun (collections/List<String>).subList(Int, Int): collections/List<String>
|
||||||
|
// │ │ fun io/println(Any?): Unit
|
||||||
|
// │ │ Int Int │ val bar.element: String
|
||||||
|
// │ │ │ │ │ │
|
||||||
|
for (element in list.subList(10, 20)) println(element)
|
||||||
|
}
|
||||||
|
|
||||||
|
data class Some(val x: Int, val y: Int)
|
||||||
|
|
||||||
|
// collections/Set<Some>
|
||||||
|
// │
|
||||||
|
fun baz(set: Set<Some>) {
|
||||||
|
// Int
|
||||||
|
// │ Int baz.set: collections/Set<Some>
|
||||||
|
// │ │ │
|
||||||
|
for ((x, y) in set) {
|
||||||
|
// fun io/println(Any?): Unit
|
||||||
|
// │ val baz.x: Int
|
||||||
|
// │ │ val baz.y: Int
|
||||||
|
// │ │ │
|
||||||
|
println("x = $x y = $y")
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,18 @@
|
|||||||
|
// Nothing?
|
||||||
|
// │
|
||||||
|
fun <T> nullableValue(): T? = null
|
||||||
|
|
||||||
|
fun test() {
|
||||||
|
// Int?
|
||||||
|
// │ fun <T> nullableValue(): Int?
|
||||||
|
// │ │
|
||||||
|
val n = nullableValue<Int>()
|
||||||
|
// Double?
|
||||||
|
// │ fun <T> nullableValue(): Double?
|
||||||
|
// │ │
|
||||||
|
val x = nullableValue<Double>()
|
||||||
|
// String?
|
||||||
|
// │ fun <T> nullableValue(): String?
|
||||||
|
// │ │
|
||||||
|
val s = nullableValue<String>()
|
||||||
|
}
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
// collections/Collection<Int>
|
||||||
|
// │
|
||||||
|
fun foo(x: Int, y: Int, c: Collection<Int>) =
|
||||||
|
// foo.x: Int
|
||||||
|
// │ fun (collections/Collection<Int>).contains(Int): Boolean
|
||||||
|
// │ │ foo.c: collections/Collection<Int>
|
||||||
|
// │ │ │ foo.y: Int
|
||||||
|
// │ │ │ │ fun (collections/Collection<Int>).contains(Int): Boolean
|
||||||
|
// │ │ │ │ │ foo.c: collections/Collection<Int>
|
||||||
|
// │ │ │ │ │ │
|
||||||
|
x in c && y !in c
|
||||||
@@ -0,0 +1,12 @@
|
|||||||
|
class WithInit(x: Int) {
|
||||||
|
// Int
|
||||||
|
// │
|
||||||
|
val x: Int
|
||||||
|
|
||||||
|
init {
|
||||||
|
// val (WithInit).x: Int
|
||||||
|
// │ WithInit.<init>.x: Int
|
||||||
|
// │ │
|
||||||
|
this.x = x
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,94 @@
|
|||||||
|
data class Tuple(val x: Int, val y: Int)
|
||||||
|
|
||||||
|
// fun ((Tuple) -> Int).invoke(Tuple): Int
|
||||||
|
// │ constructor Tuple(Int, Int)
|
||||||
|
// │ │ Int
|
||||||
|
// │ │ │ Int
|
||||||
|
// │ │ │ │
|
||||||
|
inline fun use(f: (Tuple) -> Int) = f(Tuple(1, 2))
|
||||||
|
|
||||||
|
fun foo(): Int {
|
||||||
|
// (Tuple) -> Int
|
||||||
|
// │
|
||||||
|
val l1 = { t: Tuple ->
|
||||||
|
// foo.<anonymous>.t: Tuple
|
||||||
|
// Int │ val (Tuple).x: Int
|
||||||
|
// │ │ │
|
||||||
|
val x = t.x
|
||||||
|
// foo.<anonymous>.t: Tuple
|
||||||
|
// Int │ val (Tuple).y: Int
|
||||||
|
// │ │ │
|
||||||
|
val y = t.y
|
||||||
|
// val foo.<anonymous>.x: Int
|
||||||
|
// │ fun (Int).plus(Int): Int
|
||||||
|
// │ │ val foo.<anonymous>.y: Int
|
||||||
|
// │ │ │
|
||||||
|
x + y
|
||||||
|
}
|
||||||
|
// fun use((Tuple) -> Int): Int
|
||||||
|
// │ val foo.<anonymous>.x: Int
|
||||||
|
// │ Int │ fun (Int).plus(Int): Int
|
||||||
|
// │ │ Int │ │ val foo.<anonymous>.y: Int
|
||||||
|
// │ │ │ │ │ │
|
||||||
|
use { (x, y) -> x + y }
|
||||||
|
|
||||||
|
// fun use((Tuple) -> Int): Int
|
||||||
|
// │
|
||||||
|
return use {
|
||||||
|
// Unit
|
||||||
|
// │ foo.<anonymous>.it: Tuple
|
||||||
|
// │ │ val (Tuple).x: Int
|
||||||
|
// │ │ │ fun (Any).equals(Any?): Boolean
|
||||||
|
// │ │ │ │ Int Int
|
||||||
|
// │ │ │ │ │ │
|
||||||
|
if (it.x == 0) return@foo 0
|
||||||
|
// foo.<anonymous>.it: Tuple
|
||||||
|
// │ val (Tuple).y: Int
|
||||||
|
// │ │
|
||||||
|
return@use it.y
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fun bar(): Int {
|
||||||
|
// fun use((Tuple) -> Int): Int
|
||||||
|
// │
|
||||||
|
return use lambda@{
|
||||||
|
// Unit
|
||||||
|
// │ bar.<anonymous>.it: Tuple
|
||||||
|
// │ │ val (Tuple).x: Int
|
||||||
|
// │ │ │ fun (Any).equals(Any?): Boolean
|
||||||
|
// │ │ │ │ Int Int
|
||||||
|
// │ │ │ │ │ │
|
||||||
|
if (it.x == 0) return@bar 0
|
||||||
|
// bar.<anonymous>.it: Tuple
|
||||||
|
// │ val (Tuple).y: Int
|
||||||
|
// │ │
|
||||||
|
return@lambda it.y
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// collections/List<Int>
|
||||||
|
// │
|
||||||
|
fun test(list: List<Int>) {
|
||||||
|
// collections/MutableMap<Int, String>
|
||||||
|
// │ fun <K, V> collections/mutableMapOf(): collections/MutableMap<Int, String>
|
||||||
|
// │ │
|
||||||
|
val map = mutableMapOf<Int, String>()
|
||||||
|
// test.list: collections/List<Int>
|
||||||
|
// │ fun <T> collections/Iterable<Int>.forEach((Int) -> Unit): Unit
|
||||||
|
// │ │ val test.map: collections/MutableMap<Int, String>
|
||||||
|
// │ │ │ fun <K, V> collections/MutableMap<Int, String>.getOrPut(Int, () -> String): String
|
||||||
|
// │ │ │ │ test.<anonymous>.it: Int
|
||||||
|
// │ │ │ │ │ fun <T> collections/mutableListOf(): collections/MutableList<???>
|
||||||
|
// │ │ │ │ │ │ fun (String).plus(Any?): String
|
||||||
|
// │ │ │ │ │ │ │
|
||||||
|
list.forEach { map.getOrPut(it, { mutableListOf() }) += "" }
|
||||||
|
}
|
||||||
|
|
||||||
|
// () -> Unit
|
||||||
|
// │
|
||||||
|
val simple = { }
|
||||||
|
|
||||||
|
// () -> Int Int
|
||||||
|
// │ │
|
||||||
|
val another = { 42 }
|
||||||
@@ -0,0 +1,46 @@
|
|||||||
|
fun withLocals(p: Int): Int {
|
||||||
|
class Local(val pp: Int) {
|
||||||
|
// val (withLocals/Local).pp: Int
|
||||||
|
// │ fun (Int).minus(Int): Int
|
||||||
|
// │ │ withLocals.p: Int
|
||||||
|
// │ │ │
|
||||||
|
fun diff() = pp - p
|
||||||
|
}
|
||||||
|
|
||||||
|
// constructor withLocals.Local(Int)
|
||||||
|
// Int │ Int fun (withLocals/Local).diff(): Int
|
||||||
|
// │ │ │ │
|
||||||
|
val x = Local(42).diff()
|
||||||
|
|
||||||
|
fun sum(y: Int, z: Int, f: (Int, Int) -> Int): Int {
|
||||||
|
// val withLocals.x: Int
|
||||||
|
// │ fun (Int).plus(Int): Int
|
||||||
|
// │ │ fun ((Int, Int) -> Int).invoke(Int, Int): Int
|
||||||
|
// │ │ │ withLocals.sum.y: Int
|
||||||
|
// │ │ │ │ fun (Int).plus(Int): Int
|
||||||
|
// │ │ │ │ │ withLocals.sum.z: Int
|
||||||
|
// │ │ │ │ │ │
|
||||||
|
return x + f(y + z)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Int constructor Any()
|
||||||
|
// │ │
|
||||||
|
val code = (object : Any() {
|
||||||
|
// fun (Any).hashCode(): Int
|
||||||
|
// │
|
||||||
|
fun foo() = hashCode()
|
||||||
|
// fun (withLocals/<no name provided>).foo(): Int
|
||||||
|
// │
|
||||||
|
}).foo()
|
||||||
|
|
||||||
|
// fun withLocals.sum(Int, Int, (Int, Int) -> Int): Int
|
||||||
|
// │ val withLocals.code: Int
|
||||||
|
// │ │ constructor withLocals.Local(Int)
|
||||||
|
// │ │ │ Int
|
||||||
|
// │ │ │ │ fun (withLocals/Local).diff(): Int
|
||||||
|
// │ │ │ │ │ withLocals.<no name provided>.x: Int
|
||||||
|
// │ │ │ │ │ │ fun (Int).plus(Int): Int
|
||||||
|
// │ │ │ │ │ │ │ withLocals.<no name provided>.y: Int
|
||||||
|
// │ │ │ │ │ │ │ │
|
||||||
|
return sum(code, Local(1).diff(), fun(x: Int, y: Int) = x + y)
|
||||||
|
}
|
||||||
@@ -0,0 +1,44 @@
|
|||||||
|
fun simple() {
|
||||||
|
// Int Int
|
||||||
|
// │ │
|
||||||
|
var x = 10
|
||||||
|
// var simple.x: Int
|
||||||
|
// │ fun (Int).plus(Int): Int
|
||||||
|
// │ │ Int
|
||||||
|
// │ │ │
|
||||||
|
x += 20
|
||||||
|
// var simple.x: Int
|
||||||
|
// │ fun (Int).minus(Int): Int
|
||||||
|
// │ │ Int
|
||||||
|
// │ │ │
|
||||||
|
x -= 5
|
||||||
|
// var simple.x: Int
|
||||||
|
// │ fun (Int).div(Int): Int
|
||||||
|
// │ │ Int
|
||||||
|
// │ │ │
|
||||||
|
x /= 5
|
||||||
|
// var simple.x: Int
|
||||||
|
// │ fun (Int).times(Int): Int
|
||||||
|
// │ │ Int
|
||||||
|
// │ │ │
|
||||||
|
x *= 10
|
||||||
|
}
|
||||||
|
|
||||||
|
// collections/List<String>
|
||||||
|
// │
|
||||||
|
fun List<String>.modify() {
|
||||||
|
// fun <T> collections/Collection<String>.plus(String): collections/List<String>
|
||||||
|
// │
|
||||||
|
this += "Alpha"
|
||||||
|
// fun <T> collections/Collection<String>.plus(String): collections/List<String>
|
||||||
|
// │
|
||||||
|
this += "Omega"
|
||||||
|
}
|
||||||
|
|
||||||
|
fun Any.modify() {
|
||||||
|
// collections/List<Int>
|
||||||
|
// │ fun <T> collections/Collection<Int>.plus(Int): collections/List<Int>
|
||||||
|
// │ │ Int
|
||||||
|
// │ │ │
|
||||||
|
(this as List<Int>) += 42
|
||||||
|
}
|
||||||
@@ -0,0 +1,26 @@
|
|||||||
|
// Boolean Double
|
||||||
|
// │ │
|
||||||
|
fun foo(first: String = "", second: Boolean = true, third: Double = 3.1415) {}
|
||||||
|
|
||||||
|
fun test() {
|
||||||
|
// fun foo(String = ..., Boolean = ..., Double = ...): Unit
|
||||||
|
// │
|
||||||
|
foo()
|
||||||
|
// fun foo(String = ..., Boolean = ..., Double = ...): Unit
|
||||||
|
// │ Boolean
|
||||||
|
// │ │ Double
|
||||||
|
// │ │ │
|
||||||
|
foo("Alpha", false, 2.71)
|
||||||
|
// fun foo(String = ..., Boolean = ..., Double = ...): Unit
|
||||||
|
// │ Boolean
|
||||||
|
// │ │
|
||||||
|
foo(first = "Hello", second = true)
|
||||||
|
// fun foo(String = ..., Boolean = ..., Double = ...): Unit
|
||||||
|
// │ fun (Double).unaryMinus(): Double
|
||||||
|
// │ │Double
|
||||||
|
// │ ││
|
||||||
|
foo(third = -1.0, first = "123")
|
||||||
|
// fun foo(String = ..., Boolean = ..., Double = ...): Unit
|
||||||
|
// │
|
||||||
|
foo(= "")
|
||||||
|
}
|
||||||
@@ -0,0 +1,10 @@
|
|||||||
|
// orFourtyTwo.arg: Int?
|
||||||
|
// │ fun ?: (Int?, Int): Int
|
||||||
|
// │ │ Int
|
||||||
|
// │ │ │
|
||||||
|
fun orFourtyTwo(arg: Int?) = arg ?: 42
|
||||||
|
|
||||||
|
// bang.arg: Int?
|
||||||
|
// │ fun !! (Int?): Int
|
||||||
|
// │ │
|
||||||
|
fun bang(arg: Int?) = arg!!
|
||||||
@@ -0,0 +1,7 @@
|
|||||||
|
fun foo() {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
fun bar(): String {
|
||||||
|
return "Hello"
|
||||||
|
}
|
||||||
@@ -0,0 +1,25 @@
|
|||||||
|
interface A {
|
||||||
|
fun foo() {}
|
||||||
|
}
|
||||||
|
|
||||||
|
interface B {
|
||||||
|
fun foo() {}
|
||||||
|
fun bar() {}
|
||||||
|
}
|
||||||
|
|
||||||
|
class C : A, B {
|
||||||
|
override fun bar() {
|
||||||
|
// fun (B).bar(): Unit
|
||||||
|
// │
|
||||||
|
super.bar()
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun foo() {
|
||||||
|
// fun (A).foo(): Unit
|
||||||
|
// │
|
||||||
|
super<A>.foo()
|
||||||
|
// fun (B).foo(): Unit
|
||||||
|
// │
|
||||||
|
super<B>.foo()
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,42 @@
|
|||||||
|
class Some {
|
||||||
|
// Int
|
||||||
|
// │
|
||||||
|
fun foo(): Int = 1
|
||||||
|
|
||||||
|
fun bar(): Int {
|
||||||
|
// fun (Some).foo(): Int
|
||||||
|
// │
|
||||||
|
return this.foo()
|
||||||
|
}
|
||||||
|
|
||||||
|
// Some
|
||||||
|
// │
|
||||||
|
val instance: Some
|
||||||
|
get() = this@Some
|
||||||
|
|
||||||
|
fun String.extension(): Int {
|
||||||
|
// fun (Some).bar(): Int
|
||||||
|
// │ fun (Int).plus(Int): Int
|
||||||
|
// │ │ val (String).length: Int
|
||||||
|
// │ │ │
|
||||||
|
return this@Some.bar() + this.length
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// fun (Some).bar(): Int
|
||||||
|
// │
|
||||||
|
fun Some.extension() = this.bar()
|
||||||
|
|
||||||
|
fun test(some: Some): Int {
|
||||||
|
// fun <T, R> with(Some, Some.() -> Int): Int
|
||||||
|
// │ test.some: Some
|
||||||
|
// │ │ with@0
|
||||||
|
// │ │ │
|
||||||
|
return with(some) {
|
||||||
|
// fun (Some).foo(): Int
|
||||||
|
// │ fun (Int).plus(Int): Int
|
||||||
|
// │ │ fun Some.extension(): Int
|
||||||
|
// │ │ │
|
||||||
|
this.foo() + this@with.extension()
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,23 @@
|
|||||||
|
fun some() {
|
||||||
|
try {
|
||||||
|
// constructor KotlinNullPointerException()
|
||||||
|
// │
|
||||||
|
throw KotlinNullPointerException()
|
||||||
|
// RuntimeException /* = java/lang/RuntimeException */
|
||||||
|
// │
|
||||||
|
} catch (e: RuntimeException) {
|
||||||
|
// fun io/println(Any?): Unit
|
||||||
|
// │
|
||||||
|
println("Runtime exception")
|
||||||
|
// Exception /* = java/lang/Exception */
|
||||||
|
// │
|
||||||
|
} catch (e: Exception) {
|
||||||
|
// fun io/println(Any?): Unit
|
||||||
|
// │
|
||||||
|
println("Some exception")
|
||||||
|
} finally {
|
||||||
|
// fun io/println(Any?): Unit
|
||||||
|
// │
|
||||||
|
println("finally")
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,14 @@
|
|||||||
|
interface IThing
|
||||||
|
|
||||||
|
// test1.x: Any
|
||||||
|
// │
|
||||||
|
fun test1(x: Any) = x is IThing
|
||||||
|
// test2.x: Any
|
||||||
|
// │
|
||||||
|
fun test2(x: Any) = x !is IThing
|
||||||
|
// test3.x: Any
|
||||||
|
// │
|
||||||
|
fun test3(x: Any) = x as IThing
|
||||||
|
// test4.x: Any
|
||||||
|
// │
|
||||||
|
fun test4(x: Any) = x as? IThing
|
||||||
@@ -0,0 +1,77 @@
|
|||||||
|
fun test() {
|
||||||
|
// Int Int
|
||||||
|
// │ │
|
||||||
|
var x = 0
|
||||||
|
// var test.x: Int
|
||||||
|
// Int │fun (Int).inc(): Int
|
||||||
|
// │ ││
|
||||||
|
val x1 = x++
|
||||||
|
// fun (Int).inc(): Int
|
||||||
|
// Int │ var test.x: Int
|
||||||
|
// │ │ │
|
||||||
|
val x2 = ++x
|
||||||
|
// fun (Int).dec(): Int
|
||||||
|
// Int │ var test.x: Int
|
||||||
|
// │ │ │
|
||||||
|
val x3 = --x
|
||||||
|
// var test.x: Int
|
||||||
|
// Int │fun (Int).dec(): Int
|
||||||
|
// │ ││
|
||||||
|
val x4 = x--
|
||||||
|
// Unit
|
||||||
|
// │ fun (Boolean).not(): Boolean
|
||||||
|
// │ │ var test.x: Int
|
||||||
|
// │ │ │ fun (Any).equals(Any?): Boolean
|
||||||
|
// │ │ │ │ Int
|
||||||
|
// │ │ │ │ │
|
||||||
|
if (!(x == 0)) {
|
||||||
|
// fun io/println(Any?): Unit
|
||||||
|
// │
|
||||||
|
println("000")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class X(val i: Int)
|
||||||
|
|
||||||
|
fun test2(x: X) {
|
||||||
|
// test2.x: X
|
||||||
|
// │ val (X).i: Int
|
||||||
|
// Int │ │fun (Int).inc(): Int
|
||||||
|
// │ │ ││
|
||||||
|
val x1 = x.i++
|
||||||
|
// fun (Int).inc(): Int
|
||||||
|
// │ test2.x: X
|
||||||
|
// Int │ │ val (X).i: Int
|
||||||
|
// │ │ │ │
|
||||||
|
val x2 = ++x.i
|
||||||
|
}
|
||||||
|
|
||||||
|
fun test3(arr: Array<Int>) {
|
||||||
|
// test3.arr: Array<Int>
|
||||||
|
// │ Int
|
||||||
|
// Int │ │ fun (Int).inc(): Int
|
||||||
|
// │ │ │ │
|
||||||
|
val x1 = arr[0]++
|
||||||
|
// fun (Int).inc(): Int
|
||||||
|
// │ test3.arr: Array<Int>
|
||||||
|
// Int │ │ Int
|
||||||
|
// │ │ │ │
|
||||||
|
val x2 = ++arr[1]
|
||||||
|
}
|
||||||
|
|
||||||
|
class Y(val arr: Array<Int>)
|
||||||
|
|
||||||
|
fun test4(y: Y) {
|
||||||
|
// test4.y: Y
|
||||||
|
// │ val (Y).arr: Array<Int>
|
||||||
|
// │ │ Int
|
||||||
|
// Int │ │ │ fun (Int).inc(): Int
|
||||||
|
// │ │ │ │ │
|
||||||
|
val x1 = y.arr[0]++
|
||||||
|
// fun (Int).inc(): Int
|
||||||
|
// │ test4.y: Y
|
||||||
|
// │ │ val (Y).arr: Array<Int>
|
||||||
|
// Int │ │ │ Int
|
||||||
|
// │ │ │ │ │
|
||||||
|
val x2 = ++y.arr[1]
|
||||||
|
}
|
||||||
@@ -0,0 +1,29 @@
|
|||||||
|
fun foo() {
|
||||||
|
// Int Int
|
||||||
|
// │ │
|
||||||
|
val x = 1
|
||||||
|
// val foo.x: Int
|
||||||
|
// │ fun (Int).plus(Int): Int
|
||||||
|
// Int │ │ Int
|
||||||
|
// │ │ │ │
|
||||||
|
var y = x + 1
|
||||||
|
// var foo.y: Int
|
||||||
|
// │ fun (Int).times(Int): Int
|
||||||
|
// Int │ │ Int
|
||||||
|
// │ │ │ │
|
||||||
|
val z = y * 2
|
||||||
|
// var foo.y: Int
|
||||||
|
// │ var foo.y: Int
|
||||||
|
// │ │ fun (Int).plus(Int): Int
|
||||||
|
// │ │ │ val foo.z: Int
|
||||||
|
// │ │ │ │
|
||||||
|
y = y + z
|
||||||
|
// var foo.y: Int
|
||||||
|
// │ fun (Int).minus(Int): Int
|
||||||
|
// Int │ │ val foo.x: Int
|
||||||
|
// │ │ │ │
|
||||||
|
val w = y - x
|
||||||
|
// val foo.w: Int
|
||||||
|
// │
|
||||||
|
return w
|
||||||
|
}
|
||||||
@@ -0,0 +1,61 @@
|
|||||||
|
fun foo(limit: Int) {
|
||||||
|
// Int Int
|
||||||
|
// │ │
|
||||||
|
var k = 0
|
||||||
|
// var foo.k: Int
|
||||||
|
// │ fun (Int).compareTo(Int): Int
|
||||||
|
// │ │ foo.limit: Int
|
||||||
|
// │ │ │
|
||||||
|
some@ while (k < limit) {
|
||||||
|
// var foo.k: Int
|
||||||
|
// │fun (Int).inc(): Int
|
||||||
|
// ││
|
||||||
|
k++
|
||||||
|
// fun io/println(Int): Unit
|
||||||
|
// │ var foo.k: Int
|
||||||
|
// │ │
|
||||||
|
println(k)
|
||||||
|
// var foo.k: Int
|
||||||
|
// │ fun (Any).equals(Any?): Boolean
|
||||||
|
// │ │ Int
|
||||||
|
// │ │ │
|
||||||
|
while (k == 13) {
|
||||||
|
// var foo.k: Int
|
||||||
|
// │fun (Int).inc(): Int
|
||||||
|
// ││
|
||||||
|
k++
|
||||||
|
// Unit
|
||||||
|
// │ var foo.k: Int
|
||||||
|
// │ │ fun (Int).compareTo(Int): Int
|
||||||
|
// │ │ │ foo.limit: Int
|
||||||
|
// │ │ │ │
|
||||||
|
if (k < limit) break@some
|
||||||
|
// Unit
|
||||||
|
// │ var foo.k: Int
|
||||||
|
// │ │ fun (Int).compareTo(Int): Int
|
||||||
|
// │ │ │ foo.limit: Int
|
||||||
|
// │ │ │ │
|
||||||
|
if (k > limit) continue
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fun bar(limit: Int) {
|
||||||
|
// Int bar.limit: Int
|
||||||
|
// │ │
|
||||||
|
var k = limit
|
||||||
|
do {
|
||||||
|
// var bar.k: Int
|
||||||
|
// │fun (Int).dec(): Int
|
||||||
|
// ││
|
||||||
|
k--
|
||||||
|
// fun io/println(Int): Unit
|
||||||
|
// │ var bar.k: Int
|
||||||
|
// │ │
|
||||||
|
println(k)
|
||||||
|
// var bar.k: Int
|
||||||
|
// │ fun (Int).compareTo(Int): Int
|
||||||
|
// │ │ Int
|
||||||
|
// │ │ │
|
||||||
|
} while (k >= 0)
|
||||||
|
}
|
||||||
@@ -0,0 +1,51 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2010-2019 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||||
|
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.jetbrains.kotlin.visualizer
|
||||||
|
|
||||||
|
import org.jetbrains.kotlin.checkers.KotlinMultiFileTestWithJava
|
||||||
|
import org.jetbrains.kotlin.compiler.visualizer.PsiRenderer
|
||||||
|
import org.jetbrains.kotlin.resolve.lazy.JvmResolveUtil
|
||||||
|
import org.jetbrains.kotlin.test.ConfigurationKind
|
||||||
|
import org.jetbrains.kotlin.test.KotlinTestUtils
|
||||||
|
import org.jetbrains.kotlin.test.TestJdkKind
|
||||||
|
import java.io.File
|
||||||
|
|
||||||
|
abstract class AbstractPsiVisualizer: KotlinMultiFileTestWithJava<Void?, Void?>() {
|
||||||
|
lateinit var replacement: Pair<String, String>
|
||||||
|
|
||||||
|
override fun createTestModule(name: String): Void? = null
|
||||||
|
|
||||||
|
override fun createTestFile(module: Void?, fileName: String?, text: String?, directives: MutableMap<String, String>?): Void? = null
|
||||||
|
|
||||||
|
override fun doMultiFileTest(file: File, modules: MutableMap<String, ModuleAndDependencies>?, files: MutableList<Void?>) {
|
||||||
|
val environment = createEnvironment(file)
|
||||||
|
val ktFiles = environment.getSourceFiles()
|
||||||
|
val analysisResult = JvmResolveUtil.analyze(ktFiles, environment)
|
||||||
|
|
||||||
|
val renderer = PsiRenderer(ktFiles.first(), analysisResult)
|
||||||
|
val psiRenderResult = renderer.render()
|
||||||
|
|
||||||
|
val expectedPath = file.absolutePath.replace(replacement.first, replacement.second)
|
||||||
|
KotlinTestUtils.assertEqualsToFile(File(expectedPath), psiRenderResult)
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun isKotlinSourceRootNeeded(): Boolean {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun getTestJdkKind(file: File): TestJdkKind {
|
||||||
|
return TestJdkKind.FULL_JDK
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun getConfigurationKind(): ConfigurationKind {
|
||||||
|
return ConfigurationKind.ALL
|
||||||
|
}
|
||||||
|
|
||||||
|
fun doFirBuilderDataTest(filePath: String) {
|
||||||
|
replacement = "fir\\psi2fir" to "visualizer"
|
||||||
|
doTest(filePath)
|
||||||
|
}
|
||||||
|
}
|
||||||
Generated
+287
@@ -0,0 +1,287 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2010-2019 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||||
|
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.jetbrains.kotlin.visualizer;
|
||||||
|
|
||||||
|
import com.intellij.testFramework.TestDataPath;
|
||||||
|
import org.jetbrains.kotlin.test.JUnit3RunnerWithInners;
|
||||||
|
import org.jetbrains.kotlin.test.KotlinTestUtils;
|
||||||
|
import org.jetbrains.kotlin.test.TargetBackend;
|
||||||
|
import org.jetbrains.kotlin.test.TestMetadata;
|
||||||
|
import org.junit.runner.RunWith;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
import java.util.regex.Pattern;
|
||||||
|
|
||||||
|
/** This class is generated by {@link org.jetbrains.kotlin.generators.tests.TestsPackage}. DO NOT MODIFY MANUALLY */
|
||||||
|
@SuppressWarnings("all")
|
||||||
|
@TestMetadata("compiler/fir/psi2fir/testData/rawBuilder")
|
||||||
|
@TestDataPath("$PROJECT_ROOT")
|
||||||
|
@RunWith(JUnit3RunnerWithInners.class)
|
||||||
|
public class PsiVisualizerForRawFirDataGenerated extends AbstractPsiVisualizer {
|
||||||
|
private void runTest(String testDataFilePath) throws Exception {
|
||||||
|
KotlinTestUtils.runTest(this::doFirBuilderDataTest, TargetBackend.ANY, testDataFilePath);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void testAllFilesPresentInRawBuilder() throws Exception {
|
||||||
|
KotlinTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("compiler/fir/psi2fir/testData/rawBuilder"), Pattern.compile("^(.+)\\.kt$"), TargetBackend.ANY, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
@TestMetadata("compiler/fir/psi2fir/testData/rawBuilder/declarations")
|
||||||
|
@TestDataPath("$PROJECT_ROOT")
|
||||||
|
@RunWith(JUnit3RunnerWithInners.class)
|
||||||
|
public static class Declarations extends AbstractPsiVisualizer {
|
||||||
|
private void runTest(String testDataFilePath) throws Exception {
|
||||||
|
KotlinTestUtils.runTest(this::doFirBuilderDataTest, TargetBackend.ANY, testDataFilePath);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void testAllFilesPresentInDeclarations() throws Exception {
|
||||||
|
KotlinTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("compiler/fir/psi2fir/testData/rawBuilder/declarations"), Pattern.compile("^(.+)\\.kt$"), TargetBackend.ANY, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
@TestMetadata("complexTypes.kt")
|
||||||
|
public void testComplexTypes() throws Exception {
|
||||||
|
runTest("compiler/fir/psi2fir/testData/rawBuilder/declarations/complexTypes.kt");
|
||||||
|
}
|
||||||
|
|
||||||
|
@TestMetadata("derivedClass.kt")
|
||||||
|
public void testDerivedClass() throws Exception {
|
||||||
|
runTest("compiler/fir/psi2fir/testData/rawBuilder/declarations/derivedClass.kt");
|
||||||
|
}
|
||||||
|
|
||||||
|
@TestMetadata("enums.kt")
|
||||||
|
public void testEnums() throws Exception {
|
||||||
|
runTest("compiler/fir/psi2fir/testData/rawBuilder/declarations/enums.kt");
|
||||||
|
}
|
||||||
|
|
||||||
|
@TestMetadata("enums2.kt")
|
||||||
|
public void testEnums2() throws Exception {
|
||||||
|
runTest("compiler/fir/psi2fir/testData/rawBuilder/declarations/enums2.kt");
|
||||||
|
}
|
||||||
|
|
||||||
|
@TestMetadata("expectActual.kt")
|
||||||
|
public void testExpectActual() throws Exception {
|
||||||
|
runTest("compiler/fir/psi2fir/testData/rawBuilder/declarations/expectActual.kt");
|
||||||
|
}
|
||||||
|
|
||||||
|
@TestMetadata("F.kt")
|
||||||
|
public void testF() throws Exception {
|
||||||
|
runTest("compiler/fir/psi2fir/testData/rawBuilder/declarations/F.kt");
|
||||||
|
}
|
||||||
|
|
||||||
|
@TestMetadata("functionTypes.kt")
|
||||||
|
public void testFunctionTypes() throws Exception {
|
||||||
|
runTest("compiler/fir/psi2fir/testData/rawBuilder/declarations/functionTypes.kt");
|
||||||
|
}
|
||||||
|
|
||||||
|
@TestMetadata("genericFunctions.kt")
|
||||||
|
public void testGenericFunctions() throws Exception {
|
||||||
|
runTest("compiler/fir/psi2fir/testData/rawBuilder/declarations/genericFunctions.kt");
|
||||||
|
}
|
||||||
|
|
||||||
|
@TestMetadata("genericProperty.kt")
|
||||||
|
public void testGenericProperty() throws Exception {
|
||||||
|
runTest("compiler/fir/psi2fir/testData/rawBuilder/declarations/genericProperty.kt");
|
||||||
|
}
|
||||||
|
|
||||||
|
@TestMetadata("nestedClass.kt")
|
||||||
|
public void testNestedClass() throws Exception {
|
||||||
|
runTest("compiler/fir/psi2fir/testData/rawBuilder/declarations/nestedClass.kt");
|
||||||
|
}
|
||||||
|
|
||||||
|
@TestMetadata("NestedOfAliasedType.kt")
|
||||||
|
public void testNestedOfAliasedType() throws Exception {
|
||||||
|
runTest("compiler/fir/psi2fir/testData/rawBuilder/declarations/NestedOfAliasedType.kt");
|
||||||
|
}
|
||||||
|
|
||||||
|
@TestMetadata("NestedSuperType.kt")
|
||||||
|
public void testNestedSuperType() throws Exception {
|
||||||
|
runTest("compiler/fir/psi2fir/testData/rawBuilder/declarations/NestedSuperType.kt");
|
||||||
|
}
|
||||||
|
|
||||||
|
@TestMetadata("noPrimaryConstructor.kt")
|
||||||
|
public void testNoPrimaryConstructor() throws Exception {
|
||||||
|
runTest("compiler/fir/psi2fir/testData/rawBuilder/declarations/noPrimaryConstructor.kt");
|
||||||
|
}
|
||||||
|
|
||||||
|
@TestMetadata("simpleClass.kt")
|
||||||
|
public void testSimpleClass() throws Exception {
|
||||||
|
runTest("compiler/fir/psi2fir/testData/rawBuilder/declarations/simpleClass.kt");
|
||||||
|
}
|
||||||
|
|
||||||
|
@TestMetadata("simpleFun.kt")
|
||||||
|
public void testSimpleFun() throws Exception {
|
||||||
|
runTest("compiler/fir/psi2fir/testData/rawBuilder/declarations/simpleFun.kt");
|
||||||
|
}
|
||||||
|
|
||||||
|
@TestMetadata("simpleTypeAlias.kt")
|
||||||
|
public void testSimpleTypeAlias() throws Exception {
|
||||||
|
runTest("compiler/fir/psi2fir/testData/rawBuilder/declarations/simpleTypeAlias.kt");
|
||||||
|
}
|
||||||
|
|
||||||
|
@TestMetadata("typeAliasWithGeneric.kt")
|
||||||
|
public void testTypeAliasWithGeneric() throws Exception {
|
||||||
|
runTest("compiler/fir/psi2fir/testData/rawBuilder/declarations/typeAliasWithGeneric.kt");
|
||||||
|
}
|
||||||
|
|
||||||
|
@TestMetadata("typeParameterVsNested.kt")
|
||||||
|
public void testTypeParameterVsNested() throws Exception {
|
||||||
|
runTest("compiler/fir/psi2fir/testData/rawBuilder/declarations/typeParameterVsNested.kt");
|
||||||
|
}
|
||||||
|
|
||||||
|
@TestMetadata("typeParameters.kt")
|
||||||
|
public void testTypeParameters() throws Exception {
|
||||||
|
runTest("compiler/fir/psi2fir/testData/rawBuilder/declarations/typeParameters.kt");
|
||||||
|
}
|
||||||
|
|
||||||
|
@TestMetadata("where.kt")
|
||||||
|
public void testWhere() throws Exception {
|
||||||
|
runTest("compiler/fir/psi2fir/testData/rawBuilder/declarations/where.kt");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@TestMetadata("compiler/fir/psi2fir/testData/rawBuilder/expressions")
|
||||||
|
@TestDataPath("$PROJECT_ROOT")
|
||||||
|
@RunWith(JUnit3RunnerWithInners.class)
|
||||||
|
public static class Expressions extends AbstractPsiVisualizer {
|
||||||
|
private void runTest(String testDataFilePath) throws Exception {
|
||||||
|
KotlinTestUtils.runTest(this::doFirBuilderDataTest, TargetBackend.ANY, testDataFilePath);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void testAllFilesPresentInExpressions() throws Exception {
|
||||||
|
KotlinTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("compiler/fir/psi2fir/testData/rawBuilder/expressions"), Pattern.compile("^(.+)\\.kt$"), TargetBackend.ANY, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
@TestMetadata("annotated.kt")
|
||||||
|
public void testAnnotated() throws Exception {
|
||||||
|
runTest("compiler/fir/psi2fir/testData/rawBuilder/expressions/annotated.kt");
|
||||||
|
}
|
||||||
|
|
||||||
|
@TestMetadata("arrayAccess.kt")
|
||||||
|
public void testArrayAccess() throws Exception {
|
||||||
|
runTest("compiler/fir/psi2fir/testData/rawBuilder/expressions/arrayAccess.kt");
|
||||||
|
}
|
||||||
|
|
||||||
|
@TestMetadata("arrayAssignment.kt")
|
||||||
|
public void testArrayAssignment() throws Exception {
|
||||||
|
runTest("compiler/fir/psi2fir/testData/rawBuilder/expressions/arrayAssignment.kt");
|
||||||
|
}
|
||||||
|
|
||||||
|
@TestMetadata("branches.kt")
|
||||||
|
public void testBranches() throws Exception {
|
||||||
|
runTest("compiler/fir/psi2fir/testData/rawBuilder/expressions/branches.kt");
|
||||||
|
}
|
||||||
|
|
||||||
|
@TestMetadata("callableReferences.kt")
|
||||||
|
public void testCallableReferences() throws Exception {
|
||||||
|
runTest("compiler/fir/psi2fir/testData/rawBuilder/expressions/callableReferences.kt");
|
||||||
|
}
|
||||||
|
|
||||||
|
@TestMetadata("calls.kt")
|
||||||
|
public void testCalls() throws Exception {
|
||||||
|
runTest("compiler/fir/psi2fir/testData/rawBuilder/expressions/calls.kt");
|
||||||
|
}
|
||||||
|
|
||||||
|
@TestMetadata("classReference.kt")
|
||||||
|
public void testClassReference() throws Exception {
|
||||||
|
runTest("compiler/fir/psi2fir/testData/rawBuilder/expressions/classReference.kt");
|
||||||
|
}
|
||||||
|
|
||||||
|
@TestMetadata("collectionLiterals.kt")
|
||||||
|
public void testCollectionLiterals() throws Exception {
|
||||||
|
runTest("compiler/fir/psi2fir/testData/rawBuilder/expressions/collectionLiterals.kt");
|
||||||
|
}
|
||||||
|
|
||||||
|
@TestMetadata("destructuring.kt")
|
||||||
|
public void testDestructuring() throws Exception {
|
||||||
|
runTest("compiler/fir/psi2fir/testData/rawBuilder/expressions/destructuring.kt");
|
||||||
|
}
|
||||||
|
|
||||||
|
@TestMetadata("for.kt")
|
||||||
|
public void testFor() throws Exception {
|
||||||
|
runTest("compiler/fir/psi2fir/testData/rawBuilder/expressions/for.kt");
|
||||||
|
}
|
||||||
|
|
||||||
|
@TestMetadata("genericCalls.kt")
|
||||||
|
public void testGenericCalls() throws Exception {
|
||||||
|
runTest("compiler/fir/psi2fir/testData/rawBuilder/expressions/genericCalls.kt");
|
||||||
|
}
|
||||||
|
|
||||||
|
@TestMetadata("in.kt")
|
||||||
|
public void testIn() throws Exception {
|
||||||
|
runTest("compiler/fir/psi2fir/testData/rawBuilder/expressions/in.kt");
|
||||||
|
}
|
||||||
|
|
||||||
|
@TestMetadata("init.kt")
|
||||||
|
public void testInit() throws Exception {
|
||||||
|
runTest("compiler/fir/psi2fir/testData/rawBuilder/expressions/init.kt");
|
||||||
|
}
|
||||||
|
|
||||||
|
@TestMetadata("lambda.kt")
|
||||||
|
public void testLambda() throws Exception {
|
||||||
|
runTest("compiler/fir/psi2fir/testData/rawBuilder/expressions/lambda.kt");
|
||||||
|
}
|
||||||
|
|
||||||
|
@TestMetadata("locals.kt")
|
||||||
|
public void testLocals() throws Exception {
|
||||||
|
runTest("compiler/fir/psi2fir/testData/rawBuilder/expressions/locals.kt");
|
||||||
|
}
|
||||||
|
|
||||||
|
@TestMetadata("modifications.kt")
|
||||||
|
public void testModifications() throws Exception {
|
||||||
|
runTest("compiler/fir/psi2fir/testData/rawBuilder/expressions/modifications.kt");
|
||||||
|
}
|
||||||
|
|
||||||
|
@TestMetadata("namedArgument.kt")
|
||||||
|
public void testNamedArgument() throws Exception {
|
||||||
|
runTest("compiler/fir/psi2fir/testData/rawBuilder/expressions/namedArgument.kt");
|
||||||
|
}
|
||||||
|
|
||||||
|
@TestMetadata("nullability.kt")
|
||||||
|
public void testNullability() throws Exception {
|
||||||
|
runTest("compiler/fir/psi2fir/testData/rawBuilder/expressions/nullability.kt");
|
||||||
|
}
|
||||||
|
|
||||||
|
@TestMetadata("simpleReturns.kt")
|
||||||
|
public void testSimpleReturns() throws Exception {
|
||||||
|
runTest("compiler/fir/psi2fir/testData/rawBuilder/expressions/simpleReturns.kt");
|
||||||
|
}
|
||||||
|
|
||||||
|
@TestMetadata("super.kt")
|
||||||
|
public void testSuper() throws Exception {
|
||||||
|
runTest("compiler/fir/psi2fir/testData/rawBuilder/expressions/super.kt");
|
||||||
|
}
|
||||||
|
|
||||||
|
@TestMetadata("these.kt")
|
||||||
|
public void testThese() throws Exception {
|
||||||
|
runTest("compiler/fir/psi2fir/testData/rawBuilder/expressions/these.kt");
|
||||||
|
}
|
||||||
|
|
||||||
|
@TestMetadata("try.kt")
|
||||||
|
public void testTry() throws Exception {
|
||||||
|
runTest("compiler/fir/psi2fir/testData/rawBuilder/expressions/try.kt");
|
||||||
|
}
|
||||||
|
|
||||||
|
@TestMetadata("typeOperators.kt")
|
||||||
|
public void testTypeOperators() throws Exception {
|
||||||
|
runTest("compiler/fir/psi2fir/testData/rawBuilder/expressions/typeOperators.kt");
|
||||||
|
}
|
||||||
|
|
||||||
|
@TestMetadata("unary.kt")
|
||||||
|
public void testUnary() throws Exception {
|
||||||
|
runTest("compiler/fir/psi2fir/testData/rawBuilder/expressions/unary.kt");
|
||||||
|
}
|
||||||
|
|
||||||
|
@TestMetadata("variables.kt")
|
||||||
|
public void testVariables() throws Exception {
|
||||||
|
runTest("compiler/fir/psi2fir/testData/rawBuilder/expressions/variables.kt");
|
||||||
|
}
|
||||||
|
|
||||||
|
@TestMetadata("while.kt")
|
||||||
|
public void testWhile() throws Exception {
|
||||||
|
runTest("compiler/fir/psi2fir/testData/rawBuilder/expressions/while.kt");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user