FIR: support WRONG_ANNOTATION_TARGET on expressions

This commit is contained in:
Mikhail Glukhikh
2021-05-13 16:12:02 +03:00
parent 92ab600081
commit d11092ae3c
23 changed files with 103 additions and 44 deletions
@@ -33,8 +33,8 @@ fun foo(arg: Int) {
// Function expression too
val f = @FunAnn fun(): Int { return 42 }
// But here, f and gav should be annotated instead
bar(@FunAnn f)
bar(@FunAnn ::gav)
bar(<!WRONG_ANNOTATION_TARGET!>@FunAnn<!> f)
bar(<!WRONG_ANNOTATION_TARGET!>@FunAnn<!> ::gav)
// Function expression, ok
fast(f)
}
@@ -1,13 +0,0 @@
@Target(AnnotationTarget.FUNCTION)
annotation class FunAnn
@Target(AnnotationTarget.EXPRESSION)
@Retention(AnnotationRetention.SOURCE)
annotation class ExprAnn
fun foo(): Int {
var x = 5
@FunAnn ++x
@ExprAnn ++x
return x
}
@@ -1,3 +1,4 @@
// FIR_IDENTICAL
@Target(AnnotationTarget.FUNCTION)
annotation class FunAnn
@@ -18,4 +18,4 @@
return local
}
@empty val z = @empty 0
@empty val z = <!WRONG_ANNOTATION_TARGET!>@empty<!> 0
@@ -4,10 +4,10 @@ annotation class base
@Retention(AnnotationRetention.SOURCE)
annotation class special
fun transform(i: Int, tr: (Int) -> Int): Int = @base @special tr(@special i)
fun transform(i: Int, tr: (Int) -> Int): Int = <!WRONG_ANNOTATION_TARGET!>@base<!> @special tr(@special i)
@base @special fun foo(i: Int): Int {
val j = @base @special i + 1
if (j == 1) return foo(@special @base 42)
val j = <!WRONG_ANNOTATION_TARGET!>@base<!> @special i + 1
if (j == 1) return foo(@special <!WRONG_ANNOTATION_TARGET!>@base<!> 42)
return transform(@special j, @base @special { @special it * 2 })
}
@@ -10,5 +10,5 @@ fun transform(i: Int, tr: (@special Int) -> Int): Int = @special tr(@special i)
fun foo(i: Int): Int {
val j = @special i + 1
if (j == 1) return foo(@special 42)
return transform(@special j, @special { i: @base Int -> @base i * 2 })
return transform(@special j, @special { i: @base Int -> <!WRONG_ANNOTATION_TARGET!>@base<!> i * 2 })
}
@@ -18,4 +18,4 @@
return local
}
@incorrect val z = @incorrect 0
@incorrect val z = <!WRONG_ANNOTATION_TARGET!>@incorrect<!> 0
@@ -75,7 +75,7 @@ import test.AnnotationTargets.*
): @fieldann @parameter Int {
@local @base @multiple @fieldann val j = i + 1
@base @multiple return j
<!WRONG_ANNOTATION_TARGET!>@base<!> <!WRONG_ANNOTATION_TARGET!>@multiple<!> return j
}
@base @method @konstructor constructor(): this(0)