Add warning for ambiguous annotated expression syntax
#KT-14238 In Progress
This commit is contained in:
+59
@@ -0,0 +1,59 @@
|
||||
// !DIAGNOSTICS: -UNUSED_PARAMETER
|
||||
|
||||
@Target(AnnotationTarget.EXPRESSION)
|
||||
annotation class Ann1
|
||||
@Target(AnnotationTarget.EXPRESSION)
|
||||
annotation class Ann2(val x: String)
|
||||
|
||||
fun bar() {}
|
||||
fun bar(block: () -> Unit) {}
|
||||
|
||||
fun foo(y: IntArray) {
|
||||
@Ann1 bar()
|
||||
@Ann1 bar() { }
|
||||
@Ann1 bar { }
|
||||
|
||||
@Ann2("") bar()
|
||||
@Ann2("") bar() { }
|
||||
@Ann2("") bar { }
|
||||
|
||||
@Ann1 @Ann2("") bar()
|
||||
|
||||
var x = 1
|
||||
|
||||
@Ann1 ++x
|
||||
@Ann1 x++
|
||||
@Ann2("") ++x
|
||||
@Ann2("") x++
|
||||
@Ann1 @Ann2("") ++x
|
||||
@Ann1 @Ann2("") x++
|
||||
|
||||
@Ann1 y[0]
|
||||
|
||||
@Ann1 <!UNUSED_LAMBDA_EXPRESSION!>{ x: Int -> x }<!>
|
||||
@Ann1 { x: Int -> x }(1)
|
||||
@Ann1 object { fun foo() = 1 }
|
||||
@Ann1 object { fun foo() = 1 }.foo()
|
||||
|
||||
@Ann1() (x * x)
|
||||
var z = 1
|
||||
<!ANNOTATIONS_ON_BLOCK_LEVEL_EXPRESSION_ON_THE_SAME_LINE!>@Ann1 x<!> + z
|
||||
|
||||
<!ANNOTATIONS_ON_BLOCK_LEVEL_EXPRESSION_ON_THE_SAME_LINE!>@Ann1 x<!> = x + 2
|
||||
<!ANNOTATIONS_ON_BLOCK_LEVEL_EXPRESSION_ON_THE_SAME_LINE!>@Ann1 x<!> += z + 2
|
||||
|
||||
<!ANNOTATIONS_ON_BLOCK_LEVEL_EXPRESSION_ON_THE_SAME_LINE!>@Ann1 x<!> + 6 * 2 > 0
|
||||
<!ANNOTATIONS_ON_BLOCK_LEVEL_EXPRESSION_ON_THE_SAME_LINE!>@Ann1 x<!> * 6 + 2 > 0
|
||||
|
||||
<!ANNOTATIONS_ON_BLOCK_LEVEL_EXPRESSION_ON_THE_SAME_LINE!>@Ann1 object { operator fun plus(x: Int) = 1 }<!> + 1
|
||||
<!ANNOTATIONS_ON_BLOCK_LEVEL_EXPRESSION_ON_THE_SAME_LINE!>@Ann1 object { operator fun plus(x: Int) = 1 }<!> + 1 * 4 > 0
|
||||
|
||||
<!ANNOTATIONS_ON_BLOCK_LEVEL_EXPRESSION_ON_THE_SAME_LINE!>@Ann1 x<!> foo z + 8
|
||||
|
||||
1 + @Ann1 x
|
||||
1 + @Ann1 x * z + 8
|
||||
|
||||
x foo @Ann1 z + 8
|
||||
}
|
||||
|
||||
infix fun Int.foo(other: Int) = 1
|
||||
+21
@@ -0,0 +1,21 @@
|
||||
package
|
||||
|
||||
public fun bar(): kotlin.Unit
|
||||
public fun bar(/*0*/ block: () -> kotlin.Unit): kotlin.Unit
|
||||
public fun foo(/*0*/ y: kotlin.IntArray): kotlin.Unit
|
||||
public infix fun kotlin.Int.foo(/*0*/ other: kotlin.Int): kotlin.Int
|
||||
|
||||
@kotlin.annotation.Target(allowedTargets = {AnnotationTarget.EXPRESSION}) public final annotation class Ann1 : kotlin.Annotation {
|
||||
public constructor Ann1()
|
||||
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||
}
|
||||
|
||||
@kotlin.annotation.Target(allowedTargets = {AnnotationTarget.EXPRESSION}) public final annotation class Ann2 : kotlin.Annotation {
|
||||
public constructor Ann2(/*0*/ x: kotlin.String)
|
||||
public final val x: kotlin.String
|
||||
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||
}
|
||||
@@ -3,7 +3,7 @@ annotation class ExprAnn
|
||||
|
||||
fun foo(): Int {
|
||||
var a: Int
|
||||
@ExprAnn a = 1
|
||||
@ExprAnn a += 1
|
||||
<!ANNOTATIONS_ON_BLOCK_LEVEL_EXPRESSION_ON_THE_SAME_LINE!>@ExprAnn a<!> = 1
|
||||
<!ANNOTATIONS_ON_BLOCK_LEVEL_EXPRESSION_ON_THE_SAME_LINE!>@ExprAnn a<!> += 1
|
||||
return a
|
||||
}
|
||||
}
|
||||
|
||||
@@ -7,5 +7,5 @@ fun transform(i: Int, tr: (Int) -> Int): Int = <!WRONG_ANNOTATION_TARGET!>@base<
|
||||
@base <!WRONG_ANNOTATION_TARGET!>@special<!> fun foo(i: Int): Int {
|
||||
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 })
|
||||
return transform(@special j, @base @special { <!ANNOTATIONS_ON_BLOCK_LEVEL_EXPRESSION_ON_THE_SAME_LINE!>@special it<!> * 2 })
|
||||
}
|
||||
|
||||
+1
-1
@@ -9,5 +9,5 @@ fun transform(i: Int, tr: (@<!DEBUG_INFO_MISSING_UNRESOLVED!>special<!> Int) ->
|
||||
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 -> <!WRONG_ANNOTATION_TARGET!>@base<!> i * 2 })
|
||||
return transform(@special j, @special { i: @base Int -> <!ANNOTATIONS_ON_BLOCK_LEVEL_EXPRESSION_ON_THE_SAME_LINE!><!WRONG_ANNOTATION_TARGET!>@base<!> i<!> * 2 })
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user