HL API: generate reference resolve tests

The testdata is taken from corresponding IDE reference resolve tests
This commit is contained in:
Ilya Kirillov
2021-07-21 17:10:51 +02:00
committed by teamcityserver
parent 7ba8e7d1d3
commit c678d4b506
307 changed files with 2753 additions and 0 deletions
@@ -6,6 +6,7 @@
package org.jetbrains.kotlin.generators.tests.frontend.api
import org.jetbrains.kotlin.generators.util.TestGeneratorUtil
import org.jetbrains.kotlin.idea.fir.frontend.api.AbstractReferenceResolveTest
import org.jetbrains.kotlin.idea.fir.frontend.api.components.AbstractExpectedExpressionTypeTest
import org.jetbrains.kotlin.idea.fir.frontend.api.components.AbstractHLExpressionTypeTest
import org.jetbrains.kotlin.idea.fir.frontend.api.components.AbstractOverriddenDeclarationProviderTest
@@ -76,6 +77,10 @@ fun main(args: Array<String>) {
testClass<AbstractRendererTest> {
model("components/declarationRenderer")
}
testClass<AbstractReferenceResolveTest> {
model("referenceResolve", pattern = TestGeneratorUtil.KT_WITHOUT_DOTS_IN_NAME)
}
}
testGroup("idea/idea-frontend-fir/idea-fir-low-level-api/tests", "compiler/fir/raw-fir/psi2fir/testData") {
@@ -0,0 +1,6 @@
package test
annotation class Annotation
@<caret>Annotation class Some
@@ -0,0 +1,2 @@
Resolved to:
0: constructor()
@@ -0,0 +1,9 @@
package test
annotation class Annotation
fun test() {
<caret>Annotation fun some() {
}
}
@@ -0,0 +1,2 @@
Resolved to:
0: (in test) annotation class Annotation
@@ -0,0 +1,4 @@
@file:[kotlin.<caret>Deprecated("message")]
package foo
@@ -0,0 +1,2 @@
Resolved to:
0: constructor(message: kotlin.String, replaceWith: kotlin.ReplaceWith = ..., level: kotlin.DeprecationLevel = ...)
@@ -0,0 +1,6 @@
@file:[<caret>D("message")]
package foo
import kotlin.Deprecated as D
@@ -0,0 +1,2 @@
Resolved to:
0: constructor(message: kotlin.String, replaceWith: kotlin.ReplaceWith = ..., level: kotlin.DeprecationLevel = ...)
@@ -0,0 +1,9 @@
package testing
annotation class Annotation<T>(val clazz: Class<T>)
class ATest
@[Annotation<ATest>(javaClass<<caret>ATest>())]
class BTest
// REF: (testing).ATest
@@ -0,0 +1,2 @@
Resolved to:
0: (in testing) class ATest
@@ -0,0 +1,9 @@
package testing
annotation class Annotation<T>(val clazz: Class<T>)
class ATest
@[Annotation<<caret>ATest>(ATest::class.java)]
class BTest
// REF: (testing).ATest
@@ -0,0 +1,2 @@
Resolved to:
0: (in testing) class ATest
@@ -0,0 +1,6 @@
package resolve
open class AA {}
class BB<T : <caret>AA> {}
// REF: (resolve).AA
@@ -0,0 +1,2 @@
Resolved to:
0: (in resolve) open class AA
@@ -0,0 +1,7 @@
class Foo
class C {
val prop: <caret>Foo.
}
@@ -0,0 +1,2 @@
Resolved to:
0: (in ROOT) class Foo
@@ -0,0 +1,12 @@
package t
class A {
companion object Named {
}
}
fun f() {
<caret>A.Named
}
// REF: (t).A
@@ -0,0 +1,2 @@
Resolved to:
0: (in t) class A
@@ -0,0 +1,12 @@
// IGNORE_FIR
package t
class A {
companion object Named {
val i: Int
}
}
fun f() {
<caret>A.Named.i
}
@@ -0,0 +1,2 @@
Resolved to:
0: (in t.A.Named) val i: kotlin.Int
@@ -0,0 +1,16 @@
package t
class A {
companion object Companion {
}
class B
}
fun test() {
<caret>A.B()
}
@@ -0,0 +1,2 @@
Resolved to:
0: (in t) class A
@@ -0,0 +1,7 @@
package testPackage.testOtherPackage
import testPackage.testOtherPackage.<caret>A
class A
// REF: (testPackage.testOtherPackage).A
@@ -0,0 +1,2 @@
Resolved to:
0: (in testPackage.testOtherPackage) class A
@@ -0,0 +1,3 @@
val abc = <caret>[1, 2, 3]
// REF: (kotlin).arrayOf(vararg T)
@@ -0,0 +1,2 @@
Resolved to:
0: (in kotlin) inline fun <reified T> arrayOf(vararg elements: T): kotlin.Array<T>
@@ -0,0 +1,3 @@
val abc: IntArray = [1, 2, 3<caret>]
// REF: (kotlin).intArrayOf(vararg kotlin.Int)
@@ -0,0 +1,2 @@
Resolved to:
0: (in kotlin) fun intArrayOf(vararg elements: kotlin.Int): kotlin.IntArray
@@ -0,0 +1,15 @@
class Controller {
suspend fun suspendHere(x: Continuation<Unit>) {
}
}
fun builder(coroutine c: Controller.() -> Continuation<Unit>) {
}
fun foo() {
builder {
<caret>suspendHere()
}
}
@@ -0,0 +1,2 @@
Resolved to:
0: (in Controller) suspend fun suspendHere(x: `Continuation<R|kotlin/Unit|>`)
@@ -0,0 +1,9 @@
package ctrl_click
fun IntArray(vararg content : Int) : IntArray = content
fun <T> array(vararg t : T) : Array<T> = t
fun main(args : Array<String>) {
var a = <caret>IntArray(array(1, 2, 3))
}
@@ -0,0 +1,2 @@
Resolved to:
0: (in ctrl_click) fun IntArray(vararg content: kotlin.Int): kotlin.IntArray
@@ -0,0 +1,16 @@
package t
class A {
companion object Companion {
}
}
fun A.Companion.foo() {}
fun test() {
<caret>A.foo()
}
@@ -0,0 +1,2 @@
Resolved to:
0: (in t.A) companion object
@@ -0,0 +1,16 @@
package t
class A {
companion object B {
}
}
val A.B.bar : Int get() = 1
fun test() {
<caret>A.bar
}
@@ -0,0 +1,2 @@
Resolved to:
0: (in t.A) companion object B
@@ -0,0 +1,18 @@
package t
interface Trait
open class A {
companion object Companion : Trait {
}
}
fun Trait.foo() {}
fun test() {
<caret>A.foo()
}
@@ -0,0 +1,2 @@
Resolved to:
0: (in t.A) companion object : t.Trait
@@ -0,0 +1,18 @@
package t
interface Trait {
val some : Int get() = 1
}
open class A {
companion object Companion : Trait {
}
}
fun test() {
<caret>A.some
}
@@ -0,0 +1,2 @@
Resolved to:
0: (in t.A) companion object : t.Trait
@@ -0,0 +1,14 @@
package t
class A {
companion object Companion {
fun test()
}
}
fun test() {
<caret>A.test()
}
@@ -0,0 +1,2 @@
Resolved to:
0: (in t.A) companion object
@@ -0,0 +1,8 @@
package test
enum class E {
LOL
}
val values = E.val<caret>ues()
@@ -0,0 +1,2 @@
Resolved to:
0: (in test.E) fun values(): kotlin.Array<test.E>
@@ -0,0 +1,14 @@
// FILE: main.kt
fun usage() {
dependency.C.<caret>Companion
}
// FILE: C.kt
package dependency
class C {
companion object {
}
}
@@ -0,0 +1,2 @@
Resolved to:
0: (in dependency.C) companion object
@@ -0,0 +1,15 @@
// UNRESOLVED_REFERENCE
// FILE: main.kt
import java.lang.* // will not import Fake
fun foo() {
<caret>Fake()
}
// FILE: java.java
class java {
class lang {
class Fake()
}
}
@@ -0,0 +1,14 @@
// UNRESOLVED_REFERENCE
// FILE: main.kt
fun foo() {
<caret>Fake() // not imported within "java.lang.*" default import
}
// FILE: java.java
class java {
class lang {
class Fake()
}
}
@@ -0,0 +1,15 @@
// UNRESOLVED_REFERENCE
// FILE: main.kt
package nonRoot
import java.lang.*
fun foo() {
<caret>Fake()
}
// FILE: java.java
class java {
class lang {
class Fake()
}
}
@@ -0,0 +1,15 @@
// UNRESOLVED_REFERENCE
// FILE: main.kt
package nonRoot
fun foo() {
java.lang.<caret>Fake() // qualification doesn't help, because we are in other package
}
// FILE: java.java
class java {
class lang {
class Fake()
}
}
@@ -0,0 +1,9 @@
package testing
fun <T> someFun() {
fun innerFun(a: <caret>T) {
}
}
@@ -0,0 +1,2 @@
Resolved to:
0: <T>
@@ -0,0 +1,7 @@
class A<X> {
fun foo(a: <caret>X) {
}
}
// REF: X
@@ -0,0 +1,2 @@
Resolved to:
0: <X>
@@ -0,0 +1,8 @@
// FILE: main.kt
package test
import <caret>Klass
// FILE: Klass.kt
class Klass {
}
@@ -0,0 +1,2 @@
Resolved to:
0: (in ROOT) class Klass
@@ -0,0 +1,7 @@
package test
class A
class Some(a: <caret>A)
// REF: (test).A
@@ -0,0 +1,2 @@
Resolved to:
0: (in test) class A
@@ -0,0 +1,7 @@
package test
class A
class Some(var a: <caret>A)
// REF: (test).A
@@ -0,0 +1,2 @@
Resolved to:
0: (in test) class A
@@ -0,0 +1,7 @@
package test
val TOP_LEVEL = 5
enum class MyEnum(value: Int) {
VALUE(<caret>TOP_LEVEL)
}
@@ -0,0 +1,2 @@
Resolved to:
0: (in test) val TOP_LEVEL: kotlin.Int
@@ -0,0 +1,7 @@
package test
class A
fun some(a: <caret>A) = 12
// REF: (test).A
@@ -0,0 +1,2 @@
Resolved to:
0: (in test) class A
@@ -0,0 +1,9 @@
package test
class A
class Test {
fun some(a: <caret>A) = 12
}
// REF: (test).A
@@ -0,0 +1,2 @@
Resolved to:
0: (in test) class A
@@ -0,0 +1,8 @@
package test
class A
class Test {
fun some(vararg a: <caret>A) = 12
}
@@ -0,0 +1,2 @@
Resolved to:
0: (in test) class A
@@ -0,0 +1,11 @@
package test
class A
object b {
companion object {
val x = <caret>A()
}
}
// REF: (test).A
@@ -0,0 +1,2 @@
Resolved to:
0: constructor()
@@ -0,0 +1,15 @@
package test
class A
class Many {
companion object {
val x = A()
}
companion object {
val y = <caret>A()
}
}
// REF: (test).A
@@ -0,0 +1,2 @@
Resolved to:
0: constructor()
@@ -0,0 +1,8 @@
package test
class A
class Test {
fun some(vararg a: A) = <caret>a
}
@@ -0,0 +1,2 @@
Resolved to:
0: value-parameter vararg a: test.A
@@ -0,0 +1,9 @@
package test
class A
class Test {
fun some(vararg a: A) {}
fun call() = some(<caret>a = arrayOf(A()))
}
@@ -0,0 +1,2 @@
Resolved to:
0: value-parameter vararg a: test.A
@@ -0,0 +1,5 @@
@java.lang.annotation.Re<caret>tention(va<caret>lue = java.lang.annotation.RetentionPolicy.RUNTIME)
annotation class Anno()
// REF1: (java.lang.annotation).Retention
// REF2: (in java.lang.annotation.Retention).value()
@@ -0,0 +1,2 @@
Resolved to:
0: constructor(value: java.lang.annotation.RetentionPolicy)
@@ -0,0 +1,14 @@
// FILE: main.kt
class A {
fun foo() {
<caret>JavaClass()
}
}
// FILE: JavaClass.java
import org.jetbrains.annotations.NotNull;
public class JavaClass {
public JavaClass(@NotNull String s) {
}
}
@@ -0,0 +1,2 @@
Resolved to:
0: constructor(s: kotlin.String)
@@ -0,0 +1,4 @@
@java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.R<caret>UNTIME)
annotation class Anno()
// REF: (in java.lang.annotation.RetentionPolicy).RUNTIME
@@ -0,0 +1,2 @@
Resolved to:
0: (in java.lang.annotation.RetentionPolicy) RUNTIME
@@ -0,0 +1,4 @@
import java.lang.annotation.RetentionPolicy
val values = RetentionPolicy.val<caret>ueOf("")
@@ -0,0 +1,2 @@
Resolved to:
0: (in java.lang.annotation.RetentionPolicy) fun valueOf(value: kotlin.String): java.lang.annotation.RetentionPolicy
@@ -0,0 +1,2 @@
val h: java.util.<caret>HashSet<Int>? = null
// REF: (java.util).HashSet
@@ -0,0 +1,2 @@
Resolved to:
0: (in java.util) open class HashSet<E : kotlin.Any!> : java.util.AbstractSet<E!>, kotlin.collections.MutableSet<E!>, kotlin.Cloneable, java.io.Serializable
@@ -0,0 +1,27 @@
class A {
var something: Int = 10
}
fun A.foo(a: A) {
print(a.<caret>something)
a.<caret>something = 1
a.<caret>something += 1
a.<caret>something++
--a.<caret>something
<caret>something++
(<caret>something)++
(<caret>something) = 1
(a.<caret>something) = 1
}
// MULTIRESOLVE
// REF1: (in A).something
// REF2: (in A).something
// REF3: (in A).something
// REF4: (in A).something
// REF5: (in A).something
// REF6: (in A).something
// REF7: (in A).something
// REF8: (in A).something
// REF9: (in A).something
@@ -0,0 +1,2 @@
Resolved to:
0: (in A) var something: kotlin.Int
@@ -0,0 +1,29 @@
class A {
var something: Int
set(value) {}
get() = 10
}
fun A.foo(a: A) {
print(a.<caret>something)
a.<caret>something = 1
a.<caret>something += 1
a.<caret>something++
--a.<caret>something
<caret>something++
(<caret>something)++
(<caret>something) = 1
(a.<caret>something) = 1
}
// MULTIRESOLVE
// REF1: (in A).something
// REF2: (in A).something
// REF3: (in A).something
// REF4: (in A).something
// REF5: (in A).something
// REF6: (in A).something
// REF7: (in A).something
// REF8: (in A).something
// REF9: (in A).something
@@ -0,0 +1,2 @@
Resolved to:
0: (in A) var something: kotlin.Int
@@ -0,0 +1,12 @@
package a
class A() {
}
operator fun A.component1() = 1
operator fun A.component2() = 1
fun main(args: Array<String>) {
val (a, <caret>b) = A()
}
@@ -0,0 +1,2 @@
Resolved to:
0: (in a) operator fun a.A.component2(): kotlin.Int
@@ -0,0 +1,12 @@
package a
class MyPair {
operator fun component1() = 1
operator fun component2() = 2
}
fun main(args: Array<String>) {
val p = MyPair()
val (a, <caret>b) = p
}
@@ -0,0 +1,2 @@
Resolved to:
0: (in a.MyPair) operator fun component2(): kotlin.Int
@@ -0,0 +1,13 @@
package a
class A {
companion object Named {
val i: Int
}
}
fun main(args: Array<String>) {
A.Na<caret>med.i
}
// REF: companion object of (a).A
@@ -0,0 +1,2 @@
Resolved to:
0: (in a.A) companion object Named
@@ -0,0 +1,3 @@
package test1.test2.<caret>test3.test4
// REF: test3
@@ -0,0 +1,2 @@
Resolved to:
0: package test1.test2.test3
@@ -0,0 +1,7 @@
package testPackage.testOtherPackage
import <caret>testPackage.testOtherPackage.A
class A
// REF: testPackage

Some files were not shown because too many files have changed in this diff Show More