Revert "Load annotation parameter's type for ctr as contravariant"

This reverts commit 294eb1dceb.
This commit is contained in:
Denis Zharkov
2015-06-09 16:04:19 +03:00
parent 2df6fcb785
commit 9080b57635
5 changed files with 11 additions and 20 deletions
@@ -1,8 +1,8 @@
package
public final annotation class A : kotlin.Annotation {
public /*synthesized*/ constructor A(/*0*/ arg: kotlin.Array<out java.lang.Class<*>>)
public constructor A(/*0*/ arg: kotlin.Array<out kotlin.reflect.KClass<*>>)
public /*synthesized*/ constructor A(/*0*/ arg: kotlin.Array<java.lang.Class<*>>)
public constructor A(/*0*/ arg: kotlin.Array<kotlin.reflect.KClass<*>>)
public final val 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
@@ -10,7 +10,7 @@ public final annotation class A : kotlin.Annotation {
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
A(arg = {kotlin.String::class, kotlin.Int::class}: kotlin.Array<kotlin.reflect.KClass<out kotlin.Comparable<out kotlin.Any?>>>) internal final class MyClass {
A(arg = {kotlin.String::class, kotlin.Int::class}: kotlin.Array<kotlin.reflect.KClass<*>>) internal final class 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 hashCode(): kotlin.Int
@@ -4,15 +4,15 @@ public open class ClassObjectInParamRaw {
public constructor ClassObjectInParamRaw()
public final annotation class Anno : kotlin.Annotation {
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<out kotlin.reflect.KClass<*>>)
public /*synthesized*/ constructor Anno(/*0*/ value: java.lang.Class<*>, /*1*/ arg: kotlin.Array<java.lang.Class<*>>)
public constructor Anno(/*0*/ value: kotlin.reflect.KClass<*>, /*1*/ arg: kotlin.Array<kotlin.reflect.KClass<*>>)
public final val arg: kotlin.Array<kotlin.reflect.KClass<*>>
public final val value: kotlin.reflect.KClass<*>
public abstract fun arg(): kotlin.Array<kotlin.reflect.KClass<*>>
public abstract fun value(): kotlin.reflect.KClass<*>
}
test.ClassObjectInParamRaw.Anno(arg = {}: kotlin.Array<out kotlin.reflect.KClass<*>>, value = javaClass<test.ClassObjectInParamRaw>(): java.lang.Class<test.ClassObjectInParamRaw>) public open class Nested {
test.ClassObjectInParamRaw.Anno(arg = {}: kotlin.Array<kotlin.reflect.KClass<*>>, value = javaClass<test.ClassObjectInParamRaw>(): java.lang.Class<test.ClassObjectInParamRaw>) public open class Nested {
public constructor Nested()
}
}
@@ -4,8 +4,8 @@ public open class ClassObjectInParamVariance {
public constructor ClassObjectInParamVariance()
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<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<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 /*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 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 final val arg1: kotlin.reflect.KClass<out kotlin.Int!>
public final val arg2: kotlin.reflect.KClass<in kotlin.Int!>
public final val arg3: kotlin.Array<kotlin.reflect.KClass<out kotlin.Int!>>
+2 -2
View File
@@ -3,10 +3,10 @@ package test
public /*synthesized*/ fun NullInAnnotation(/*0*/ function: () -> kotlin.Unit): test.NullInAnnotation
public interface NullInAnnotation {
test.NullInAnnotation.Ann(a = null: kotlin.Nothing?, b = {null}: kotlin.Array<out kotlin.String>) public abstract fun foo(): kotlin.Unit
test.NullInAnnotation.Ann(a = null: kotlin.Nothing?, b = {null}: kotlin.Array<kotlin.String>) public abstract fun foo(): kotlin.Unit
public final annotation class Ann : kotlin.Annotation {
public constructor Ann(/*0*/ a: kotlin.String, /*1*/ b: kotlin.Array<out kotlin.String>)
public constructor Ann(/*0*/ a: kotlin.String, /*1*/ b: kotlin.Array<kotlin.String>)
public final val a: kotlin.String
public final val b: kotlin.Array<kotlin.String>
public abstract fun a(): kotlin.String
@@ -225,16 +225,7 @@ public class LazyJavaClassMemberScope(
val methods = jClass.getMethods()
val result = ArrayList<ValueParameterDescriptor>(methods.size())
// 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(
val attr = TypeUsage.MEMBER_SIGNATURE_INVARIANT.toAttributes(
allowFlexible = false, isForAnnotationParameter = loadJavaClassAsKClass)
val (methodsNamedValue, otherMethods) = methods.