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:
committed by
TeamCityServer
parent
1cff17bb58
commit
0b2943d34c
@@ -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
|
||||
+22
@@ -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 {}
|
||||
+22
@@ -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 {}
|
||||
+35
@@ -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
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user