Support non-parenthesized annotations on functional types without receiver
^KT-31734 Fixed
This commit is contained in:
+70
@@ -0,0 +1,70 @@
|
||||
// !DIAGNOSTICS: -UNUSED_VARIABLE -CAST_NEVER_SUCCEEDS -CANNOT_CHECK_FOR_ERASED -UNCHECKED_CAST -UNUSED_ANONYMOUS_PARAMETER
|
||||
// SKIP_TXT
|
||||
// Issue: KT-31734
|
||||
|
||||
@Target(AnnotationTarget.TYPE, AnnotationTarget.CLASS)
|
||||
@Retention(AnnotationRetention.SOURCE)
|
||||
@Repeatable
|
||||
annotation class Foo
|
||||
|
||||
fun foo1(x: <!NON_PARENTHESIZED_ANNOTATIONS_ON_FUNCTIONAL_TYPES!>@Foo<!> () -> Unit) = x as Iterable<<!NON_PARENTHESIZED_ANNOTATIONS_ON_FUNCTIONAL_TYPES!>@Foo<!> () -> Unit>?
|
||||
|
||||
fun foo2() = null as <!NON_PARENTHESIZED_ANNOTATIONS_ON_FUNCTIONAL_TYPES!>@Foo<!> () -> Unit
|
||||
|
||||
fun foo3(x: Any?) {
|
||||
if (x is (<!NON_PARENTHESIZED_ANNOTATIONS_ON_FUNCTIONAL_TYPES!>@<!DEBUG_INFO_MISSING_UNRESOLVED!>Foo<!><!> () -> Unit)?) {
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
fun foo4(x: Any) = x is <!NON_PARENTHESIZED_ANNOTATIONS_ON_FUNCTIONAL_TYPES!>@Foo<!> () -> (() -> Unit?)
|
||||
|
||||
fun foo5(x: Any): <!NON_PARENTHESIZED_ANNOTATIONS_ON_FUNCTIONAL_TYPES!>@Foo<!> () -> Unit = x as @Foo() @[Foo Foo()] <!NON_PARENTHESIZED_ANNOTATIONS_ON_FUNCTIONAL_TYPES!>@Foo<!> () -> Unit
|
||||
|
||||
fun foo6() {
|
||||
val x: @Foo() @[Foo Foo()] <!NON_PARENTHESIZED_ANNOTATIONS_ON_FUNCTIONAL_TYPES!>@Foo<!> () -> Unit = {}
|
||||
}
|
||||
|
||||
fun foo7() {
|
||||
val x: <!NON_PARENTHESIZED_ANNOTATIONS_ON_FUNCTIONAL_TYPES!>@Foo<!> (<!NON_PARENTHESIZED_ANNOTATIONS_ON_FUNCTIONAL_TYPES!>@Foo<!> () -> Unit) -> Unit = { x: <!NON_PARENTHESIZED_ANNOTATIONS_ON_FUNCTIONAL_TYPES!>@Foo<!> () -> Unit -> }
|
||||
}
|
||||
|
||||
fun foo8(<!UNUSED_PARAMETER!>x<!>: Any?) {
|
||||
val <!NAME_SHADOWING!>x<!>: (<!NON_PARENTHESIZED_ANNOTATIONS_ON_FUNCTIONAL_TYPES!>@Foo<!> () -> Unit)? = {}
|
||||
}
|
||||
|
||||
fun foo9(x: (<!NON_PARENTHESIZED_ANNOTATIONS_ON_FUNCTIONAL_TYPES!>@Foo<!> () -> Unit)?) = x as Iterable<(<!NON_PARENTHESIZED_ANNOTATIONS_ON_FUNCTIONAL_TYPES!>@Foo<!> () -> Unit?)?>?
|
||||
|
||||
fun foo10(x: @[Foo] () -> Unit) = x as Iterable<@Foo() () -> Unit>?
|
||||
|
||||
fun foo11(x: @[Foo ] () -> Unit) = x as Iterable<@Foo() () -> Unit>?
|
||||
|
||||
fun foo12(x: @[Foo/**/] () -> Unit) = x as Iterable<@Foo() () -> Unit>?
|
||||
|
||||
val foo13: <!NON_PARENTHESIZED_ANNOTATIONS_ON_FUNCTIONAL_TYPES!>@Foo<!> (x: @Foo Any) -> Unit get() = {}
|
||||
|
||||
val foo14: <!NON_PARENTHESIZED_ANNOTATIONS_ON_FUNCTIONAL_TYPES!>@Foo<!> (x: <!NON_PARENTHESIZED_ANNOTATIONS_ON_FUNCTIONAL_TYPES!>@Foo<!> () -> Unit) -> Unit get() = {}
|
||||
|
||||
val foo15: @Foo () <!NON_PARENTHESIZED_ANNOTATIONS_ON_FUNCTIONAL_TYPES!>@Foo<!> () -> Unit get() = {}
|
||||
|
||||
val foo16: @Foo @Foo () <!NON_PARENTHESIZED_ANNOTATIONS_ON_FUNCTIONAL_TYPES!>@Foo<!> () -> Unit get() = {}
|
||||
|
||||
val foo17: @Foo() @Foo () <!NON_PARENTHESIZED_ANNOTATIONS_ON_FUNCTIONAL_TYPES!>@Foo<!> () -> Unit get() = {}
|
||||
|
||||
val foo18: @Foo()@Foo () <!NON_PARENTHESIZED_ANNOTATIONS_ON_FUNCTIONAL_TYPES!>@Foo<!> () -> Unit get() = {}
|
||||
|
||||
val foo19: @Foo@Foo () <!NON_PARENTHESIZED_ANNOTATIONS_ON_FUNCTIONAL_TYPES!>@Foo<!> () -> Unit get() = {}
|
||||
|
||||
val foo20: @Foo<!NON_PARENTHESIZED_ANNOTATIONS_ON_FUNCTIONAL_TYPES!>@Foo<!> () -> Unit get() = {}
|
||||
|
||||
val foo21: @Foo()<!NON_PARENTHESIZED_ANNOTATIONS_ON_FUNCTIONAL_TYPES!>@Foo<!> () -> Unit get() = {}
|
||||
|
||||
val foo22: <!NON_PARENTHESIZED_ANNOTATIONS_ON_FUNCTIONAL_TYPES!>@Foo<!> (x: <!NON_PARENTHESIZED_ANNOTATIONS_ON_FUNCTIONAL_TYPES!>@Foo<!> () -> Unit) -> Unit get() = {}
|
||||
|
||||
val foo23: <!NON_PARENTHESIZED_ANNOTATIONS_ON_FUNCTIONAL_TYPES!>@Foo<!> (<!NON_PARENTHESIZED_ANNOTATIONS_ON_FUNCTIONAL_TYPES!>@Foo<!> () -> Unit) -> Unit get() = {}
|
||||
|
||||
val foo24: <!NON_PARENTHESIZED_ANNOTATIONS_ON_FUNCTIONAL_TYPES!>@Foo<!> (<!NON_PARENTHESIZED_ANNOTATIONS_ON_FUNCTIONAL_TYPES!>@Foo<!> () -> Unit, <!NON_PARENTHESIZED_ANNOTATIONS_ON_FUNCTIONAL_TYPES!>@Foo<!> () -> Unit) -> Unit get() = {x, y -> }
|
||||
|
||||
val foo25: <!NON_PARENTHESIZED_ANNOTATIONS_ON_FUNCTIONAL_TYPES!>@Foo<!> (x: @Foo Any, @Foo Any) -> Unit get() = {x, y -> }
|
||||
|
||||
val foo26: @Foo suspend () -> Unit = {}
|
||||
+67
@@ -0,0 +1,67 @@
|
||||
// !LANGUAGE: +NonParenthesizedAnnotationsOnFunctionalTypes
|
||||
// !DIAGNOSTICS: -UNUSED_VARIABLE -CAST_NEVER_SUCCEEDS -CANNOT_CHECK_FOR_ERASED -UNCHECKED_CAST -UNUSED_ANONYMOUS_PARAMETER
|
||||
// SKIP_TXT
|
||||
// Issue: KT-31734
|
||||
|
||||
@Target(AnnotationTarget.TYPE, AnnotationTarget.CLASS)
|
||||
@Retention(AnnotationRetention.SOURCE)
|
||||
@Repeatable
|
||||
annotation class Foo
|
||||
|
||||
class MyClass
|
||||
|
||||
fun foo1(x: @Foo () -> Unit) = x as Iterable<@Foo () -> Unit>?
|
||||
|
||||
fun foo2() = null as @Foo () -> Unit
|
||||
|
||||
fun foo3(x: Any?) {
|
||||
if (x is (@<!DEBUG_INFO_MISSING_UNRESOLVED!>Foo<!> () -> Unit)?) {
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
fun foo4(x: Any) = x is @Foo () -> (() -> Unit?)
|
||||
|
||||
fun foo5(x: Any): @Foo () -> Unit = x as @Foo() @[Foo Foo()] @Foo () -> Unit
|
||||
|
||||
fun foo6() {
|
||||
val x: @Foo() @[Foo Foo()] @Foo () -> Unit = {}
|
||||
}
|
||||
|
||||
fun foo7() {
|
||||
val x: @Foo (@Foo () -> Unit) -> Unit = { x: @Foo () -> Unit -> }
|
||||
}
|
||||
|
||||
fun foo10(x: @[Foo()] () -> Unit) = x as Iterable<@Foo() () -> Unit>?
|
||||
|
||||
fun foo11(x: @[Foo] () -> Unit) = x as Iterable<@Foo() () -> Unit>?
|
||||
|
||||
fun foo12(x: @[Foo ] () -> Unit) = x as Iterable<@Foo() () -> Unit>?
|
||||
|
||||
fun foo13(x: @[Foo/**/] () -> Unit) = x as Iterable<@Foo() () -> Unit>?
|
||||
|
||||
val foo14: @Foo (x: @Foo () -> Unit) -> Unit get() = {}
|
||||
|
||||
val foo15: @Foo () @Foo () -> Unit get() = {}
|
||||
|
||||
val foo16: @Foo @Foo () @Foo () -> Unit get() = {}
|
||||
|
||||
val foo17: @Foo() @Foo () @Foo () -> Unit get() = {}
|
||||
|
||||
val foo18: @Foo()@Foo () @Foo () -> Unit get() = {}
|
||||
|
||||
val foo19: @Foo@Foo () @Foo () -> Unit get() = {}
|
||||
|
||||
val foo20: @Foo@Foo () -> Unit get() = {}
|
||||
|
||||
val foo21: @Foo()@Foo () -> Unit get() = {}
|
||||
|
||||
val foo22: @Foo (x: @Foo () -> Unit) -> Unit get() = {}
|
||||
|
||||
val foo23: @Foo (@Foo () -> Unit) -> Unit get() = {}
|
||||
|
||||
val foo24: @Foo (@Foo () -> Unit, @Foo () -> Unit) -> Unit get() = {x, y -> }
|
||||
|
||||
val foo25: @Foo (x: @Foo Any, @Foo Any) -> Unit get() = {x, y -> }
|
||||
|
||||
val foo26: @Foo suspend () -> Unit = {}
|
||||
Vendored
+46
@@ -0,0 +1,46 @@
|
||||
// !DIAGNOSTICS: -UNUSED_VARIABLE -CAST_NEVER_SUCCEEDS -CANNOT_CHECK_FOR_ERASED -UNCHECKED_CAST -UNUSED_ANONYMOUS_PARAMETER
|
||||
// SKIP_TXT
|
||||
// Issue: KT-31734
|
||||
|
||||
@Target(AnnotationTarget.TYPE, AnnotationTarget.CLASS)
|
||||
@Retention(AnnotationRetention.SOURCE)
|
||||
@Repeatable
|
||||
annotation class Foo
|
||||
|
||||
fun foo1(x: @Foo() () -> Unit) = x as Iterable<@Foo() () -> Unit>?
|
||||
|
||||
fun foo2() = null as @Foo() () -> Unit
|
||||
|
||||
fun foo3(x: Any?) {
|
||||
if (x is (@<!DEBUG_INFO_MISSING_UNRESOLVED!>Foo<!>() () -> Unit)?) {
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
fun foo4(x: Any) = x is @Foo() () -> (() -> Unit?)
|
||||
|
||||
fun foo5(x: Any): @Foo() () -> Unit = x as @Foo () @[Foo Foo ()] @Foo() () -> Unit
|
||||
|
||||
fun foo6() {
|
||||
val x: @Foo() @[Foo Foo()] @Foo() () -> Unit = {}
|
||||
}
|
||||
|
||||
fun foo7() {
|
||||
val x: @Foo() (@Foo() () -> Unit) -> Unit = { x: @Foo() () -> Unit -> }
|
||||
}
|
||||
|
||||
fun foo8(x: @[Foo() ] () -> Unit) = x as Iterable<@Foo() () -> Unit>?
|
||||
|
||||
fun foo9(x: @[Foo()] () -> Unit) = x as Iterable<@Foo() () -> Unit>?
|
||||
|
||||
fun foo10() {
|
||||
val x: @Foo () @Foo () () -> Unit = {}
|
||||
}
|
||||
|
||||
fun foo11() {
|
||||
val x: @Foo @Foo () () -> Unit = {}
|
||||
}
|
||||
|
||||
fun foo12() {
|
||||
val x: @Foo() @Foo () () -> Unit = {}
|
||||
}
|
||||
Reference in New Issue
Block a user