Annotations on type aliases: typealias is not a "default target".

Add diagnostic test for annotations on type aliases.
This commit is contained in:
Dmitry Petrov
2016-10-10 16:02:17 +03:00
parent 344bb03e8c
commit d2d8f72ffc
13 changed files with 62 additions and 10 deletions
+2 -2
View File
@@ -185,7 +185,7 @@ public interface Comparable</*0*/ in T> {
public abstract operator fun compareTo(/*0*/ other: T): kotlin.Int
}
@kotlin.annotation.Target(allowedTargets = {AnnotationTarget.CLASS, AnnotationTarget.FUNCTION, AnnotationTarget.PROPERTY, AnnotationTarget.ANNOTATION_CLASS, AnnotationTarget.CONSTRUCTOR, AnnotationTarget.PROPERTY_SETTER, AnnotationTarget.PROPERTY_GETTER}) @kotlin.annotation.MustBeDocumented public final annotation class Deprecated : kotlin.Annotation {
@kotlin.annotation.Target(allowedTargets = {AnnotationTarget.CLASS, AnnotationTarget.FUNCTION, AnnotationTarget.PROPERTY, AnnotationTarget.ANNOTATION_CLASS, AnnotationTarget.CONSTRUCTOR, AnnotationTarget.PROPERTY_SETTER, AnnotationTarget.PROPERTY_GETTER, AnnotationTarget.TYPEALIAS}) @kotlin.annotation.MustBeDocumented() public final annotation class Deprecated : kotlin.Annotation {
/*primary*/ public constructor Deprecated(/*0*/ message: kotlin.String, /*1*/ replaceWith: kotlin.ReplaceWith = ..., /*2*/ level: kotlin.DeprecationLevel = ...)
public final val level: kotlin.DeprecationLevel
public final fun <get-level>(): kotlin.DeprecationLevel
@@ -673,7 +673,7 @@ public final class String : kotlin.Comparable<kotlin.String>, kotlin.CharSequenc
}
}
@kotlin.annotation.Target(allowedTargets = {AnnotationTarget.CLASS, AnnotationTarget.ANNOTATION_CLASS, AnnotationTarget.PROPERTY, AnnotationTarget.FIELD, AnnotationTarget.LOCAL_VARIABLE, AnnotationTarget.VALUE_PARAMETER, AnnotationTarget.CONSTRUCTOR, AnnotationTarget.FUNCTION, AnnotationTarget.PROPERTY_GETTER, AnnotationTarget.PROPERTY_SETTER, AnnotationTarget.TYPE, AnnotationTarget.EXPRESSION, AnnotationTarget.FILE}) @kotlin.annotation.Retention(value = AnnotationRetention.SOURCE) public final annotation class Suppress : kotlin.Annotation {
@kotlin.annotation.Target(allowedTargets = {AnnotationTarget.CLASS, AnnotationTarget.ANNOTATION_CLASS, AnnotationTarget.PROPERTY, AnnotationTarget.FIELD, AnnotationTarget.LOCAL_VARIABLE, AnnotationTarget.VALUE_PARAMETER, AnnotationTarget.CONSTRUCTOR, AnnotationTarget.FUNCTION, AnnotationTarget.PROPERTY_GETTER, AnnotationTarget.PROPERTY_SETTER, AnnotationTarget.TYPE, AnnotationTarget.EXPRESSION, AnnotationTarget.FILE, AnnotationTarget.TYPEALIAS}) @kotlin.annotation.Retention(value = AnnotationRetention.SOURCE) public final annotation class Suppress : kotlin.Annotation {
/*primary*/ public constructor Suppress(/*0*/ vararg names: kotlin.String /*kotlin.Array<out kotlin.String>*/)
public final val names: kotlin.Array<out kotlin.String>
public final fun <get-names>(): kotlin.Array<out kotlin.String>
+2 -2
View File
@@ -185,7 +185,7 @@ public interface Comparable</*0*/ in T> {
public abstract operator fun compareTo(/*0*/ other: T): kotlin.Int
}
@kotlin.annotation.Target(allowedTargets = {AnnotationTarget.CLASS, AnnotationTarget.FUNCTION, AnnotationTarget.PROPERTY, AnnotationTarget.ANNOTATION_CLASS, AnnotationTarget.CONSTRUCTOR, AnnotationTarget.PROPERTY_SETTER, AnnotationTarget.PROPERTY_GETTER}) @kotlin.annotation.MustBeDocumented public final annotation class Deprecated : kotlin.Annotation {
@kotlin.annotation.Target(allowedTargets = {AnnotationTarget.CLASS, AnnotationTarget.FUNCTION, AnnotationTarget.PROPERTY, AnnotationTarget.ANNOTATION_CLASS, AnnotationTarget.CONSTRUCTOR, AnnotationTarget.PROPERTY_SETTER, AnnotationTarget.PROPERTY_GETTER, AnnotationTarget.TYPEALIAS}) @kotlin.annotation.MustBeDocumented() public final annotation class Deprecated : kotlin.Annotation {
/*primary*/ public constructor Deprecated(/*0*/ message: kotlin.String, /*1*/ replaceWith: kotlin.ReplaceWith = ..., /*2*/ level: kotlin.DeprecationLevel = ...)
public final val level: kotlin.DeprecationLevel
public final fun <get-level>(): kotlin.DeprecationLevel
@@ -677,7 +677,7 @@ public final class String : kotlin.Comparable<kotlin.String>, kotlin.CharSequenc
}
}
@kotlin.annotation.Target(allowedTargets = {AnnotationTarget.CLASS, AnnotationTarget.ANNOTATION_CLASS, AnnotationTarget.PROPERTY, AnnotationTarget.FIELD, AnnotationTarget.LOCAL_VARIABLE, AnnotationTarget.VALUE_PARAMETER, AnnotationTarget.CONSTRUCTOR, AnnotationTarget.FUNCTION, AnnotationTarget.PROPERTY_GETTER, AnnotationTarget.PROPERTY_SETTER, AnnotationTarget.TYPE, AnnotationTarget.EXPRESSION, AnnotationTarget.FILE}) @kotlin.annotation.Retention(value = AnnotationRetention.SOURCE) public final annotation class Suppress : kotlin.Annotation {
@kotlin.annotation.Target(allowedTargets = {AnnotationTarget.CLASS, AnnotationTarget.ANNOTATION_CLASS, AnnotationTarget.PROPERTY, AnnotationTarget.FIELD, AnnotationTarget.LOCAL_VARIABLE, AnnotationTarget.VALUE_PARAMETER, AnnotationTarget.CONSTRUCTOR, AnnotationTarget.FUNCTION, AnnotationTarget.PROPERTY_GETTER, AnnotationTarget.PROPERTY_SETTER, AnnotationTarget.TYPE, AnnotationTarget.EXPRESSION, AnnotationTarget.FILE, AnnotationTarget.TYPEALIAS}) @kotlin.annotation.Retention(value = AnnotationRetention.SOURCE) public final annotation class Suppress : kotlin.Annotation {
/*primary*/ public constructor Suppress(/*0*/ vararg names: kotlin.String /*kotlin.Array<out kotlin.String>*/)
public final val names: kotlin.Array<out kotlin.String>
public final fun <get-names>(): kotlin.Array<out kotlin.String>
+2 -2
View File
@@ -187,7 +187,7 @@ public interface Comparable</*0*/ in T> {
public abstract operator fun compareTo(/*0*/ other: T): kotlin.Int
}
@kotlin.annotation.Target(allowedTargets = {AnnotationTarget.CLASS, AnnotationTarget.FUNCTION, AnnotationTarget.PROPERTY, AnnotationTarget.ANNOTATION_CLASS, AnnotationTarget.CONSTRUCTOR, AnnotationTarget.PROPERTY_SETTER, AnnotationTarget.PROPERTY_GETTER}) @kotlin.annotation.MustBeDocumented public final annotation class Deprecated : kotlin.Annotation {
@kotlin.annotation.Target(allowedTargets = {AnnotationTarget.CLASS, AnnotationTarget.FUNCTION, AnnotationTarget.PROPERTY, AnnotationTarget.ANNOTATION_CLASS, AnnotationTarget.CONSTRUCTOR, AnnotationTarget.PROPERTY_SETTER, AnnotationTarget.PROPERTY_GETTER, AnnotationTarget.TYPEALIAS}) @kotlin.annotation.MustBeDocumented() public final annotation class Deprecated : kotlin.Annotation {
/*primary*/ public constructor Deprecated(/*0*/ message: kotlin.String, /*1*/ replaceWith: kotlin.ReplaceWith = ..., /*2*/ level: kotlin.DeprecationLevel = ...)
public final val level: kotlin.DeprecationLevel
public final fun <get-level>(): kotlin.DeprecationLevel
@@ -681,7 +681,7 @@ public final class String : kotlin.Comparable<kotlin.String>, kotlin.CharSequenc
}
}
@kotlin.annotation.Target(allowedTargets = {AnnotationTarget.CLASS, AnnotationTarget.ANNOTATION_CLASS, AnnotationTarget.PROPERTY, AnnotationTarget.FIELD, AnnotationTarget.LOCAL_VARIABLE, AnnotationTarget.VALUE_PARAMETER, AnnotationTarget.CONSTRUCTOR, AnnotationTarget.FUNCTION, AnnotationTarget.PROPERTY_GETTER, AnnotationTarget.PROPERTY_SETTER, AnnotationTarget.TYPE, AnnotationTarget.EXPRESSION, AnnotationTarget.FILE}) @kotlin.annotation.Retention(value = AnnotationRetention.SOURCE) public final annotation class Suppress : kotlin.Annotation {
@kotlin.annotation.Target(allowedTargets = {AnnotationTarget.CLASS, AnnotationTarget.ANNOTATION_CLASS, AnnotationTarget.PROPERTY, AnnotationTarget.FIELD, AnnotationTarget.LOCAL_VARIABLE, AnnotationTarget.VALUE_PARAMETER, AnnotationTarget.CONSTRUCTOR, AnnotationTarget.FUNCTION, AnnotationTarget.PROPERTY_GETTER, AnnotationTarget.PROPERTY_SETTER, AnnotationTarget.TYPE, AnnotationTarget.EXPRESSION, AnnotationTarget.FILE, AnnotationTarget.TYPEALIAS}) @kotlin.annotation.Retention(value = AnnotationRetention.SOURCE) public final annotation class Suppress : kotlin.Annotation {
/*primary*/ public constructor Suppress(/*0*/ vararg names: kotlin.String /*kotlin.Array<out kotlin.String>*/)
public final val names: kotlin.Array<out kotlin.String>
public final fun <get-names>(): kotlin.Array<out kotlin.String>
+2 -2
View File
@@ -185,7 +185,7 @@ public interface Comparable</*0*/ in T> {
public abstract operator fun compareTo(/*0*/ other: T): kotlin.Int
}
@kotlin.annotation.Target(allowedTargets = {AnnotationTarget.CLASS, AnnotationTarget.FUNCTION, AnnotationTarget.PROPERTY, AnnotationTarget.ANNOTATION_CLASS, AnnotationTarget.CONSTRUCTOR, AnnotationTarget.PROPERTY_SETTER, AnnotationTarget.PROPERTY_GETTER}) @kotlin.annotation.MustBeDocumented public final annotation class Deprecated : kotlin.Annotation {
@kotlin.annotation.Target(allowedTargets = {AnnotationTarget.CLASS, AnnotationTarget.FUNCTION, AnnotationTarget.PROPERTY, AnnotationTarget.ANNOTATION_CLASS, AnnotationTarget.CONSTRUCTOR, AnnotationTarget.PROPERTY_SETTER, AnnotationTarget.PROPERTY_GETTER, AnnotationTarget.TYPEALIAS}) @kotlin.annotation.MustBeDocumented() public final annotation class Deprecated : kotlin.Annotation {
/*primary*/ public constructor Deprecated(/*0*/ message: kotlin.String, /*1*/ replaceWith: kotlin.ReplaceWith = ..., /*2*/ level: kotlin.DeprecationLevel = ...)
public final val level: kotlin.DeprecationLevel
public final fun <get-level>(): kotlin.DeprecationLevel
@@ -677,7 +677,7 @@ public final class String : kotlin.Comparable<kotlin.String>, kotlin.CharSequenc
}
}
@kotlin.annotation.Target(allowedTargets = {AnnotationTarget.CLASS, AnnotationTarget.ANNOTATION_CLASS, AnnotationTarget.PROPERTY, AnnotationTarget.FIELD, AnnotationTarget.LOCAL_VARIABLE, AnnotationTarget.VALUE_PARAMETER, AnnotationTarget.CONSTRUCTOR, AnnotationTarget.FUNCTION, AnnotationTarget.PROPERTY_GETTER, AnnotationTarget.PROPERTY_SETTER, AnnotationTarget.TYPE, AnnotationTarget.EXPRESSION, AnnotationTarget.FILE}) @kotlin.annotation.Retention(value = AnnotationRetention.SOURCE) public final annotation class Suppress : kotlin.Annotation {
@kotlin.annotation.Target(allowedTargets = {AnnotationTarget.CLASS, AnnotationTarget.ANNOTATION_CLASS, AnnotationTarget.PROPERTY, AnnotationTarget.FIELD, AnnotationTarget.LOCAL_VARIABLE, AnnotationTarget.VALUE_PARAMETER, AnnotationTarget.CONSTRUCTOR, AnnotationTarget.FUNCTION, AnnotationTarget.PROPERTY_GETTER, AnnotationTarget.PROPERTY_SETTER, AnnotationTarget.TYPE, AnnotationTarget.EXPRESSION, AnnotationTarget.FILE, AnnotationTarget.TYPEALIAS}) @kotlin.annotation.Retention(value = AnnotationRetention.SOURCE) public final annotation class Suppress : kotlin.Annotation {
/*primary*/ public constructor Suppress(/*0*/ vararg names: kotlin.String /*kotlin.Array<out kotlin.String>*/)
public final val names: kotlin.Array<out kotlin.String>
public final fun <get-names>(): kotlin.Array<out kotlin.String>
@@ -0,0 +1,15 @@
// WITH_RUNTIME
import kotlin.annotation.AnnotationTarget.*
annotation class NoTarget
@Target(CLASS)
annotation class IrrelevantTarget
@Target(TYPEALIAS)
annotation class TypealiasTarget
<!WRONG_ANNOTATION_TARGET!>@NoTarget<!>
<!WRONG_ANNOTATION_TARGET!>@IrrelevantTarget<!>
@TypealiasTarget
typealias Test = String
@@ -0,0 +1,23 @@
package
@kotlin.annotation.Target(allowedTargets = {AnnotationTarget.CLASS}) public final annotation class IrrelevantTarget : kotlin.Annotation {
public constructor IrrelevantTarget()
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 final annotation class NoTarget : kotlin.Annotation {
public constructor NoTarget()
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.TYPEALIAS}) public final annotation class TypealiasTarget : kotlin.Annotation {
public constructor TypealiasTarget()
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
}
@NoTarget() @IrrelevantTarget() @TypealiasTarget() public typealias Test = kotlin.String
@@ -1,6 +1,7 @@
//ALLOW_AST_ACCESS
package test
@Target(AnnotationTarget.TYPEALIAS)
annotation class Ann(val value: String = "")
@Ann()
@@ -1,6 +1,6 @@
package test
public final annotation class Ann : kotlin.Annotation {
@kotlin.annotation.Target(allowedTargets = {AnnotationTarget.TYPEALIAS}) public final annotation class Ann : kotlin.Annotation {
/*primary*/ public constructor Ann(/*0*/ value: kotlin.String = ...)
public final val value: kotlin.String
public final fun <get-value>(): kotlin.String
@@ -20520,6 +20520,12 @@ public class DiagnosticsTestGenerated extends AbstractDiagnosticsTest {
KotlinTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("compiler/testData/diagnostics/tests/typealias"), Pattern.compile("^(.+)\\.kt$"), true);
}
@TestMetadata("annotationsOnTypeAliases.kt")
public void testAnnotationsOnTypeAliases() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/diagnostics/tests/typealias/annotationsOnTypeAliases.kt");
doTest(fileName);
}
@TestMetadata("boundViolationInTypeAliasConstructor.kt")
public void testBoundViolationInTypeAliasConstructor() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/diagnostics/tests/typealias/boundViolationInTypeAliasConstructor.kt");
@@ -38,7 +38,7 @@ enum class KotlinTarget(val description: String, val isDefault: Boolean = true)
TYPE("type usage", false),
EXPRESSION("expression", false), // includes FUNCTION_LITERAL, OBJECT_LITERAL
FILE("file", false),
TYPEALIAS("typealias"), // TODO support typealias as annotation target
TYPEALIAS("typealias", false),
TYPE_PROJECTION("type projection", false),
STAR_PROJECTION("star projection", false),
@@ -1,6 +1,7 @@
package test
import dependency.*
import kotlin.annotation.AnnotationTarget
class Outer<E, F> {
inner class Inner<G> {
@@ -8,7 +9,9 @@ class Outer<E, F> {
}
}
@Target(AnnotationTarget.TYPEALIAS)
annotation class Ann(val value: String)
class TypeAliases {
typealias B = (A) -> Unit
@@ -1,6 +1,7 @@
package test
import dependency.*
import kotlin.annotation.AnnotationTarget
class Outer<E, F> {
inner class Inner<G> {
@@ -8,7 +9,9 @@ class Outer<E, F> {
}
}
@Target(AnnotationTarget.TYPEALIAS)
annotation class Ann
class TypeAliases {
typealias B = (A) -> Unit
@@ -88,6 +88,7 @@ public final class kotlin/annotation/AnnotationTarget : java/lang/Enum {
public static final field PROPERTY_GETTER Lkotlin/annotation/AnnotationTarget;
public static final field PROPERTY_SETTER Lkotlin/annotation/AnnotationTarget;
public static final field TYPE Lkotlin/annotation/AnnotationTarget;
public static final field TYPEALIAS Lkotlin/annotation/AnnotationTarget;
public static final field TYPE_PARAMETER Lkotlin/annotation/AnnotationTarget;
public static final field VALUE_PARAMETER Lkotlin/annotation/AnnotationTarget;
public static fun valueOf (Ljava/lang/String;)Lkotlin/annotation/AnnotationTarget;