FIR2IR: make sources of qualified accesses & calls closer to PSI2IR

#KT-60111 Fixed
This commit is contained in:
Mikhail Glukhikh
2023-10-02 13:55:31 +02:00
committed by Space Team
parent 7c66a3dc65
commit b7b7dd1000
18 changed files with 88 additions and 69 deletions
@@ -18,7 +18,7 @@ const val methodName = A::foo.<!EVALUATED("foo")!>name<!>
const val suspendMethodName = A::bar.<!EVALUATED("bar")!>name<!>
const val className = ::A.<!EVALUATED("<init>")!>name<!>
const val topLevelPropName = ::topLevelProp.<!EVALUATED("topLevelProp")!>name<!>
const val nameInComplexExpression = A::OK.name <!EVALUATED("OK!")!>+ "!"<!>
const val nameInComplexExpression = <!EVALUATED("OK!")!>A::OK.name + "!"<!>
// STOP_EVALUATION_CHECKS
fun box(): String {
@@ -31,7 +31,7 @@ class A {
val insideStringConcat = "${temp::b.<!EVALUATED("b")!>name<!>}"
val complexExpression1 = A()::a.<!EVALUATED("a")!>name<!> + A()::b.<!EVALUATED("b")!>name<!>
val complexExpression2 = A::a.name <!EVALUATED("ab")!>+ A::b.name<!>
val complexExpression2 = <!EVALUATED("ab")!>A::a.name + A::b.name<!>
var recursive = ::test.<!EVALUATED("test")!>name<!>
}
@@ -32,9 +32,9 @@ public @interface ComponentScan {
@ComponentScans(
value = [
ComponentScan(
a = ["String" <!EVALUATED("StringA")!>+ "A"<!>],
c = ["String" <!EVALUATED("StringC")!>+ "C"<!>],
b = ["String" <!EVALUATED("StringB")!>+ "B"<!>],
a = [<!EVALUATED("StringA")!>"String" + "A"<!>],
c = [<!EVALUATED("StringC")!>"String" + "C"<!>],
b = [<!EVALUATED("StringB")!>"String" + "B"<!>],
)
]
)
@@ -53,9 +53,9 @@ annotation class KtComponentScan(
@ComponentScans(
value = [
ComponentScan(
a = ["String" <!EVALUATED("StringA")!>+ "A"<!>],
c = ["String" <!EVALUATED("StringC")!>+ "C"<!>],
b = ["String" <!EVALUATED("StringB")!>+ "B"<!>],
a = [<!EVALUATED("StringA")!>"String" + "A"<!>],
c = [<!EVALUATED("StringC")!>"String" + "C"<!>],
b = [<!EVALUATED("StringB")!>"String" + "B"<!>],
)
]
)
@@ -17,10 +17,10 @@ annotation class AnnotationWithAnnotation(val anno: Annotation)
@Retention(AnnotationRetention.BINARY)
annotation class AnnotationWithAnnotationWithAnnotation(val anno: AnnotationWithAnnotation)
@AnnotationWithAnnotation(Annotation("Str" <!EVALUATED("String")!>+ "ing"<!>))
@AnnotationWithAnnotation(Annotation(<!EVALUATED("String")!>"Str" + "ing"<!>))
class A
@AnnotationWithAnnotationWithAnnotation(AnnotationWithAnnotation(Annotation("Str" <!EVALUATED("String")!>+ "ing"<!>)))
@AnnotationWithAnnotationWithAnnotation(AnnotationWithAnnotation(Annotation(<!EVALUATED("String")!>"Str" + "ing"<!>)))
class B
// MODULE: main
@@ -28,29 +28,29 @@ annotation class BinaryAnnotation(val str: String)
// 1. CLASS
// 8. CONSTRUCTOR
@BinaryAnnotation("Str" <!EVALUATED("String")!>+ "ing"<!>)
class A @BinaryAnnotation("Str" <!EVALUATED("String")!>+ "ing"<!>) constructor(val i: Int) {
@BinaryAnnotation("Str" <!EVALUATED("String")!>+ "ing"<!>) constructor() : this(0)
@BinaryAnnotation(<!EVALUATED("String")!>"Str" + "ing"<!>)
class A @BinaryAnnotation(<!EVALUATED("String")!>"Str" + "ing"<!>) constructor(val i: Int) {
@BinaryAnnotation(<!EVALUATED("String")!>"Str" + "ing"<!>) constructor() : this(0)
}
// 2. ANNOTATION_CLASS
@BinaryAnnotation("Str" <!EVALUATED("String")!>+ "ing"<!>)
@BinaryAnnotation(<!EVALUATED("String")!>"Str" + "ing"<!>)
annotation class Anno
// 3. TYPE_PARAMETER
fun <@BinaryAnnotation("Str" <!EVALUATED("String")!>+ "ing"<!>) T, U> fooWithTypeParam(a: T, b: U) {}
fun <@BinaryAnnotation(<!EVALUATED("String")!>"Str" + "ing"<!>) T, U> fooWithTypeParam(a: T, b: U) {}
// 4. PROPERTY
@BinaryAnnotation("Str" <!EVALUATED("String")!>+ "ing"<!>)
@BinaryAnnotation(<!EVALUATED("String")!>"Str" + "ing"<!>)
val prop: Int = 0
// 5. FIELD
enum class SomeEnum {
@BinaryAnnotation("Str" <!EVALUATED("String")!>+ "ing"<!>) A,
@BinaryAnnotation(<!EVALUATED("String")!>"Str" + "ing"<!>) A,
B;
}
@field:BinaryAnnotation("Str" <!EVALUATED("String")!>+ "ing"<!>)
@field:BinaryAnnotation(<!EVALUATED("String")!>"Str" + "ing"<!>)
var x: Int = 5
object Delegate {
@@ -58,42 +58,42 @@ object Delegate {
operator fun setValue(instance: Any?, property: Any, value: String) {}
}
@delegate:BinaryAnnotation("Str" <!EVALUATED("String")!>+ "ing"<!>)
@delegate:BinaryAnnotation(<!EVALUATED("String")!>"Str" + "ing"<!>)
val p: String by Delegate
// 7. VALUE_PARAMETER
fun @receiver:BinaryAnnotation("Str" <!EVALUATED("String")!>+ "ing"<!>) String.myExtension() { }
fun foo(@BinaryAnnotation("Str" <!EVALUATED("String")!>+ "ing"<!>) a: Int) { }
fun @receiver:BinaryAnnotation(<!EVALUATED("String")!>"Str" + "ing"<!>) String.myExtension() { }
fun foo(@BinaryAnnotation(<!EVALUATED("String")!>"Str" + "ing"<!>) a: Int) { }
val @receiver:BinaryAnnotation("Str" <!EVALUATED("String")!>+ "ing"<!>) String.a: Int
val @receiver:BinaryAnnotation(<!EVALUATED("String")!>"Str" + "ing"<!>) String.a: Int
get() = 0
class WithConstructorArgumentAnnotation(
@BinaryAnnotation("Str" <!EVALUATED("String")!>+ "ing"<!>)
@BinaryAnnotation(<!EVALUATED("String")!>"Str" + "ing"<!>)
val a: Int
)
@setparam:BinaryAnnotation("Str" <!EVALUATED("String")!>+ "ing"<!>)
@setparam:BinaryAnnotation(<!EVALUATED("String")!>"Str" + "ing"<!>)
var setParamProp: Int = 0
get() = field + 1
set(x: Int) { field = x * 2 }
var mutablePropWithAnnotationOnSetterParam = 0
set(@BinaryAnnotation("Str" <!EVALUATED("String")!>+ "ing"<!>) x: Int) { field = x * 2 }
set(@BinaryAnnotation(<!EVALUATED("String")!>"Str" + "ing"<!>) x: Int) { field = x * 2 }
// 9. FUNCTION
@BinaryAnnotation("Str" <!EVALUATED("String")!>+ "ing"<!>)
@BinaryAnnotation(<!EVALUATED("String")!>"Str" + "ing"<!>)
fun bar() {}
// 10. PROPERTY_GETTER
// 11. PROPERTY_SETTER
var b: Int
@BinaryAnnotation("Str" <!EVALUATED("String")!>+ "ing"<!>) get() = 0
@BinaryAnnotation("Str" <!EVALUATED("String")!>+ "ing"<!>) set(value) {}
@BinaryAnnotation(<!EVALUATED("String")!>"Str" + "ing"<!>) get() = 0
@BinaryAnnotation(<!EVALUATED("String")!>"Str" + "ing"<!>) set(value) {}
// 15. TYPEALIAS
@BinaryAnnotation("Str" <!EVALUATED("String")!>+ "ing"<!>)
@BinaryAnnotation(<!EVALUATED("String")!>"Str" + "ing"<!>)
typealias C = Int
// MODULE: main
@@ -13,10 +13,10 @@ annotation class AnnotationWithVararg(vararg val array: String)
@Retention(AnnotationRetention.BINARY)
annotation class AnnotationWithArray(val array: Array<String>)
@AnnotationWithVararg("Str" <!EVALUATED("String")!>+ "ing"<!>, <!EVALUATED("String2")!>"String2"<!>, <!EVALUATED("String3")!>"String${3}"<!>)
@AnnotationWithVararg(<!EVALUATED("String")!>"Str" + "ing"<!>, <!EVALUATED("String2")!>"String2"<!>, <!EVALUATED("String3")!>"String${3}"<!>)
class A
@AnnotationWithArray(["Str" <!EVALUATED("String")!>+ "ing"<!>, <!EVALUATED("String2")!>"String2"<!>, <!EVALUATED("String3")!>"String${3}"<!>])
@AnnotationWithArray([<!EVALUATED("String")!>"Str" + "ing"<!>, <!EVALUATED("String2")!>"String2"<!>, <!EVALUATED("String3")!>"String${3}"<!>])
class B
// MODULE: main
@@ -22,7 +22,7 @@ annotation class IntegerNumberValid(
@Target(AnnotationTarget.CLASS)
@Retention(AnnotationRetention.BINARY)
annotation class AnnotationWithDefault(val str: String = "Str" <!EVALUATED("String")!>+ "ing"<!>)
annotation class AnnotationWithDefault(val str: String = <!EVALUATED("String")!>"Str" + "ing"<!>)
@AnnotationWithDefault()
class A
@@ -18,8 +18,8 @@ annotation class Nested(val a: TypeAnnotation)
@Retention(AnnotationRetention.BINARY)
annotation class NestedArray(val a: Array<TypeAnnotation>)
val a: @Nested(TypeAnnotation("Int" <!EVALUATED("IntAnno")!>+ "Anno"<!>)) Int = 1
val b: @NestedArray([TypeAnnotation("Element1" <!EVALUATED("Element1Anno")!>+ "Anno"<!>), TypeAnnotation("Element2" <!EVALUATED("Element2Anno")!>+ "Anno"<!>)]) Int = 1
val a: @Nested(TypeAnnotation(<!EVALUATED("IntAnno")!>"Int" + "Anno"<!>)) Int = 1
val b: @NestedArray([TypeAnnotation(<!EVALUATED("Element1Anno")!>"Element1" + "Anno"<!>), TypeAnnotation(<!EVALUATED("Element2Anno")!>"Element2" + "Anno"<!>)]) Int = 1
// MODULE: main
// FILE: main.kt
@@ -16,39 +16,39 @@ open class A
interface B
//class C : @TypeAnnotation("AClass" + "Anno") A(), @TypeAnnotation("BInterface" + "Anno") B
val a: @TypeAnnotation("Int" <!EVALUATED("IntAnno")!>+ "Anno"<!>) Int = 1
var b: @TypeAnnotation("List" <!EVALUATED("ListAnno")!>+ "Anno"<!>) List<
@TypeAnnotation("Pair" <!EVALUATED("PairAnno")!>+ "Anno"<!>)Pair<
@TypeAnnotation("PairInt1" <!EVALUATED("PairInt1Anno")!>+ "Anno"<!>) Int,
@TypeAnnotation("PairInt2" <!EVALUATED("PairInt2Anno")!>+ "Anno"<!>) Int
val a: @TypeAnnotation(<!EVALUATED("IntAnno")!>"Int" + "Anno"<!>) Int = 1
var b: @TypeAnnotation(<!EVALUATED("ListAnno")!>"List" + "Anno"<!>) List<
@TypeAnnotation(<!EVALUATED("PairAnno")!>"Pair" + "Anno"<!>)Pair<
@TypeAnnotation(<!EVALUATED("PairInt1Anno")!>"PairInt1" + "Anno"<!>) Int,
@TypeAnnotation(<!EVALUATED("PairInt2Anno")!>"PairInt2" + "Anno"<!>) Int
>
>? = null
fun foo(a: @TypeAnnotation("String" <!EVALUATED("StringAnno")!>+ "Anno"<!>) String): @TypeAnnotation("Any" <!EVALUATED("AnyAnno")!>+ "Anno"<!>) Any {
val b : @TypeAnnotation("Double" <!EVALUATED("DoubleAnno")!>+ "Anno"<!>) Double = 1.0
fun foo(a: @TypeAnnotation(<!EVALUATED("StringAnno")!>"String" + "Anno"<!>) String): @TypeAnnotation(<!EVALUATED("AnyAnno")!>"Any" + "Anno"<!>) Any {
val b : @TypeAnnotation(<!EVALUATED("DoubleAnno")!>"Double" + "Anno"<!>) Double = 1.0
return b
}
fun <T: @TypeAnnotation("SuperT" <!EVALUATED("SuperTAnno")!>+ "Anno"<!>) Any> bar(a: @TypeAnnotation("T" <!EVALUATED("TAnno")!>+ "Anno"<!>) T) {}
fun <T: @TypeAnnotation(<!EVALUATED("SuperTAnno")!>"SuperT" + "Anno"<!>) Any> bar(a: @TypeAnnotation(<!EVALUATED("TAnno")!>"T" + "Anno"<!>) T) {}
fun example(computeAny: @TypeAnnotation("Fun" <!EVALUATED("FunAnno")!>+ "Anno"<!>) () -> Any) {
fun example(computeAny: @TypeAnnotation(<!EVALUATED("FunAnno")!>"Fun" + "Anno"<!>) () -> Any) {
// val memoizedFoo: @TypeAnnotation("LocalDelegate" + "Anno") Any by lazy(computeAny)
}
typealias Fun = @TypeAnnotation("TypeAlias" <!EVALUATED("TypeAliasAnno")!>+ "Anno"<!>) (Int, Int) -> Int
typealias Fun = @TypeAnnotation(<!EVALUATED("TypeAliasAnno")!>"TypeAlias" + "Anno"<!>) (Int, Int) -> Int
fun memberAccess() {
bar<@TypeAnnotation("Float" <!EVALUATED("FloatAnno")!>+ "Anno"<!>) Float>(1.0f)
bar<@TypeAnnotation(<!EVALUATED("FloatAnno")!>"Float" + "Anno"<!>) Float>(1.0f)
}
val typeOperator = 1L as @TypeAnnotation("Long" <!EVALUATED("LongAnno")!>+ "Anno"<!>) Long
val typeOperator = 1L as @TypeAnnotation(<!EVALUATED("LongAnno")!>"Long" + "Anno"<!>) Long
fun withVararg(vararg args: @TypeAnnotation("Byte" <!EVALUATED("ByteAnno")!>+ "Anno"<!>) Byte) {}
fun withVararg(vararg args: @TypeAnnotation(<!EVALUATED("ByteAnno")!>"Byte" + "Anno"<!>) Byte) {}
fun withAnonymousObject() {
object {
fun bar() {
val a: @TypeAnnotation("InsideObject" <!EVALUATED("InsideObjectAnno")!>+ "Anno"<!>) A? = null
val a: @TypeAnnotation(<!EVALUATED("InsideObjectAnno")!>"InsideObject" + "Anno"<!>) A? = null
}
}
}
@@ -70,8 +70,8 @@ fun functionWithLambda(action: (Int, String) -> Any) {
// }
//}
val inProjection: MutableList<in @TypeAnnotation("InProjection" <!EVALUATED("InProjectionAnno")!>+ "Anno"<!>) String> = mutableListOf()
val outProjection: MutableList<out @TypeAnnotation("OutProjection" <!EVALUATED("OutProjectionAnno")!>+ "Anno"<!>) String> = mutableListOf()
val inProjection: MutableList<in @TypeAnnotation(<!EVALUATED("InProjectionAnno")!>"InProjection" + "Anno"<!>) String> = mutableListOf()
val outProjection: MutableList<out @TypeAnnotation(<!EVALUATED("OutProjectionAnno")!>"OutProjection" + "Anno"<!>) String> = mutableListOf()
// MODULE: main
// FILE: main.kt