Load annotation parameter's type for ctr as contravariant
See comment in code
This commit is contained in:
+3
-3
@@ -1,15 +1,15 @@
|
|||||||
package
|
package
|
||||||
|
|
||||||
public final annotation class A : kotlin.Annotation {
|
public final annotation class A : kotlin.Annotation {
|
||||||
public /*synthesized*/ constructor A(/*0*/ arg: kotlin.Array<java.lang.Class<*>>)
|
public /*synthesized*/ constructor A(/*0*/ arg: kotlin.Array<out java.lang.Class<*>>)
|
||||||
public constructor A(/*0*/ arg: kotlin.Array<kotlin.reflect.KClass<*>>)
|
public constructor A(/*0*/ arg: kotlin.Array<out kotlin.reflect.KClass<*>>)
|
||||||
public abstract fun arg(): kotlin.Array<kotlin.reflect.KClass<*>>
|
public abstract fun 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 equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||||
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||||
}
|
}
|
||||||
|
|
||||||
A(arg = {kotlin.String.class, kotlin.Int.class}: kotlin.Array<java.lang.Class<*>>) internal final class MyClass1 {
|
A(arg = {kotlin.String.class, kotlin.Int.class}: kotlin.Array<java.lang.Class<out kotlin.Comparable<out kotlin.Any?>>>) internal final class MyClass1 {
|
||||||
public constructor 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 equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||||
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||||
|
|||||||
+3
-3
@@ -1,15 +1,15 @@
|
|||||||
package
|
package
|
||||||
|
|
||||||
public final annotation class A : kotlin.Annotation {
|
public final annotation class A : kotlin.Annotation {
|
||||||
public /*synthesized*/ constructor A(/*0*/ arg: kotlin.Array<java.lang.Class<*>>)
|
public /*synthesized*/ constructor A(/*0*/ arg: kotlin.Array<out java.lang.Class<*>>)
|
||||||
public constructor A(/*0*/ arg: kotlin.Array<kotlin.reflect.KClass<*>>)
|
public constructor A(/*0*/ arg: kotlin.Array<out kotlin.reflect.KClass<*>>)
|
||||||
public abstract fun arg(): kotlin.Array<kotlin.reflect.KClass<*>>
|
public abstract fun 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 equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||||
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||||
}
|
}
|
||||||
|
|
||||||
A(arg = {kotlin.String::class, kotlin.Int::class}: kotlin.Array<kotlin.reflect.KClass<*>>) internal final class MyClass {
|
A(arg = {kotlin.String::class, kotlin.Int::class}: kotlin.Array<kotlin.reflect.KClass<out kotlin.Comparable<out kotlin.Any?>>>) internal final class MyClass {
|
||||||
public constructor MyClass()
|
public constructor MyClass()
|
||||||
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
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 hashCode(): kotlin.Int
|
||||||
|
|||||||
@@ -4,13 +4,13 @@ public open class ClassObjectInParamRaw {
|
|||||||
public constructor ClassObjectInParamRaw()
|
public constructor ClassObjectInParamRaw()
|
||||||
|
|
||||||
public final annotation class Anno : kotlin.Annotation {
|
public final annotation class Anno : kotlin.Annotation {
|
||||||
public /*synthesized*/ constructor Anno(/*0*/ value: java.lang.Class<*>, /*1*/ arg: kotlin.Array<java.lang.Class<*>>)
|
public /*synthesized*/ constructor Anno(/*0*/ value: java.lang.Class<*>, /*1*/ arg: kotlin.Array<out java.lang.Class<*>>)
|
||||||
public constructor Anno(/*0*/ value: kotlin.reflect.KClass<*>, /*1*/ arg: kotlin.Array<kotlin.reflect.KClass<*>>)
|
public constructor Anno(/*0*/ value: kotlin.reflect.KClass<*>, /*1*/ arg: kotlin.Array<out kotlin.reflect.KClass<*>>)
|
||||||
public abstract fun arg(): kotlin.Array<kotlin.reflect.KClass<*>>
|
public abstract fun arg(): kotlin.Array<kotlin.reflect.KClass<*>>
|
||||||
public abstract fun value(): kotlin.reflect.KClass<*>
|
public abstract fun value(): kotlin.reflect.KClass<*>
|
||||||
}
|
}
|
||||||
|
|
||||||
test.ClassObjectInParamRaw.Anno(arg = {}: kotlin.Array<kotlin.reflect.KClass<*>>, value = test.ClassObjectInParamRaw.class: java.lang.Class<test.ClassObjectInParamRaw>) public open class Nested {
|
test.ClassObjectInParamRaw.Anno(arg = {}: kotlin.Array<out kotlin.reflect.KClass<*>>, value = test.ClassObjectInParamRaw.class: java.lang.Class<test.ClassObjectInParamRaw>) public open class Nested {
|
||||||
public constructor Nested()
|
public constructor Nested()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,8 +4,8 @@ public open class ClassObjectInParamVariance {
|
|||||||
public constructor ClassObjectInParamVariance()
|
public constructor ClassObjectInParamVariance()
|
||||||
|
|
||||||
public final annotation class Anno : kotlin.Annotation {
|
public final annotation class Anno : kotlin.Annotation {
|
||||||
public /*synthesized*/ constructor Anno(/*0*/ arg1: java.lang.Class<out kotlin.Int!>, /*1*/ arg2: java.lang.Class<in kotlin.Int!>, /*2*/ arg3: kotlin.Array<java.lang.Class<out kotlin.Int!>>, /*3*/ arg4: kotlin.Array<java.lang.Class<in kotlin.Int!>>, /*4*/ arg5: kotlin.Array<java.lang.Class<out java.lang.Class<*>!>>, /*5*/ arg6: kotlin.Array<java.lang.Class<in java.lang.Class<*>!>>, /*6*/ arg7: kotlin.Array<java.lang.Class<out java.lang.Class<kotlin.Int!>!>>, /*7*/ arg8: kotlin.Array<java.lang.Class<in java.lang.Class<kotlin.Int!>!>>)
|
public /*synthesized*/ constructor Anno(/*0*/ arg1: java.lang.Class<out kotlin.Int!>, /*1*/ arg2: java.lang.Class<in kotlin.Int!>, /*2*/ arg3: kotlin.Array<out java.lang.Class<out kotlin.Int!>>, /*3*/ arg4: kotlin.Array<out java.lang.Class<in kotlin.Int!>>, /*4*/ arg5: kotlin.Array<out java.lang.Class<out java.lang.Class<*>!>>, /*5*/ arg6: kotlin.Array<out java.lang.Class<in java.lang.Class<*>!>>, /*6*/ arg7: kotlin.Array<out java.lang.Class<out java.lang.Class<kotlin.Int!>!>>, /*7*/ arg8: kotlin.Array<out java.lang.Class<in java.lang.Class<kotlin.Int!>!>>)
|
||||||
public constructor Anno(/*0*/ arg1: kotlin.reflect.KClass<out kotlin.Int!>, /*1*/ arg2: kotlin.reflect.KClass<in kotlin.Int!>, /*2*/ arg3: kotlin.Array<kotlin.reflect.KClass<out kotlin.Int!>>, /*3*/ arg4: kotlin.Array<kotlin.reflect.KClass<in kotlin.Int!>>, /*4*/ arg5: kotlin.Array<kotlin.reflect.KClass<out java.lang.Class<*>!>>, /*5*/ arg6: kotlin.Array<kotlin.reflect.KClass<in java.lang.Class<*>!>>, /*6*/ arg7: kotlin.Array<kotlin.reflect.KClass<out java.lang.Class<kotlin.Int!>!>>, /*7*/ arg8: kotlin.Array<kotlin.reflect.KClass<in java.lang.Class<kotlin.Int!>!>>)
|
public constructor Anno(/*0*/ arg1: kotlin.reflect.KClass<out kotlin.Int!>, /*1*/ arg2: kotlin.reflect.KClass<in kotlin.Int!>, /*2*/ arg3: kotlin.Array<out kotlin.reflect.KClass<out kotlin.Int!>>, /*3*/ arg4: kotlin.Array<out kotlin.reflect.KClass<in kotlin.Int!>>, /*4*/ arg5: kotlin.Array<out kotlin.reflect.KClass<out java.lang.Class<*>!>>, /*5*/ arg6: kotlin.Array<out kotlin.reflect.KClass<in java.lang.Class<*>!>>, /*6*/ arg7: kotlin.Array<out kotlin.reflect.KClass<out java.lang.Class<kotlin.Int!>!>>, /*7*/ arg8: kotlin.Array<out kotlin.reflect.KClass<in java.lang.Class<kotlin.Int!>!>>)
|
||||||
public abstract fun arg1(): kotlin.reflect.KClass<out kotlin.Int!>
|
public abstract fun arg1(): kotlin.reflect.KClass<out kotlin.Int!>
|
||||||
public abstract fun arg2(): kotlin.reflect.KClass<in kotlin.Int!>
|
public abstract fun arg2(): kotlin.reflect.KClass<in kotlin.Int!>
|
||||||
public abstract fun arg3(): kotlin.Array<kotlin.reflect.KClass<out kotlin.Int!>>
|
public abstract fun arg3(): kotlin.Array<kotlin.reflect.KClass<out kotlin.Int!>>
|
||||||
|
|||||||
@@ -3,10 +3,10 @@ package test
|
|||||||
public /*synthesized*/ fun NullInAnnotation(/*0*/ function: () -> kotlin.Unit): test.NullInAnnotation
|
public /*synthesized*/ fun NullInAnnotation(/*0*/ function: () -> kotlin.Unit): test.NullInAnnotation
|
||||||
|
|
||||||
public trait NullInAnnotation {
|
public trait NullInAnnotation {
|
||||||
test.NullInAnnotation.Ann(a = null: kotlin.Nothing?, b = {null}: kotlin.Array<kotlin.String>) public abstract fun foo(): kotlin.Unit
|
test.NullInAnnotation.Ann(a = null: kotlin.Nothing?, b = {null}: kotlin.Array<out kotlin.String>) public abstract fun foo(): kotlin.Unit
|
||||||
|
|
||||||
public final annotation class Ann : kotlin.Annotation {
|
public final annotation class Ann : kotlin.Annotation {
|
||||||
public constructor Ann(/*0*/ a: kotlin.String, /*1*/ b: kotlin.Array<kotlin.String>)
|
public constructor Ann(/*0*/ a: kotlin.String, /*1*/ b: kotlin.Array<out kotlin.String>)
|
||||||
public abstract fun a(): kotlin.String
|
public abstract fun a(): kotlin.String
|
||||||
public abstract fun b(): kotlin.Array<kotlin.String>
|
public abstract fun b(): kotlin.Array<kotlin.String>
|
||||||
}
|
}
|
||||||
|
|||||||
+10
-1
@@ -194,7 +194,16 @@ public class LazyJavaClassMemberScope(
|
|||||||
val methods = jClass.getMethods()
|
val methods = jClass.getMethods()
|
||||||
val result = ArrayList<ValueParameterDescriptor>(methods.size())
|
val result = ArrayList<ValueParameterDescriptor>(methods.size())
|
||||||
|
|
||||||
val attr = TypeUsage.MEMBER_SIGNATURE_INVARIANT.toAttributes(
|
// Using MEMBER_SIGNATURE_CONTRAVARIANT is just a hack to make overload resolution work in cases like
|
||||||
|
// Ann(arg = array(javaClass<Int>())) class Annotated
|
||||||
|
//
|
||||||
|
// If we load constructor parameters' types as invariant: Ann(arg: Array<Class<*>>), Ann(arg: Array<KClass<*>>), then
|
||||||
|
// when resolving `Ann(arg = array(javaClass<Int>()))` type of array is inferred as Array<Class<Int>>
|
||||||
|
// which is neither subtype of Array<Class<*>> nor Array<KClass<*>> (similar case is KT-7410)
|
||||||
|
//
|
||||||
|
// Hack should be removed if support of Class<*> in annotations is dropped or KT-7410 is fixed
|
||||||
|
// Also see tests `AnnotationsWithClassParameterOverload`
|
||||||
|
val attr = TypeUsage.MEMBER_SIGNATURE_CONTRAVARIANT.toAttributes(
|
||||||
allowFlexible = false, isForAnnotationParameter = loadJavaClassAsKClass)
|
allowFlexible = false, isForAnnotationParameter = loadJavaClassAsKClass)
|
||||||
|
|
||||||
val (methodsNamedValue, otherMethods) = methods.
|
val (methodsNamedValue, otherMethods) = methods.
|
||||||
|
|||||||
Reference in New Issue
Block a user