Frontend: Allow using KClass as annotation parameter type
This commit is contained in:
@@ -284,7 +284,16 @@ public abstract class AnnotationCodegen {
|
||||
|
||||
@Override
|
||||
public Void visitJavaClassValue(JavaClassValue value, Void data) {
|
||||
annotationVisitor.visit(name, typeMapper.mapType(value.getValue()));
|
||||
return visitClassOfType(value.getValue());
|
||||
}
|
||||
|
||||
@Override
|
||||
public Void visitKClassValue(KClassValue value, Void data) {
|
||||
return visitClassOfType(value.getValue());
|
||||
}
|
||||
|
||||
private Void visitClassOfType(@NotNull JetType type) {
|
||||
annotationVisitor.visit(name, typeMapper.mapType(type));
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
@@ -79,6 +79,7 @@ public class CompileTimeConstantUtils {
|
||||
if (isEnumClass(typeDescriptor) ||
|
||||
isAnnotationClass(typeDescriptor) ||
|
||||
isJavaLangClass(typeDescriptor) ||
|
||||
KotlinBuiltIns.isKClass(typeDescriptor) ||
|
||||
KotlinBuiltIns.isPrimitiveArray(parameterType) ||
|
||||
KotlinBuiltIns.isPrimitiveType(parameterType) ||
|
||||
builtIns.getStringType().equals(parameterType)) {
|
||||
@@ -97,6 +98,7 @@ public class CompileTimeConstantUtils {
|
||||
return isEnumClass(arrayTypeDescriptor) ||
|
||||
isAnnotationClass(arrayTypeDescriptor) ||
|
||||
isJavaLangClass(arrayTypeDescriptor) ||
|
||||
KotlinBuiltIns.isKClass(arrayTypeDescriptor) ||
|
||||
builtIns.getStringType().equals(arrayType);
|
||||
}
|
||||
}
|
||||
|
||||
+6
@@ -395,6 +395,12 @@ public class ConstantExpressionEvaluator private (val trace: BindingTrace) : Jet
|
||||
return null
|
||||
}
|
||||
|
||||
override fun visitClassLiteralExpression(expression: JetClassLiteralExpression, expectedType: JetType?): CompileTimeConstant<*>? {
|
||||
val jetType = trace.get(BindingContext.EXPRESSION_TYPE, expression)
|
||||
if (jetType.isError()) return null
|
||||
return KClassValue(jetType)
|
||||
}
|
||||
|
||||
private fun resolveArguments(valueArguments: List<ValueArgument>, expectedType: JetType): List<CompileTimeConstant<*>> {
|
||||
val constants = arrayListOf<CompileTimeConstant<*>>()
|
||||
for (argument in valueArguments) {
|
||||
|
||||
@@ -104,6 +104,11 @@ public object AnnotationSerializer {
|
||||
throw UnsupportedOperationException("Class literal annotation arguments are not yet supported: $value")
|
||||
}
|
||||
|
||||
override fun visitKClassValue(value: KClassValue?, data: Unit?) {
|
||||
// TODO: support class literals
|
||||
throw UnsupportedOperationException("Class literal annotation arguments are not yet supported: $value")
|
||||
}
|
||||
|
||||
override fun visitLongValue(value: LongValue, data: Unit) {
|
||||
setType(Type.LONG)
|
||||
setIntValue(value.getValue())
|
||||
|
||||
+27
@@ -0,0 +1,27 @@
|
||||
import kotlin.reflect.KClass
|
||||
|
||||
open class A
|
||||
class B1 : A()
|
||||
class B2 : A()
|
||||
|
||||
annotation class Ann1(val arg: Array<KClass<in A>>)
|
||||
|
||||
Ann1(array(A::class))
|
||||
class MyClass1
|
||||
|
||||
Ann1(array(Any::class))
|
||||
class MyClass1a
|
||||
|
||||
Ann1(<!TYPE_INFERENCE_EXPECTED_TYPE_MISMATCH!>array<!>(B1::class))
|
||||
class MyClass2
|
||||
|
||||
annotation class Ann2(val arg: Array<KClass<in B1>>)
|
||||
|
||||
Ann2(array(A::class))
|
||||
class MyClass3
|
||||
|
||||
Ann2(array(B1::class))
|
||||
class MyClass4
|
||||
|
||||
Ann2(<!TYPE_INFERENCE_EXPECTED_TYPE_MISMATCH!>array<!>(B2::class))
|
||||
class MyClass5
|
||||
+80
@@ -0,0 +1,80 @@
|
||||
package
|
||||
|
||||
internal open class A {
|
||||
public constructor A()
|
||||
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
|
||||
}
|
||||
|
||||
internal final annotation class Ann1 : kotlin.Annotation {
|
||||
public constructor Ann1(/*0*/ arg: kotlin.Array<kotlin.reflect.KClass<in A>>)
|
||||
internal final val arg: kotlin.Array<kotlin.reflect.KClass<in A>>
|
||||
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
|
||||
}
|
||||
|
||||
internal final annotation class Ann2 : kotlin.Annotation {
|
||||
public constructor Ann2(/*0*/ arg: kotlin.Array<kotlin.reflect.KClass<in B1>>)
|
||||
internal final val arg: kotlin.Array<kotlin.reflect.KClass<in B1>>
|
||||
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
|
||||
}
|
||||
|
||||
internal final class B1 : A {
|
||||
public constructor B1()
|
||||
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
|
||||
}
|
||||
|
||||
internal final class B2 : A {
|
||||
public constructor B2()
|
||||
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
|
||||
}
|
||||
|
||||
Ann1(arg = {A::class}: kotlin.Array<kotlin.reflect.KClass<in A>>) internal final class MyClass1 {
|
||||
public constructor MyClass1()
|
||||
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
|
||||
}
|
||||
|
||||
Ann1(arg = {kotlin.Any::class}: kotlin.Array<kotlin.reflect.KClass<in A>>) internal final class MyClass1a {
|
||||
public constructor MyClass1a()
|
||||
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
|
||||
}
|
||||
|
||||
Ann1(arg = {B1::class}: kotlin.Array<???>) internal final class MyClass2 {
|
||||
public constructor MyClass2()
|
||||
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
|
||||
}
|
||||
|
||||
Ann2(arg = {A::class}: kotlin.Array<kotlin.reflect.KClass<in B1>>) internal final class MyClass3 {
|
||||
public constructor MyClass3()
|
||||
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
|
||||
}
|
||||
|
||||
Ann2(arg = {B1::class}: kotlin.Array<kotlin.reflect.KClass<in B1>>) internal final class MyClass4 {
|
||||
public constructor MyClass4()
|
||||
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
|
||||
}
|
||||
|
||||
Ann2(arg = {B2::class}: kotlin.Array<???>) internal final class MyClass5 {
|
||||
public constructor MyClass5()
|
||||
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
|
||||
}
|
||||
+27
@@ -0,0 +1,27 @@
|
||||
import kotlin.reflect.KClass
|
||||
|
||||
open class A
|
||||
class B1 : A()
|
||||
class B2 : A()
|
||||
|
||||
annotation class Ann1(val arg: Array<KClass<out A>>)
|
||||
|
||||
Ann1(array(A::class))
|
||||
class MyClass1
|
||||
|
||||
Ann1(<!TYPE_INFERENCE_EXPECTED_TYPE_MISMATCH!>array<!>(Any::class))
|
||||
class MyClass1a
|
||||
|
||||
Ann1(array(B1::class))
|
||||
class MyClass2
|
||||
|
||||
annotation class Ann2(val arg: Array<KClass<out B1>>)
|
||||
|
||||
Ann2(<!TYPE_INFERENCE_EXPECTED_TYPE_MISMATCH!>array<!>(A::class))
|
||||
class MyClass3
|
||||
|
||||
Ann2(array(B1::class))
|
||||
class MyClass4
|
||||
|
||||
Ann2(<!TYPE_INFERENCE_EXPECTED_TYPE_MISMATCH!>array<!>(B2::class))
|
||||
class MyClass5
|
||||
+80
@@ -0,0 +1,80 @@
|
||||
package
|
||||
|
||||
internal open class A {
|
||||
public constructor A()
|
||||
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
|
||||
}
|
||||
|
||||
internal final annotation class Ann1 : kotlin.Annotation {
|
||||
public constructor Ann1(/*0*/ arg: kotlin.Array<kotlin.reflect.KClass<out A>>)
|
||||
internal final val arg: kotlin.Array<kotlin.reflect.KClass<out A>>
|
||||
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
|
||||
}
|
||||
|
||||
internal final annotation class Ann2 : kotlin.Annotation {
|
||||
public constructor Ann2(/*0*/ arg: kotlin.Array<kotlin.reflect.KClass<out B1>>)
|
||||
internal final val arg: kotlin.Array<kotlin.reflect.KClass<out B1>>
|
||||
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
|
||||
}
|
||||
|
||||
internal final class B1 : A {
|
||||
public constructor B1()
|
||||
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
|
||||
}
|
||||
|
||||
internal final class B2 : A {
|
||||
public constructor B2()
|
||||
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
|
||||
}
|
||||
|
||||
Ann1(arg = {A::class}: kotlin.Array<kotlin.reflect.KClass<out A>>) internal final class MyClass1 {
|
||||
public constructor MyClass1()
|
||||
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
|
||||
}
|
||||
|
||||
Ann1(arg = {kotlin.Any::class}: kotlin.Array<???>) internal final class MyClass1a {
|
||||
public constructor MyClass1a()
|
||||
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
|
||||
}
|
||||
|
||||
Ann1(arg = {B1::class}: kotlin.Array<kotlin.reflect.KClass<out A>>) internal final class MyClass2 {
|
||||
public constructor MyClass2()
|
||||
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
|
||||
}
|
||||
|
||||
Ann2(arg = {A::class}: kotlin.Array<???>) internal final class MyClass3 {
|
||||
public constructor MyClass3()
|
||||
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
|
||||
}
|
||||
|
||||
Ann2(arg = {B1::class}: kotlin.Array<kotlin.reflect.KClass<out B1>>) internal final class MyClass4 {
|
||||
public constructor MyClass4()
|
||||
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
|
||||
}
|
||||
|
||||
Ann2(arg = {B2::class}: kotlin.Array<???>) internal final class MyClass5 {
|
||||
public constructor MyClass5()
|
||||
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
|
||||
}
|
||||
+20
@@ -0,0 +1,20 @@
|
||||
import kotlin.reflect.KClass
|
||||
|
||||
annotation class Ann1(val arg: KClass<*>)
|
||||
annotation class Ann2(vararg val arg: KClass<*>)
|
||||
annotation class Ann3(val arg: Array<KClass<*>>)
|
||||
|
||||
class A1
|
||||
class A2
|
||||
|
||||
Ann1(A1::class)
|
||||
Ann2(A1::class, A2::class)
|
||||
Ann3(array(A1::class, A2::class))
|
||||
class MyClass1
|
||||
|
||||
Ann1(<!ANNOTATION_PARAMETER_MUST_BE_CONST!><!UNRESOLVED_REFERENCE!>A3<!>::class<!>)
|
||||
class MyClass2
|
||||
|
||||
val x = A1::class
|
||||
Ann1(<!ANNOTATION_PARAMETER_MUST_BE_CONST!>x<!>)
|
||||
class MyClass3
|
||||
+62
@@ -0,0 +1,62 @@
|
||||
package
|
||||
|
||||
internal val x: kotlin.reflect.KClass<A1>
|
||||
|
||||
internal final class A1 {
|
||||
public constructor A1()
|
||||
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
|
||||
}
|
||||
|
||||
internal final class A2 {
|
||||
public constructor A2()
|
||||
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
|
||||
}
|
||||
|
||||
internal final annotation class Ann1 : kotlin.Annotation {
|
||||
public constructor Ann1(/*0*/ arg: kotlin.reflect.KClass<*>)
|
||||
internal final val arg: kotlin.reflect.KClass<*>
|
||||
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
|
||||
}
|
||||
|
||||
internal final annotation class Ann2 : kotlin.Annotation {
|
||||
public constructor Ann2(/*0*/ vararg arg: kotlin.reflect.KClass<*> /*kotlin.Array<out kotlin.reflect.KClass<*>>*/)
|
||||
internal final val arg: kotlin.Array<out kotlin.reflect.KClass<*>>
|
||||
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
|
||||
}
|
||||
|
||||
internal final annotation class Ann3 : kotlin.Annotation {
|
||||
public constructor Ann3(/*0*/ arg: kotlin.Array<kotlin.reflect.KClass<*>>)
|
||||
internal final val arg: kotlin.Array<kotlin.reflect.KClass<*>>
|
||||
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
|
||||
}
|
||||
|
||||
Ann1(arg = A1::class: kotlin.reflect.KClass<A1>) Ann2(arg = {A1::class, A2::class}: kotlin.Array<out kotlin.reflect.KClass<*>>) Ann3(arg = {A1::class, A2::class}: kotlin.Array<kotlin.reflect.KClass<*>>) internal final class MyClass1 {
|
||||
public constructor MyClass1()
|
||||
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
|
||||
}
|
||||
|
||||
Ann1() internal final class MyClass2 {
|
||||
public constructor MyClass2()
|
||||
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
|
||||
}
|
||||
|
||||
Ann1() internal final class MyClass3 {
|
||||
public constructor MyClass3()
|
||||
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
|
||||
}
|
||||
+27
@@ -0,0 +1,27 @@
|
||||
import kotlin.reflect.KClass
|
||||
|
||||
open class A
|
||||
class B1 : A()
|
||||
class B2 : A()
|
||||
|
||||
annotation class Ann1(val arg: KClass<in A>)
|
||||
|
||||
Ann1(A::class)
|
||||
class MyClass1
|
||||
|
||||
Ann1(Any::class)
|
||||
class MyClass1a
|
||||
|
||||
Ann1(<!TYPE_MISMATCH!>B1::class<!>)
|
||||
class MyClass2
|
||||
|
||||
annotation class Ann2(val arg: KClass<in B1>)
|
||||
|
||||
Ann2(A::class)
|
||||
class MyClass3
|
||||
|
||||
Ann2(B1::class)
|
||||
class MyClass4
|
||||
|
||||
Ann2(<!TYPE_MISMATCH!>B2::class<!>)
|
||||
class MyClass5
|
||||
+80
@@ -0,0 +1,80 @@
|
||||
package
|
||||
|
||||
internal open class A {
|
||||
public constructor A()
|
||||
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
|
||||
}
|
||||
|
||||
internal final annotation class Ann1 : kotlin.Annotation {
|
||||
public constructor Ann1(/*0*/ arg: kotlin.reflect.KClass<in A>)
|
||||
internal final val arg: kotlin.reflect.KClass<in A>
|
||||
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
|
||||
}
|
||||
|
||||
internal final annotation class Ann2 : kotlin.Annotation {
|
||||
public constructor Ann2(/*0*/ arg: kotlin.reflect.KClass<in B1>)
|
||||
internal final val arg: kotlin.reflect.KClass<in B1>
|
||||
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
|
||||
}
|
||||
|
||||
internal final class B1 : A {
|
||||
public constructor B1()
|
||||
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
|
||||
}
|
||||
|
||||
internal final class B2 : A {
|
||||
public constructor B2()
|
||||
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
|
||||
}
|
||||
|
||||
Ann1(arg = A::class: kotlin.reflect.KClass<A>) internal final class MyClass1 {
|
||||
public constructor MyClass1()
|
||||
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
|
||||
}
|
||||
|
||||
Ann1(arg = kotlin.Any::class: kotlin.reflect.KClass<kotlin.Any>) internal final class MyClass1a {
|
||||
public constructor MyClass1a()
|
||||
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
|
||||
}
|
||||
|
||||
Ann1(arg = B1::class: kotlin.reflect.KClass<B1>) internal final class MyClass2 {
|
||||
public constructor MyClass2()
|
||||
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
|
||||
}
|
||||
|
||||
Ann2(arg = A::class: kotlin.reflect.KClass<A>) internal final class MyClass3 {
|
||||
public constructor MyClass3()
|
||||
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
|
||||
}
|
||||
|
||||
Ann2(arg = B1::class: kotlin.reflect.KClass<B1>) internal final class MyClass4 {
|
||||
public constructor MyClass4()
|
||||
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
|
||||
}
|
||||
|
||||
Ann2(arg = B2::class: kotlin.reflect.KClass<B2>) internal final class MyClass5 {
|
||||
public constructor MyClass5()
|
||||
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
|
||||
}
|
||||
+27
@@ -0,0 +1,27 @@
|
||||
import kotlin.reflect.KClass
|
||||
|
||||
open class A
|
||||
class B1 : A()
|
||||
class B2 : A()
|
||||
|
||||
annotation class Ann1(val arg: KClass<out A>)
|
||||
|
||||
Ann1(A::class)
|
||||
class MyClass1
|
||||
|
||||
Ann1(<!TYPE_MISMATCH!>Any::class<!>)
|
||||
class MyClass1a
|
||||
|
||||
Ann1(B1::class)
|
||||
class MyClass2
|
||||
|
||||
annotation class Ann2(val arg: KClass<out B1>)
|
||||
|
||||
Ann2(<!TYPE_MISMATCH!>A::class<!>)
|
||||
class MyClass3
|
||||
|
||||
Ann2(B1::class)
|
||||
class MyClass4
|
||||
|
||||
Ann2(<!TYPE_MISMATCH!>B2::class<!>)
|
||||
class MyClass5
|
||||
+80
@@ -0,0 +1,80 @@
|
||||
package
|
||||
|
||||
internal open class A {
|
||||
public constructor A()
|
||||
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
|
||||
}
|
||||
|
||||
internal final annotation class Ann1 : kotlin.Annotation {
|
||||
public constructor Ann1(/*0*/ arg: kotlin.reflect.KClass<out A>)
|
||||
internal final val arg: kotlin.reflect.KClass<out A>
|
||||
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
|
||||
}
|
||||
|
||||
internal final annotation class Ann2 : kotlin.Annotation {
|
||||
public constructor Ann2(/*0*/ arg: kotlin.reflect.KClass<out B1>)
|
||||
internal final val arg: kotlin.reflect.KClass<out B1>
|
||||
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
|
||||
}
|
||||
|
||||
internal final class B1 : A {
|
||||
public constructor B1()
|
||||
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
|
||||
}
|
||||
|
||||
internal final class B2 : A {
|
||||
public constructor B2()
|
||||
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
|
||||
}
|
||||
|
||||
Ann1(arg = A::class: kotlin.reflect.KClass<A>) internal final class MyClass1 {
|
||||
public constructor MyClass1()
|
||||
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
|
||||
}
|
||||
|
||||
Ann1(arg = kotlin.Any::class: kotlin.reflect.KClass<kotlin.Any>) internal final class MyClass1a {
|
||||
public constructor MyClass1a()
|
||||
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
|
||||
}
|
||||
|
||||
Ann1(arg = B1::class: kotlin.reflect.KClass<B1>) internal final class MyClass2 {
|
||||
public constructor MyClass2()
|
||||
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
|
||||
}
|
||||
|
||||
Ann2(arg = A::class: kotlin.reflect.KClass<A>) internal final class MyClass3 {
|
||||
public constructor MyClass3()
|
||||
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
|
||||
}
|
||||
|
||||
Ann2(arg = B1::class: kotlin.reflect.KClass<B1>) internal final class MyClass4 {
|
||||
public constructor MyClass4()
|
||||
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
|
||||
}
|
||||
|
||||
Ann2(arg = B2::class: kotlin.reflect.KClass<B2>) internal final class MyClass5 {
|
||||
public constructor MyClass5()
|
||||
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,23 @@
|
||||
import kotlin.reflect.KClass
|
||||
|
||||
open class A
|
||||
class B : A()
|
||||
|
||||
annotation class Ann1(val arg: KClass<A>)
|
||||
|
||||
Ann1(A::class)
|
||||
class MyClass1
|
||||
|
||||
Ann1(<!TYPE_MISMATCH!>Any::class<!>)
|
||||
class MyClass1a
|
||||
|
||||
Ann1(<!TYPE_MISMATCH!>B::class<!>)
|
||||
class MyClass2
|
||||
|
||||
annotation class Ann2(val arg: KClass<B>)
|
||||
|
||||
Ann2(<!TYPE_MISMATCH!>A::class<!>)
|
||||
class MyClass3
|
||||
|
||||
Ann2(B::class)
|
||||
class MyClass4
|
||||
+66
@@ -0,0 +1,66 @@
|
||||
package
|
||||
|
||||
internal open class A {
|
||||
public constructor A()
|
||||
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
|
||||
}
|
||||
|
||||
internal final annotation class Ann1 : kotlin.Annotation {
|
||||
public constructor Ann1(/*0*/ arg: kotlin.reflect.KClass<A>)
|
||||
internal final val arg: kotlin.reflect.KClass<A>
|
||||
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
|
||||
}
|
||||
|
||||
internal final annotation class Ann2 : kotlin.Annotation {
|
||||
public constructor Ann2(/*0*/ arg: kotlin.reflect.KClass<B>)
|
||||
internal final val arg: kotlin.reflect.KClass<B>
|
||||
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
|
||||
}
|
||||
|
||||
internal final class B : A {
|
||||
public constructor B()
|
||||
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
|
||||
}
|
||||
|
||||
Ann1(arg = A::class: kotlin.reflect.KClass<A>) internal final class MyClass1 {
|
||||
public constructor MyClass1()
|
||||
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
|
||||
}
|
||||
|
||||
Ann1(arg = kotlin.Any::class: kotlin.reflect.KClass<kotlin.Any>) internal final class MyClass1a {
|
||||
public constructor MyClass1a()
|
||||
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
|
||||
}
|
||||
|
||||
Ann1(arg = B::class: kotlin.reflect.KClass<B>) internal final class MyClass2 {
|
||||
public constructor MyClass2()
|
||||
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
|
||||
}
|
||||
|
||||
Ann2(arg = A::class: kotlin.reflect.KClass<A>) internal final class MyClass3 {
|
||||
public constructor MyClass3()
|
||||
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
|
||||
}
|
||||
|
||||
Ann2(arg = B::class: kotlin.reflect.KClass<B>) internal final class MyClass4 {
|
||||
public constructor MyClass4()
|
||||
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
|
||||
}
|
||||
+7
@@ -0,0 +1,7 @@
|
||||
import kotlin.reflect.KClass
|
||||
|
||||
open class A
|
||||
class B1 : A()
|
||||
class B2 : A()
|
||||
|
||||
annotation class Ann1(val arg: Array<out KClass<out A>>)
|
||||
+30
@@ -0,0 +1,30 @@
|
||||
package
|
||||
|
||||
internal open class A {
|
||||
public constructor A()
|
||||
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
|
||||
}
|
||||
|
||||
internal final annotation class Ann1 : kotlin.Annotation {
|
||||
public constructor Ann1(/*0*/ arg: kotlin.Array<out kotlin.reflect.KClass<out A>>)
|
||||
internal final val arg: kotlin.Array<out kotlin.reflect.KClass<out A>>
|
||||
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
|
||||
}
|
||||
|
||||
internal final class B1 : A {
|
||||
public constructor B1()
|
||||
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
|
||||
}
|
||||
|
||||
internal final class B2 : A {
|
||||
public constructor B2()
|
||||
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
|
||||
}
|
||||
+51
@@ -202,6 +202,57 @@ public class JetDiagnosticsTestWithStdLibGenerated extends AbstractJetDiagnostic
|
||||
}
|
||||
}
|
||||
|
||||
@TestMetadata("compiler/testData/diagnostics/testsWithStdLib/annotations/kClass")
|
||||
@TestDataPath("$PROJECT_ROOT")
|
||||
@RunWith(JUnit3RunnerWithInners.class)
|
||||
public static class KClass extends AbstractJetDiagnosticsTestWithStdLib {
|
||||
public void testAllFilesPresentInKClass() throws Exception {
|
||||
JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("compiler/testData/diagnostics/testsWithStdLib/annotations/kClass"), Pattern.compile("^(.+)\\.kt$"), true);
|
||||
}
|
||||
|
||||
@TestMetadata("kClassArrayInAnnotationsInVariance.kt")
|
||||
public void testKClassArrayInAnnotationsInVariance() throws Exception {
|
||||
String fileName = JetTestUtils.navigationMetadata("compiler/testData/diagnostics/testsWithStdLib/annotations/kClass/kClassArrayInAnnotationsInVariance.kt");
|
||||
doTest(fileName);
|
||||
}
|
||||
|
||||
@TestMetadata("kClassArrayInAnnotationsOutVariance.kt")
|
||||
public void testKClassArrayInAnnotationsOutVariance() throws Exception {
|
||||
String fileName = JetTestUtils.navigationMetadata("compiler/testData/diagnostics/testsWithStdLib/annotations/kClass/kClassArrayInAnnotationsOutVariance.kt");
|
||||
doTest(fileName);
|
||||
}
|
||||
|
||||
@TestMetadata("kClassInAnnotation.kt")
|
||||
public void testKClassInAnnotation() throws Exception {
|
||||
String fileName = JetTestUtils.navigationMetadata("compiler/testData/diagnostics/testsWithStdLib/annotations/kClass/kClassInAnnotation.kt");
|
||||
doTest(fileName);
|
||||
}
|
||||
|
||||
@TestMetadata("kClassInAnnotationsInVariance.kt")
|
||||
public void testKClassInAnnotationsInVariance() throws Exception {
|
||||
String fileName = JetTestUtils.navigationMetadata("compiler/testData/diagnostics/testsWithStdLib/annotations/kClass/kClassInAnnotationsInVariance.kt");
|
||||
doTest(fileName);
|
||||
}
|
||||
|
||||
@TestMetadata("kClassInAnnotationsOutVariance.kt")
|
||||
public void testKClassInAnnotationsOutVariance() throws Exception {
|
||||
String fileName = JetTestUtils.navigationMetadata("compiler/testData/diagnostics/testsWithStdLib/annotations/kClass/kClassInAnnotationsOutVariance.kt");
|
||||
doTest(fileName);
|
||||
}
|
||||
|
||||
@TestMetadata("kClassInvariantTP.kt")
|
||||
public void testKClassInvariantTP() throws Exception {
|
||||
String fileName = JetTestUtils.navigationMetadata("compiler/testData/diagnostics/testsWithStdLib/annotations/kClass/kClassInvariantTP.kt");
|
||||
doTest(fileName);
|
||||
}
|
||||
|
||||
@TestMetadata("kClassOutArrayInAnnotationsOutVariance.kt")
|
||||
public void testKClassOutArrayInAnnotationsOutVariance() throws Exception {
|
||||
String fileName = JetTestUtils.navigationMetadata("compiler/testData/diagnostics/testsWithStdLib/annotations/kClass/kClassOutArrayInAnnotationsOutVariance.kt");
|
||||
doTest(fileName);
|
||||
}
|
||||
}
|
||||
|
||||
@TestMetadata("compiler/testData/diagnostics/testsWithStdLib/annotations/platformStatic")
|
||||
@TestDataPath("$PROJECT_ROOT")
|
||||
@RunWith(JUnit3RunnerWithInners.class)
|
||||
|
||||
@@ -161,6 +161,8 @@ public class KotlinBuiltIns {
|
||||
public final FqName tailRecursive = fqName("tailRecursive");
|
||||
public final FqName noinline = fqName("noinline");
|
||||
|
||||
public final FqNameUnsafe kClass = new FqName("kotlin.reflect.KClass").toUnsafe();
|
||||
|
||||
public final Set<FqNameUnsafe> primitiveTypes;
|
||||
public final Set<FqNameUnsafe> primitiveArrays;
|
||||
{
|
||||
@@ -853,6 +855,10 @@ public class KotlinBuiltIns {
|
||||
return type != null && isNotNullConstructedFromGivenClass(type, FQ_NAMES.string);
|
||||
}
|
||||
|
||||
public static boolean isKClass(@NotNull ClassDescriptor descriptor) {
|
||||
return FQ_NAMES.kClass.equals(DescriptorUtils.getFqName(descriptor));
|
||||
}
|
||||
|
||||
public static boolean isNonPrimitiveArray(@NotNull ClassDescriptor descriptor) {
|
||||
return FQ_NAMES.array.equals(DescriptorUtils.getFqName(descriptor));
|
||||
}
|
||||
|
||||
+2
@@ -51,5 +51,7 @@ public interface AnnotationArgumentVisitor<R, D> {
|
||||
|
||||
R visitJavaClassValue(JavaClassValue value, D data);
|
||||
|
||||
R visitKClassValue(KClassValue value, D data);
|
||||
|
||||
R visitNumberTypeValue(IntegerValueTypeConstant value, D data);
|
||||
}
|
||||
|
||||
@@ -31,10 +31,7 @@ import org.jetbrains.kotlin.name.FqNameBase;
|
||||
import org.jetbrains.kotlin.name.FqNameUnsafe;
|
||||
import org.jetbrains.kotlin.name.Name;
|
||||
import org.jetbrains.kotlin.resolve.DescriptorUtils;
|
||||
import org.jetbrains.kotlin.resolve.constants.AnnotationValue;
|
||||
import org.jetbrains.kotlin.resolve.constants.ArrayValue;
|
||||
import org.jetbrains.kotlin.resolve.constants.CompileTimeConstant;
|
||||
import org.jetbrains.kotlin.resolve.constants.JavaClassValue;
|
||||
import org.jetbrains.kotlin.resolve.constants.*;
|
||||
import org.jetbrains.kotlin.types.*;
|
||||
import org.jetbrains.kotlin.types.ErrorUtils.UninferredParameterTypeConstructor;
|
||||
import org.jetbrains.kotlin.types.error.MissingDependencyErrorClass;
|
||||
@@ -614,6 +611,11 @@ public class DescriptorRendererImpl implements DescriptorRenderer {
|
||||
public String visitJavaClassValue(JavaClassValue value, Void data) {
|
||||
return renderType(value.getValue()) + ".class";
|
||||
}
|
||||
|
||||
@Override
|
||||
public String visitKClassValue(KClassValue value, Void data) {
|
||||
return renderType(value.getValue()) + "::class";
|
||||
}
|
||||
},
|
||||
null
|
||||
);
|
||||
|
||||
@@ -0,0 +1,29 @@
|
||||
/*
|
||||
* Copyright 2010-2015 JetBrains s.r.o.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package org.jetbrains.kotlin.resolve.constants
|
||||
|
||||
import org.jetbrains.kotlin.builtins.KotlinBuiltIns
|
||||
import org.jetbrains.kotlin.descriptors.annotations.AnnotationArgumentVisitor
|
||||
import org.jetbrains.kotlin.types.JetType
|
||||
|
||||
|
||||
public class KClassValue(type: JetType) : CompileTimeConstant<JetType>(type, true, false, false) {
|
||||
override fun getType(kotlinBuiltIns: KotlinBuiltIns) = value
|
||||
override fun getValue(): JetType = value.getArguments().single().getType()
|
||||
|
||||
override fun <R, D> accept(visitor: AnnotationArgumentVisitor<R, D>, data: D) = visitor.visitKClassValue(this, data)
|
||||
}
|
||||
Reference in New Issue
Block a user