Frontend: Allow using KClass as annotation parameter type
This commit is contained in:
@@ -284,7 +284,16 @@ public abstract class AnnotationCodegen {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Void visitJavaClassValue(JavaClassValue value, Void data) {
|
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;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -79,6 +79,7 @@ public class CompileTimeConstantUtils {
|
|||||||
if (isEnumClass(typeDescriptor) ||
|
if (isEnumClass(typeDescriptor) ||
|
||||||
isAnnotationClass(typeDescriptor) ||
|
isAnnotationClass(typeDescriptor) ||
|
||||||
isJavaLangClass(typeDescriptor) ||
|
isJavaLangClass(typeDescriptor) ||
|
||||||
|
KotlinBuiltIns.isKClass(typeDescriptor) ||
|
||||||
KotlinBuiltIns.isPrimitiveArray(parameterType) ||
|
KotlinBuiltIns.isPrimitiveArray(parameterType) ||
|
||||||
KotlinBuiltIns.isPrimitiveType(parameterType) ||
|
KotlinBuiltIns.isPrimitiveType(parameterType) ||
|
||||||
builtIns.getStringType().equals(parameterType)) {
|
builtIns.getStringType().equals(parameterType)) {
|
||||||
@@ -97,6 +98,7 @@ public class CompileTimeConstantUtils {
|
|||||||
return isEnumClass(arrayTypeDescriptor) ||
|
return isEnumClass(arrayTypeDescriptor) ||
|
||||||
isAnnotationClass(arrayTypeDescriptor) ||
|
isAnnotationClass(arrayTypeDescriptor) ||
|
||||||
isJavaLangClass(arrayTypeDescriptor) ||
|
isJavaLangClass(arrayTypeDescriptor) ||
|
||||||
|
KotlinBuiltIns.isKClass(arrayTypeDescriptor) ||
|
||||||
builtIns.getStringType().equals(arrayType);
|
builtIns.getStringType().equals(arrayType);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+6
@@ -395,6 +395,12 @@ public class ConstantExpressionEvaluator private (val trace: BindingTrace) : Jet
|
|||||||
return null
|
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<*>> {
|
private fun resolveArguments(valueArguments: List<ValueArgument>, expectedType: JetType): List<CompileTimeConstant<*>> {
|
||||||
val constants = arrayListOf<CompileTimeConstant<*>>()
|
val constants = arrayListOf<CompileTimeConstant<*>>()
|
||||||
for (argument in valueArguments) {
|
for (argument in valueArguments) {
|
||||||
|
|||||||
@@ -104,6 +104,11 @@ public object AnnotationSerializer {
|
|||||||
throw UnsupportedOperationException("Class literal annotation arguments are not yet supported: $value")
|
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) {
|
override fun visitLongValue(value: LongValue, data: Unit) {
|
||||||
setType(Type.LONG)
|
setType(Type.LONG)
|
||||||
setIntValue(value.getValue())
|
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")
|
@TestMetadata("compiler/testData/diagnostics/testsWithStdLib/annotations/platformStatic")
|
||||||
@TestDataPath("$PROJECT_ROOT")
|
@TestDataPath("$PROJECT_ROOT")
|
||||||
@RunWith(JUnit3RunnerWithInners.class)
|
@RunWith(JUnit3RunnerWithInners.class)
|
||||||
|
|||||||
@@ -161,6 +161,8 @@ public class KotlinBuiltIns {
|
|||||||
public final FqName tailRecursive = fqName("tailRecursive");
|
public final FqName tailRecursive = fqName("tailRecursive");
|
||||||
public final FqName noinline = fqName("noinline");
|
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> primitiveTypes;
|
||||||
public final Set<FqNameUnsafe> primitiveArrays;
|
public final Set<FqNameUnsafe> primitiveArrays;
|
||||||
{
|
{
|
||||||
@@ -853,6 +855,10 @@ public class KotlinBuiltIns {
|
|||||||
return type != null && isNotNullConstructedFromGivenClass(type, FQ_NAMES.string);
|
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) {
|
public static boolean isNonPrimitiveArray(@NotNull ClassDescriptor descriptor) {
|
||||||
return FQ_NAMES.array.equals(DescriptorUtils.getFqName(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 visitJavaClassValue(JavaClassValue value, D data);
|
||||||
|
|
||||||
|
R visitKClassValue(KClassValue value, D data);
|
||||||
|
|
||||||
R visitNumberTypeValue(IntegerValueTypeConstant 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.FqNameUnsafe;
|
||||||
import org.jetbrains.kotlin.name.Name;
|
import org.jetbrains.kotlin.name.Name;
|
||||||
import org.jetbrains.kotlin.resolve.DescriptorUtils;
|
import org.jetbrains.kotlin.resolve.DescriptorUtils;
|
||||||
import org.jetbrains.kotlin.resolve.constants.AnnotationValue;
|
import org.jetbrains.kotlin.resolve.constants.*;
|
||||||
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.types.*;
|
import org.jetbrains.kotlin.types.*;
|
||||||
import org.jetbrains.kotlin.types.ErrorUtils.UninferredParameterTypeConstructor;
|
import org.jetbrains.kotlin.types.ErrorUtils.UninferredParameterTypeConstructor;
|
||||||
import org.jetbrains.kotlin.types.error.MissingDependencyErrorClass;
|
import org.jetbrains.kotlin.types.error.MissingDependencyErrorClass;
|
||||||
@@ -614,6 +611,11 @@ public class DescriptorRendererImpl implements DescriptorRenderer {
|
|||||||
public String visitJavaClassValue(JavaClassValue value, Void data) {
|
public String visitJavaClassValue(JavaClassValue value, Void data) {
|
||||||
return renderType(value.getValue()) + ".class";
|
return renderType(value.getValue()) + ".class";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String visitKClassValue(KClassValue value, Void data) {
|
||||||
|
return renderType(value.getValue()) + "::class";
|
||||||
|
}
|
||||||
},
|
},
|
||||||
null
|
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