Prohibit using annotations without TYPE target in several type positions

#KT-8325 Fixed
#KT-19455 Fixed
#KT-25876 Fixed
#KT-28449 Fixed
This commit is contained in:
Dmitriy Novozhilov
2021-04-08 16:07:45 +03:00
committed by TeamCityServer
parent 1cff17bb58
commit 0b2943d34c
19 changed files with 328 additions and 12 deletions
@@ -0,0 +1,14 @@
// FIR_IDENTICAL
// !LANGUAGE: +ProperCheckAnnotationsTargetInTypeUsePositions
// ISSUE: KT-19455
package test
@Target(AnnotationTarget.TYPE)
annotation class TypeAnn
open class TypeToken<T>
object Test : TypeToken<@TypeAnn String>() // (1)
val test = object : TypeToken<@TypeAnn String>() {} // (2)
@@ -0,0 +1,26 @@
package
package test {
public val test: test.TypeToken<@test.TypeAnn kotlin.String>
public object Test : test.TypeToken<@test.TypeAnn kotlin.String> {
private constructor Test()
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.TYPE}) public final annotation class TypeAnn : kotlin.Annotation {
public constructor TypeAnn()
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
}
public open class TypeToken</*0*/ T> {
public constructor TypeToken</*0*/ T>()
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
}
}
@@ -0,0 +1,13 @@
// !LANGUAGE: +ProperCheckAnnotationsTargetInTypeUsePositions
// ISSUE: KT-25876
@Target(AnnotationTarget.TYPE)
annotation class Anno(val value: String)
fun foo(x: String): @Anno(Lorem, ipsum::class, "dolor", sit-amet) String { // OK
return x
}
abstract class Foo : @Anno(o_O) Throwable() // OK
abstract class Bar<T : @Anno(O_o) Any> // OK
@@ -0,0 +1,13 @@
// !LANGUAGE: +ProperCheckAnnotationsTargetInTypeUsePositions
// ISSUE: KT-25876
@Target(AnnotationTarget.TYPE)
annotation class Anno(val value: String)
fun foo(x: String): @Anno(<!UNRESOLVED_REFERENCE!>Lorem<!>, <!TOO_MANY_ARGUMENTS!><!UNRESOLVED_REFERENCE!>ipsum<!>::class<!>, <!TOO_MANY_ARGUMENTS!>"dolor"<!>, <!TOO_MANY_ARGUMENTS!><!UNRESOLVED_REFERENCE!>sit<!><!DEBUG_INFO_MISSING_UNRESOLVED!>-<!><!UNRESOLVED_REFERENCE!>amet<!><!>) String { // OK
return x
}
abstract class Foo : @Anno(<!UNRESOLVED_REFERENCE!>o_O<!>) Throwable() // OK
abstract class Bar<T : @Anno(<!UNRESOLVED_REFERENCE!>O_o<!>) Any> // OK
@@ -0,0 +1,37 @@
package
public fun foo(/*0*/ x: kotlin.String): @Anno kotlin.String
@kotlin.annotation.Target(allowedTargets = {AnnotationTarget.TYPE}) public final annotation class Anno : kotlin.Annotation {
public constructor Anno(/*0*/ value: kotlin.String)
public final val value: 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
}
public abstract class Bar</*0*/ T : @Anno kotlin.Any> {
public constructor Bar</*0*/ T : @Anno kotlin.Any>()
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
}
public abstract class Foo : @Anno kotlin.Throwable {
public constructor Foo()
public open override /*1*/ /*fake_override*/ val cause: kotlin.Throwable?
public open override /*1*/ /*fake_override*/ val message: kotlin.String?
public final override /*1*/ /*fake_override*/ fun addSuppressed(/*0*/ exception: kotlin.Throwable!): kotlin.Unit
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun fillInStackTrace(): kotlin.Throwable!
public open override /*1*/ /*fake_override*/ fun getLocalizedMessage(): kotlin.String!
public open override /*1*/ /*fake_override*/ fun getStackTrace(): kotlin.Array<(out) java.lang.StackTraceElement!>!
public final override /*1*/ /*fake_override*/ fun getSuppressed(): kotlin.Array<(out) kotlin.Throwable!>!
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun initCause(/*0*/ cause: kotlin.Throwable!): kotlin.Throwable!
public open override /*1*/ /*fake_override*/ fun printStackTrace(): kotlin.Unit
public open override /*1*/ /*fake_override*/ fun printStackTrace(/*0*/ s: java.io.PrintStream!): kotlin.Unit
public open override /*1*/ /*fake_override*/ fun printStackTrace(/*0*/ s: java.io.PrintWriter!): kotlin.Unit
public open override /*1*/ /*fake_override*/ fun setStackTrace(/*0*/ stackTrace: kotlin.Array<(out) java.lang.StackTraceElement!>!): kotlin.Unit
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
@@ -0,0 +1,6 @@
// !LANGUAGE: +ProperCheckAnnotationsTargetInTypeUsePositions
// ISSUE: KT-8325
fun foo() {
object : @<!UNRESOLVED_REFERENCE, UNRESOLVED_REFERENCE!>__UNRESOLVED__<!> Any() {}
}
@@ -0,0 +1,6 @@
// !LANGUAGE: +ProperCheckAnnotationsTargetInTypeUsePositions
// ISSUE: KT-8325
fun foo() {
object : @<!UNRESOLVED_REFERENCE!>__UNRESOLVED__<!> Any() {}
}
@@ -0,0 +1,3 @@
package
public fun foo(): kotlin.Unit
@@ -0,0 +1,22 @@
// !LANGUAGE: +ProperCheckAnnotationsTargetInTypeUsePositions
// ISSUE: KT-28449
@Target(AnnotationTarget.PROPERTY_GETTER)
annotation class Ann
abstract class Foo : @Ann Any()
abstract class Bar<T : @Ann Any>
fun test_1(a: Any) {
if (a is @Ann String) return
}
open class TypeToken<T>
val test_2 = object : TypeToken<@Ann String>() {}
fun test_3(a: Any) {
a as @Ann Int
}
fun <T> test_4() where T : @Ann Any, T : @Ann CharSequence {}
@@ -0,0 +1,22 @@
// !LANGUAGE: +ProperCheckAnnotationsTargetInTypeUsePositions
// ISSUE: KT-28449
@Target(AnnotationTarget.PROPERTY_GETTER)
annotation class Ann
abstract class Foo : <!WRONG_ANNOTATION_TARGET!>@Ann<!> Any()
abstract class Bar<T : <!WRONG_ANNOTATION_TARGET!>@Ann<!> Any>
fun test_1(a: Any) {
if (a is <!WRONG_ANNOTATION_TARGET!>@Ann<!> String) return
}
open class TypeToken<T>
val test_2 = object : TypeToken<<!WRONG_ANNOTATION_TARGET!>@Ann<!> String>() {}
fun test_3(a: Any) {
a as <!WRONG_ANNOTATION_TARGET!>@Ann<!> Int
}
fun <T> test_4() where T : <!WRONG_ANNOTATION_TARGET!>@Ann<!> Any, T : <!WRONG_ANNOTATION_TARGET!>@Ann<!> CharSequence {}
@@ -0,0 +1,35 @@
package
public val test_2: TypeToken<@Ann kotlin.String>
public fun test_1(/*0*/ a: kotlin.Any): kotlin.Unit
public fun test_3(/*0*/ a: kotlin.Any): kotlin.Unit
public fun </*0*/ T : @Ann kotlin.Any> test_4(): kotlin.Unit where T : @Ann kotlin.CharSequence
@kotlin.annotation.Target(allowedTargets = {AnnotationTarget.PROPERTY_GETTER}) public final annotation class Ann : kotlin.Annotation {
public constructor Ann()
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
}
public abstract class Bar</*0*/ T : @Ann kotlin.Any> {
public constructor Bar</*0*/ T : @Ann kotlin.Any>()
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
}
public abstract class Foo {
public constructor Foo()
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
}
public open class TypeToken</*0*/ T> {
public constructor TypeToken</*0*/ T>()
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
}