Generate type annotations on class type parameters bounds
#KT-13228 #KT-46539 Fixed
This commit is contained in:
committed by
TeamCityServer
parent
f574f89f78
commit
cd7841ceed
@@ -0,0 +1,79 @@
|
||||
// IGNORE_BACKEND: JVM
|
||||
// KOTLIN_CONFIGURATION_FLAGS: +JVM.EMIT_JVM_TYPE_ANNOTATIONS
|
||||
// RENDER_ANNOTATIONS
|
||||
// TARGET_BACKEND: JVM
|
||||
// JVM_TARGET: 1.8
|
||||
package foo
|
||||
|
||||
@Target(AnnotationTarget.TYPE)
|
||||
annotation class TypeAnn(val name: String)
|
||||
|
||||
@Target( AnnotationTarget.TYPE_PARAMETER)
|
||||
annotation class TypeParameterAnn(val name: String)
|
||||
|
||||
@Target(AnnotationTarget.TYPE_PARAMETER)
|
||||
@Retention(AnnotationRetention.BINARY)
|
||||
annotation class TypeParameterAnnBinary
|
||||
|
||||
@Target(AnnotationTarget.TYPE_PARAMETER)
|
||||
@Retention(AnnotationRetention.SOURCE)
|
||||
annotation class TypeParameterAnnSource
|
||||
|
||||
interface SimpleInterface
|
||||
interface SimpleInterface2
|
||||
open class SimpleClass
|
||||
|
||||
interface GenericInterface<Z>
|
||||
open class GenericClass<Z>
|
||||
|
||||
@Suppress("UNSUPPORTED")
|
||||
class Simple<@TypeParameterAnn("T") @TypeParameterAnnBinary @TypeParameterAnnSource T> {
|
||||
fun test(p: T) : T {
|
||||
return p
|
||||
}
|
||||
}
|
||||
|
||||
class TypeBound<Y, T: @foo.TypeAnn("Y") Y> {
|
||||
fun test(p: T) : T {
|
||||
return p
|
||||
}
|
||||
}
|
||||
|
||||
class InterfaceBound<T: @foo.TypeAnn("Interface") SimpleInterface> {
|
||||
fun test(p: T) : T {
|
||||
return p
|
||||
}
|
||||
}
|
||||
|
||||
class ClassBound<T: @foo.TypeAnn("Class") SimpleClass> {
|
||||
fun test(p: T) : T {
|
||||
return p
|
||||
}
|
||||
}
|
||||
|
||||
class ClassBoundGeneric<T: @foo.TypeAnn("Class") GenericClass<@foo.TypeAnn("SimpleClass") SimpleClass>> {
|
||||
fun test(p: T) : T {
|
||||
return p
|
||||
}
|
||||
}
|
||||
|
||||
class InterfaceBoundGeneric<T: @foo.TypeAnn("Interface") GenericInterface<@foo.TypeAnn("SimpleInterface") SimpleInterface>> {
|
||||
fun test(p: T) : T {
|
||||
return p
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
class ClassInterfaceBound<T: @foo.TypeAnn("Class") SimpleClass> where T : @foo.TypeAnn("Interface") SimpleInterface, T : @foo.TypeAnn("Interface2") SimpleInterface2 {
|
||||
fun test(p: T) : T {
|
||||
return p
|
||||
}
|
||||
}
|
||||
|
||||
class InterfaceClassBound<T: @foo.TypeAnn("Interface") SimpleInterface > where T : @foo.TypeAnn("Class") SimpleClass, T : @foo.TypeAnn("Interface2") SimpleInterface2 {
|
||||
fun test(p: T) : T {
|
||||
return p
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,133 @@
|
||||
<T:Lfoo/SimpleClass;>Ljava/lang/Object;
|
||||
public final class foo/ClassBound : java/lang/Object {
|
||||
@Lfoo/TypeAnn;([name="Class"]) : CLASS_TYPE_PARAMETER_BOUND 0, 0, null
|
||||
|
||||
public void <init>()
|
||||
|
||||
(TT;)TT;
|
||||
public final foo.SimpleClass test(foo.SimpleClass p)
|
||||
@Lorg/jetbrains/annotations/NotNull;([]) // invisible
|
||||
@Lorg/jetbrains/annotations/NotNull;([]) // invisible, parameter 0
|
||||
}
|
||||
|
||||
<T:Lfoo/GenericClass<Lfoo/SimpleClass;>;>Ljava/lang/Object;
|
||||
public final class foo/ClassBoundGeneric : java/lang/Object {
|
||||
@Lfoo/TypeAnn;([name="Class"]) : CLASS_TYPE_PARAMETER_BOUND 0, 0, null
|
||||
@Lfoo/TypeAnn;([name="SimpleClass"]) : CLASS_TYPE_PARAMETER_BOUND 0, 0, 0;
|
||||
|
||||
public void <init>()
|
||||
|
||||
(TT;)TT;
|
||||
public final foo.GenericClass test(foo.GenericClass p)
|
||||
@Lorg/jetbrains/annotations/NotNull;([]) // invisible
|
||||
@Lorg/jetbrains/annotations/NotNull;([]) // invisible, parameter 0
|
||||
}
|
||||
|
||||
<T:Lfoo/SimpleClass;:Lfoo/SimpleInterface;:Lfoo/SimpleInterface2;>Ljava/lang/Object;
|
||||
public final class foo/ClassInterfaceBound : java/lang/Object {
|
||||
@Lfoo/TypeAnn;([name="Class"]) : CLASS_TYPE_PARAMETER_BOUND 0, 0, null
|
||||
@Lfoo/TypeAnn;([name="Interface"]) : CLASS_TYPE_PARAMETER_BOUND 0, 1, null
|
||||
@Lfoo/TypeAnn;([name="Interface2"]) : CLASS_TYPE_PARAMETER_BOUND 0, 2, null
|
||||
|
||||
public void <init>()
|
||||
|
||||
(TT;)TT;
|
||||
public final foo.SimpleClass test(foo.SimpleClass p)
|
||||
@Lorg/jetbrains/annotations/NotNull;([]) // invisible
|
||||
@Lorg/jetbrains/annotations/NotNull;([]) // invisible, parameter 0
|
||||
}
|
||||
|
||||
<Z:Ljava/lang/Object;>Ljava/lang/Object;
|
||||
public class foo/GenericClass : java/lang/Object {
|
||||
public void <init>()
|
||||
}
|
||||
|
||||
<Z:Ljava/lang/Object;>Ljava/lang/Object;
|
||||
public abstract interface foo/GenericInterface : java/lang/Object {
|
||||
|
||||
}
|
||||
|
||||
<T::Lfoo/SimpleInterface;>Ljava/lang/Object;
|
||||
public final class foo/InterfaceBound : java/lang/Object {
|
||||
@Lfoo/TypeAnn;([name="Interface"]) : CLASS_TYPE_PARAMETER_BOUND 0, 1, null
|
||||
|
||||
public void <init>()
|
||||
|
||||
(TT;)TT;
|
||||
public final foo.SimpleInterface test(foo.SimpleInterface p)
|
||||
@Lorg/jetbrains/annotations/NotNull;([]) // invisible
|
||||
@Lorg/jetbrains/annotations/NotNull;([]) // invisible, parameter 0
|
||||
}
|
||||
|
||||
<T::Lfoo/GenericInterface<Lfoo/SimpleInterface;>;>Ljava/lang/Object;
|
||||
public final class foo/InterfaceBoundGeneric : java/lang/Object {
|
||||
@Lfoo/TypeAnn;([name="Interface"]) : CLASS_TYPE_PARAMETER_BOUND 0, 1, null
|
||||
@Lfoo/TypeAnn;([name="SimpleInterface"]) : CLASS_TYPE_PARAMETER_BOUND 0, 1, 0;
|
||||
|
||||
public void <init>()
|
||||
|
||||
(TT;)TT;
|
||||
public final foo.GenericInterface test(foo.GenericInterface p)
|
||||
@Lorg/jetbrains/annotations/NotNull;([]) // invisible
|
||||
@Lorg/jetbrains/annotations/NotNull;([]) // invisible, parameter 0
|
||||
}
|
||||
|
||||
<T:Lfoo/SimpleClass;:Lfoo/SimpleInterface;:Lfoo/SimpleInterface2;>Ljava/lang/Object;
|
||||
public final class foo/InterfaceClassBound : java/lang/Object {
|
||||
@Lfoo/TypeAnn;([name="Interface"]) : CLASS_TYPE_PARAMETER_BOUND 0, 1, null
|
||||
@Lfoo/TypeAnn;([name="Class"]) : CLASS_TYPE_PARAMETER_BOUND 0, 0, null
|
||||
@Lfoo/TypeAnn;([name="Interface2"]) : CLASS_TYPE_PARAMETER_BOUND 0, 2, null
|
||||
|
||||
public void <init>()
|
||||
|
||||
(TT;)TT;
|
||||
public final foo.SimpleClass test(foo.SimpleClass p)
|
||||
@Lorg/jetbrains/annotations/NotNull;([]) // invisible
|
||||
@Lorg/jetbrains/annotations/NotNull;([]) // invisible, parameter 0
|
||||
}
|
||||
|
||||
<T:Ljava/lang/Object;>Ljava/lang/Object;
|
||||
public final class foo/Simple : java/lang/Object {
|
||||
public void <init>()
|
||||
|
||||
(TT;)TT;
|
||||
public final java.lang.Object test(java.lang.Object p)
|
||||
}
|
||||
|
||||
public class foo/SimpleClass : java/lang/Object {
|
||||
public void <init>()
|
||||
}
|
||||
|
||||
public abstract interface foo/SimpleInterface : java/lang/Object {
|
||||
|
||||
}
|
||||
|
||||
public abstract interface foo/SimpleInterface2 : java/lang/Object {
|
||||
|
||||
}
|
||||
|
||||
public abstract interface foo/TypeAnn : java/lang/Object, java/lang/annotation/Annotation {
|
||||
public abstract java.lang.String name()
|
||||
}
|
||||
|
||||
<Y:Ljava/lang/Object;T::TY;>Ljava/lang/Object;
|
||||
public final class foo/TypeBound : java/lang/Object {
|
||||
@Lfoo/TypeAnn;([name="Y"]) : CLASS_TYPE_PARAMETER_BOUND 1, 0, null
|
||||
|
||||
public void <init>()
|
||||
|
||||
(TT;)TT;
|
||||
public final java.lang.Object test(java.lang.Object p)
|
||||
}
|
||||
|
||||
public abstract interface foo/TypeParameterAnn : java/lang/Object, java/lang/annotation/Annotation {
|
||||
public abstract java.lang.String name()
|
||||
}
|
||||
|
||||
public abstract interface foo/TypeParameterAnnBinary : java/lang/Object, java/lang/annotation/Annotation {
|
||||
|
||||
}
|
||||
|
||||
public abstract interface foo/TypeParameterAnnSource : java/lang/Object, java/lang/annotation/Annotation {
|
||||
|
||||
}
|
||||
@@ -56,3 +56,5 @@ class Kotlin {
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
class WithBound<T: Bar<Outer.Inner<@Ann Outer>>>()
|
||||
@@ -73,4 +73,9 @@ public final class foo/Outer$Inner : java/lang/Object {
|
||||
|
||||
public final class foo/Outer : java/lang/Object {
|
||||
public void <init>()
|
||||
}
|
||||
|
||||
<T:Lfoo/Bar<Lfoo/Outer$Inner<Lfoo/Outer;>;>;>Ljava/lang/Object;
|
||||
public final class foo/WithBound : java/lang/Object {
|
||||
public void <init>()
|
||||
}
|
||||
Reference in New Issue
Block a user