Revert "Create additional constructor for java annotation with Class-parameter"

This reverts commit 8f0e290dec.
This commit is contained in:
Denis Zharkov
2015-06-09 16:16:01 +03:00
parent 9080b57635
commit 2e284718ce
23 changed files with 18 additions and 66 deletions
@@ -1,7 +1,6 @@
package package
public final annotation class A : kotlin.Annotation { public final annotation class A : kotlin.Annotation {
public /*synthesized*/ constructor A(/*0*/ value: kotlin.String, /*1*/ b: kotlin.Double, /*2*/ x1: java.lang.Class<*>, /*3*/ a: kotlin.Int, /*4*/ x: java.lang.Class<*>, /*5*/ x2: java.lang.Class<*>)
public constructor A(/*0*/ value: kotlin.String, /*1*/ b: kotlin.Double, /*2*/ x1: kotlin.reflect.KClass<*>, /*3*/ a: kotlin.Int, /*4*/ x: kotlin.reflect.KClass<*>, /*5*/ x2: kotlin.reflect.KClass<*>) public constructor A(/*0*/ value: kotlin.String, /*1*/ b: kotlin.Double, /*2*/ x1: kotlin.reflect.KClass<*>, /*3*/ a: kotlin.Int, /*4*/ x: kotlin.reflect.KClass<*>, /*5*/ x2: kotlin.reflect.KClass<*>)
public final val a: kotlin.Int public final val a: kotlin.Int
public final val b: kotlin.Double public final val b: kotlin.Double
@@ -1,7 +1,6 @@
package package
public final annotation class A : kotlin.Annotation { public final annotation class A : kotlin.Annotation {
public /*synthesized*/ constructor A(/*0*/ b: kotlin.Double, /*1*/ x1: java.lang.Class<*>, /*2*/ a: kotlin.Int, /*3*/ x: java.lang.Class<*>, /*4*/ x2: java.lang.Class<*>)
public constructor A(/*0*/ b: kotlin.Double, /*1*/ x1: kotlin.reflect.KClass<*>, /*2*/ a: kotlin.Int, /*3*/ x: kotlin.reflect.KClass<*>, /*4*/ x2: kotlin.reflect.KClass<*>) public constructor A(/*0*/ b: kotlin.Double, /*1*/ x1: kotlin.reflect.KClass<*>, /*2*/ a: kotlin.Int, /*3*/ x: kotlin.reflect.KClass<*>, /*4*/ x2: kotlin.reflect.KClass<*>)
public final val a: kotlin.Int public final val a: kotlin.Int
public final val b: kotlin.Double public final val b: kotlin.Double
@@ -10,7 +10,6 @@ A(value = {}: kotlin.Array<out kotlin.String>, y = IntegerValueType(7): IntegerV
A(value = {"8", "9", "10"}: kotlin.Array<out kotlin.String>) internal fun test8(): kotlin.Unit A(value = {"8", "9", "10"}: kotlin.Array<out kotlin.String>) internal fun test8(): kotlin.Unit
public final annotation class A : kotlin.Annotation { public final annotation class A : kotlin.Annotation {
public /*synthesized*/ constructor A(/*0*/ vararg value: kotlin.String /*kotlin.Array<out kotlin.String>*/, /*1*/ x: java.lang.Class<*> = ..., /*2*/ y: kotlin.Int)
public constructor A(/*0*/ vararg value: kotlin.String /*kotlin.Array<out kotlin.String>*/, /*1*/ x: kotlin.reflect.KClass<*> = ..., /*2*/ y: kotlin.Int) public constructor A(/*0*/ vararg value: kotlin.String /*kotlin.Array<out kotlin.String>*/, /*1*/ x: kotlin.reflect.KClass<*> = ..., /*2*/ y: kotlin.Int)
public final val value: kotlin.Array<kotlin.String> public final val value: kotlin.Array<kotlin.String>
public final val x: kotlin.reflect.KClass<*> public final val x: kotlin.reflect.KClass<*>
@@ -13,7 +13,6 @@ A(value = {}: kotlin.Array<out kotlin.String>) internal fun test8(): kotlin.Unit
A(value = {}: kotlin.Array<out kotlin.String>, x = kotlin.Any::class: kotlin.reflect.KClass<kotlin.Any>, y = IntegerValueType(3): IntegerValueType(3)) internal fun test9(): kotlin.Unit A(value = {}: kotlin.Array<out kotlin.String>, x = kotlin.Any::class: kotlin.reflect.KClass<kotlin.Any>, y = IntegerValueType(3): IntegerValueType(3)) internal fun test9(): kotlin.Unit
public final annotation class A : kotlin.Annotation { public final annotation class A : kotlin.Annotation {
public /*synthesized*/ constructor A(/*0*/ vararg value: kotlin.String /*kotlin.Array<out kotlin.String>*/, /*1*/ x: java.lang.Class<*> = ..., /*2*/ y: kotlin.Int = ...)
public constructor A(/*0*/ vararg value: kotlin.String /*kotlin.Array<out kotlin.String>*/, /*1*/ x: kotlin.reflect.KClass<*> = ..., /*2*/ y: kotlin.Int = ...) public constructor A(/*0*/ vararg value: kotlin.String /*kotlin.Array<out kotlin.String>*/, /*1*/ x: kotlin.reflect.KClass<*> = ..., /*2*/ y: kotlin.Int = ...)
public final val value: kotlin.Array<kotlin.String> public final val value: kotlin.Array<kotlin.String>
public final val x: kotlin.reflect.KClass<*> public final val x: kotlin.reflect.KClass<*>
@@ -1,7 +1,6 @@
package package
public final annotation class A : kotlin.Annotation { public final annotation class A : kotlin.Annotation {
public /*synthesized*/ constructor A(/*0*/ arg: java.lang.Class<*> = ..., /*1*/ x: kotlin.Int = ..., /*2*/ b: B)
public constructor A(/*0*/ arg: kotlin.reflect.KClass<*> = ..., /*1*/ x: kotlin.Int = ..., /*2*/ b: B) public constructor A(/*0*/ arg: kotlin.reflect.KClass<*> = ..., /*1*/ x: kotlin.Int = ..., /*2*/ b: B)
public final val arg: kotlin.reflect.KClass<*> public final val arg: kotlin.reflect.KClass<*>
public final val b: B public final val b: B
@@ -15,7 +14,6 @@ public final annotation class A : kotlin.Annotation {
} }
public final annotation class B : kotlin.Annotation { public final annotation class B : kotlin.Annotation {
public /*synthesized*/ constructor B(/*0*/ arg: java.lang.Class<*> = ..., /*1*/ y: kotlin.Int = ...)
public constructor B(/*0*/ arg: kotlin.reflect.KClass<*> = ..., /*1*/ y: kotlin.Int = ...) public constructor B(/*0*/ arg: kotlin.reflect.KClass<*> = ..., /*1*/ y: kotlin.Int = ...)
public final val arg: kotlin.reflect.KClass<*> public final val arg: kotlin.reflect.KClass<*>
public final val y: kotlin.Int public final val y: kotlin.Int
@@ -1,7 +1,6 @@
package package
public final annotation class A : kotlin.Annotation { public final annotation class A : kotlin.Annotation {
public /*synthesized*/ constructor A(/*0*/ arg: java.lang.Class<*>)
public constructor A(/*0*/ arg: kotlin.reflect.KClass<*>) public constructor A(/*0*/ arg: kotlin.reflect.KClass<*>)
public final val arg: kotlin.reflect.KClass<*> public final val arg: kotlin.reflect.KClass<*>
public abstract fun arg(): kotlin.reflect.KClass<*> public abstract fun arg(): kotlin.reflect.KClass<*>
@@ -1,7 +1,6 @@
package package
public final annotation class A : kotlin.Annotation { public final annotation class A : kotlin.Annotation {
public /*synthesized*/ constructor A(/*0*/ arg: java.lang.Class<*>, /*1*/ x: kotlin.Int = ...)
public constructor A(/*0*/ arg: kotlin.reflect.KClass<*>, /*1*/ x: kotlin.Int = ...) public constructor A(/*0*/ arg: kotlin.reflect.KClass<*>, /*1*/ x: kotlin.Int = ...)
public final val arg: kotlin.reflect.KClass<*> public final val arg: kotlin.reflect.KClass<*>
public final val x: kotlin.Int public final val x: kotlin.Int
@@ -1,7 +1,6 @@
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 constructor A(/*0*/ arg: kotlin.Array<kotlin.reflect.KClass<*>>) public constructor A(/*0*/ arg: kotlin.Array<kotlin.reflect.KClass<*>>)
public final val 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 abstract fun arg(): kotlin.Array<kotlin.reflect.KClass<*>>
@@ -1,7 +1,6 @@
package package
public final annotation class A : kotlin.Annotation { public final annotation class A : kotlin.Annotation {
public /*synthesized*/ constructor A(/*0*/ arg: java.lang.Class<*> = ...)
public constructor A(/*0*/ arg: kotlin.reflect.KClass<*> = ...) public constructor A(/*0*/ arg: kotlin.reflect.KClass<*> = ...)
public final val arg: kotlin.reflect.KClass<*> public final val arg: kotlin.reflect.KClass<*>
public abstract fun arg(): kotlin.reflect.KClass<*> public abstract fun arg(): kotlin.reflect.KClass<*>
@@ -1,7 +1,6 @@
package package
public final annotation class A : kotlin.Annotation { public final annotation class A : kotlin.Annotation {
public /*synthesized*/ constructor A(/*0*/ arg: java.lang.Class<*> = ..., /*1*/ x: kotlin.Int)
public constructor A(/*0*/ arg: kotlin.reflect.KClass<*> = ..., /*1*/ x: kotlin.Int) public constructor A(/*0*/ arg: kotlin.reflect.KClass<*> = ..., /*1*/ x: kotlin.Int)
public final val arg: kotlin.reflect.KClass<*> public final val arg: kotlin.reflect.KClass<*>
public final val x: kotlin.Int public final val x: kotlin.Int
@@ -1,7 +1,6 @@
package package
public final annotation class A : kotlin.Annotation { public final annotation class A : kotlin.Annotation {
public /*synthesized*/ constructor A(/*0*/ arg1: java.lang.Class<*>, /*1*/ arg2: java.lang.Class<*>)
public constructor A(/*0*/ arg1: kotlin.reflect.KClass<*>, /*1*/ arg2: kotlin.reflect.KClass<*>) public constructor A(/*0*/ arg1: kotlin.reflect.KClass<*>, /*1*/ arg2: kotlin.reflect.KClass<*>)
public final val arg1: kotlin.reflect.KClass<*> public final val arg1: kotlin.reflect.KClass<*>
public final val arg2: kotlin.reflect.KClass<*> public final val arg2: kotlin.reflect.KClass<*>
@@ -1,7 +1,6 @@
package package
public final annotation class A : kotlin.Annotation { public final annotation class A : kotlin.Annotation {
public /*synthesized*/ constructor A(/*0*/ value: java.lang.Class<*>)
public constructor A(/*0*/ value: kotlin.reflect.KClass<*>) public constructor A(/*0*/ value: kotlin.reflect.KClass<*>)
public final val value: kotlin.reflect.KClass<*> public final val value: 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
@@ -1,7 +1,6 @@
package package
public final annotation class A : kotlin.Annotation { public final annotation class A : kotlin.Annotation {
public /*synthesized*/ constructor A(/*0*/ value: java.lang.Class<*>, /*1*/ x: kotlin.Int = ...)
public constructor A(/*0*/ value: kotlin.reflect.KClass<*>, /*1*/ x: kotlin.Int = ...) public constructor A(/*0*/ value: kotlin.reflect.KClass<*>, /*1*/ x: kotlin.Int = ...)
public final val value: kotlin.reflect.KClass<*> public final val value: kotlin.reflect.KClass<*>
public final val x: kotlin.Int public final val x: kotlin.Int
@@ -1,7 +1,6 @@
package package
public final annotation class A : kotlin.Annotation { public final annotation class A : kotlin.Annotation {
public /*synthesized*/ constructor A(/*0*/ vararg value: java.lang.Class<*> /*kotlin.Array<out java.lang.Class<*>>*/)
public constructor A(/*0*/ vararg value: kotlin.reflect.KClass<*> /*kotlin.Array<out kotlin.reflect.KClass<*>>*/) public constructor A(/*0*/ vararg value: kotlin.reflect.KClass<*> /*kotlin.Array<out kotlin.reflect.KClass<*>>*/)
public final val value: kotlin.Array<kotlin.reflect.KClass<*>> public final val value: 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
@@ -1,7 +1,6 @@
package package
public final annotation class A : kotlin.Annotation { public final annotation class A : kotlin.Annotation {
public /*synthesized*/ constructor A(/*0*/ value: java.lang.Class<*> = ...)
public constructor A(/*0*/ value: kotlin.reflect.KClass<*> = ...) public constructor A(/*0*/ value: kotlin.reflect.KClass<*> = ...)
public final val value: kotlin.reflect.KClass<*> public final val value: 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
@@ -1,7 +1,6 @@
package package
public final annotation class A : kotlin.Annotation { public final annotation class A : kotlin.Annotation {
public /*synthesized*/ constructor A(/*0*/ value: java.lang.Class<*> = ..., /*1*/ x: kotlin.Int)
public constructor A(/*0*/ value: kotlin.reflect.KClass<*> = ..., /*1*/ x: kotlin.Int) public constructor A(/*0*/ value: kotlin.reflect.KClass<*> = ..., /*1*/ x: kotlin.Int)
public final val value: kotlin.reflect.KClass<*> public final val value: kotlin.reflect.KClass<*>
public final val x: kotlin.Int public final val x: kotlin.Int
@@ -4,7 +4,6 @@ public open class ClassObjectArrayInParam {
public constructor ClassObjectArrayInParam() public constructor ClassObjectArrayInParam()
public final annotation class Anno : kotlin.Annotation { public final annotation class Anno : kotlin.Annotation {
public /*synthesized*/ constructor Anno(/*0*/ vararg value: java.lang.Class<*> /*kotlin.Array<out java.lang.Class<*>>*/)
public constructor Anno(/*0*/ vararg value: kotlin.reflect.KClass<*> /*kotlin.Array<out kotlin.reflect.KClass<*>>*/) public constructor Anno(/*0*/ vararg value: kotlin.reflect.KClass<*> /*kotlin.Array<out kotlin.reflect.KClass<*>>*/)
public final val value: kotlin.Array<kotlin.reflect.KClass<*>> public final val value: kotlin.Array<kotlin.reflect.KClass<*>>
public abstract fun value(): kotlin.Array<kotlin.reflect.KClass<*>> public abstract fun value(): kotlin.Array<kotlin.reflect.KClass<*>>
@@ -4,7 +4,6 @@ public open class ClassObjectInParam {
public constructor ClassObjectInParam() public constructor ClassObjectInParam()
public final annotation class Anno : kotlin.Annotation { public final annotation class Anno : kotlin.Annotation {
public /*synthesized*/ constructor Anno(/*0*/ value: java.lang.Class<*>)
public constructor Anno(/*0*/ value: kotlin.reflect.KClass<*>) public constructor Anno(/*0*/ value: kotlin.reflect.KClass<*>)
public final val value: kotlin.reflect.KClass<*> public final val value: kotlin.reflect.KClass<*>
public abstract fun value(): kotlin.reflect.KClass<*> public abstract fun value(): kotlin.reflect.KClass<*>
@@ -4,7 +4,6 @@ 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 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<kotlin.reflect.KClass<*>>)
public final val arg: kotlin.Array<kotlin.reflect.KClass<*>> public final val arg: kotlin.Array<kotlin.reflect.KClass<*>>
public final val value: kotlin.reflect.KClass<*> public final val value: kotlin.reflect.KClass<*>
@@ -4,7 +4,6 @@ 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 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<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 arg1: kotlin.reflect.KClass<out kotlin.Int!>
public final val arg2: kotlin.reflect.KClass<in kotlin.Int!> public final val arg2: kotlin.reflect.KClass<in kotlin.Int!>
@@ -78,6 +78,7 @@ public final class DescriptorResolverUtils {
@Nullable @Nullable
public static ValueParameterDescriptor getAnnotationParameterByName(@NotNull Name name, @NotNull ClassDescriptor annotationClass) { public static ValueParameterDescriptor getAnnotationParameterByName(@NotNull Name name, @NotNull ClassDescriptor annotationClass) {
Collection<ConstructorDescriptor> constructors = annotationClass.getConstructors(); Collection<ConstructorDescriptor> constructors = annotationClass.getConstructors();
assert constructors.size() == 1 : "Annotation class descriptor must have only one constructor";
for (ValueParameterDescriptor parameter : constructors.iterator().next().getValueParameters()) { for (ValueParameterDescriptor parameter : constructors.iterator().next().getValueParameters()) {
if (parameter.getName().equals(name)) { if (parameter.getName().equals(name)) {
@@ -18,7 +18,10 @@ package org.jetbrains.kotlin.load.java.descriptors;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.Nullable;
import org.jetbrains.kotlin.descriptors.*; import org.jetbrains.kotlin.descriptors.ClassDescriptor;
import org.jetbrains.kotlin.descriptors.DeclarationDescriptor;
import org.jetbrains.kotlin.descriptors.FunctionDescriptor;
import org.jetbrains.kotlin.descriptors.SourceElement;
import org.jetbrains.kotlin.descriptors.annotations.Annotations; import org.jetbrains.kotlin.descriptors.annotations.Annotations;
import org.jetbrains.kotlin.descriptors.impl.ConstructorDescriptorImpl; import org.jetbrains.kotlin.descriptors.impl.ConstructorDescriptorImpl;
@@ -42,10 +45,9 @@ public class JavaConstructorDescriptor extends ConstructorDescriptorImpl impleme
@NotNull ClassDescriptor containingDeclaration, @NotNull ClassDescriptor containingDeclaration,
@NotNull Annotations annotations, @NotNull Annotations annotations,
boolean isPrimary, boolean isPrimary,
@NotNull SourceElement source, @NotNull SourceElement source
Kind kind
) { ) {
return new JavaConstructorDescriptor(containingDeclaration, null, annotations, isPrimary, kind, source); return new JavaConstructorDescriptor(containingDeclaration, null, annotations, isPrimary, Kind.DECLARATION, source);
} }
@Override @Override
@@ -16,7 +16,6 @@
package org.jetbrains.kotlin.load.java.lazy.descriptors package org.jetbrains.kotlin.load.java.lazy.descriptors
import org.jetbrains.kotlin.builtins.KotlinBuiltIns
import org.jetbrains.kotlin.descriptors.* import org.jetbrains.kotlin.descriptors.*
import org.jetbrains.kotlin.descriptors.annotations.Annotations import org.jetbrains.kotlin.descriptors.annotations.Annotations
import org.jetbrains.kotlin.descriptors.impl.ConstructorDescriptorImpl import org.jetbrains.kotlin.descriptors.impl.ConstructorDescriptorImpl
@@ -39,10 +38,7 @@ import org.jetbrains.kotlin.resolve.DescriptorUtils
import org.jetbrains.kotlin.resolve.scopes.DescriptorKindFilter import org.jetbrains.kotlin.resolve.scopes.DescriptorKindFilter
import org.jetbrains.kotlin.types.JetType import org.jetbrains.kotlin.types.JetType
import org.jetbrains.kotlin.types.TypeUtils import org.jetbrains.kotlin.types.TypeUtils
import org.jetbrains.kotlin.utils.addIfNotNull import org.jetbrains.kotlin.utils.*
import org.jetbrains.kotlin.utils.ifEmpty
import org.jetbrains.kotlin.utils.singletonOrEmptyList
import org.jetbrains.kotlin.utils.valuesToMap
import java.util.ArrayList import java.util.ArrayList
import java.util.Collections import java.util.Collections
import java.util.LinkedHashSet import java.util.LinkedHashSet
@@ -69,7 +65,7 @@ public class LazyJavaClassMemberScope(
result.add(descriptor) result.add(descriptor)
result.addIfNotNull(c.samConversionResolver.resolveSamAdapter(descriptor)) result.addIfNotNull(c.samConversionResolver.resolveSamAdapter(descriptor))
} }
result ifEmpty { createDefaultConstructors() } result ifEmpty { emptyOrSingletonList(createDefaultConstructor()) }
} }
override fun computeNonDeclaredFunctions(result: MutableCollection<SimpleFunctionDescriptor>, name: Name) { override fun computeNonDeclaredFunctions(result: MutableCollection<SimpleFunctionDescriptor>, name: Name) {
@@ -140,8 +136,7 @@ public class LazyJavaClassMemberScope(
val classDescriptor = getContainingDeclaration() val classDescriptor = getContainingDeclaration()
val constructorDescriptor = JavaConstructorDescriptor.createJavaConstructor( val constructorDescriptor = JavaConstructorDescriptor.createJavaConstructor(
classDescriptor, c.resolveAnnotations(constructor), false, c.sourceElementFactory.source(constructor), classDescriptor, c.resolveAnnotations(constructor), /* isPrimary = */ false, c.sourceElementFactory.source(constructor)
CallableMemberDescriptor.Kind.DECLARATION
) )
val valueParameters = resolveValueParameters(c, constructorDescriptor, constructor.getValueParameters()) val valueParameters = resolveValueParameters(c, constructorDescriptor, constructor.getValueParameters())
@@ -168,45 +163,24 @@ public class LazyJavaClassMemberScope(
return constructorDescriptor return constructorDescriptor
} }
private fun createDefaultConstructors(): List<ConstructorDescriptor> { private fun createDefaultConstructor(): ConstructorDescriptor? {
val isAnnotation = jClass.isAnnotationType() val isAnnotation: Boolean = jClass.isAnnotationType()
if (jClass.isInterface() && !isAnnotation) if (jClass.isInterface() && !isAnnotation)
return emptyList() return null
val defaultConstructor = createDefaultConstructor(true)
val additionalConstructor =
if (isAnnotation && defaultConstructor.getValueParameters().any { it.getType().isKClassOrArray() })
createDefaultConstructor(false)
else null
return listOf(defaultConstructor) + additionalConstructor.singletonOrEmptyList()
}
private fun JetType.isKClassOrArray() = isKClass() || (KotlinBuiltIns.isArray(this) && getArguments().first().getType().isKClass())
private fun JetType.isKClass() =
(getConstructor().getDeclarationDescriptor() as? ClassDescriptor)?.let { KotlinBuiltIns.isKClass(it) } ?: false
private fun createDefaultConstructor(isPrimary: Boolean): JavaConstructorDescriptor {
val isAnnotation = jClass.isAnnotationType()
val classDescriptor = getContainingDeclaration() val classDescriptor = getContainingDeclaration()
val constructorDescriptor = JavaConstructorDescriptor.createJavaConstructor( val constructorDescriptor = JavaConstructorDescriptor.createJavaConstructor(
classDescriptor, Annotations.EMPTY, isPrimary, c.sourceElementFactory.source(jClass), classDescriptor, Annotations.EMPTY, /* isPrimary = */ true, c.sourceElementFactory.source(jClass)
if (isPrimary) CallableMemberDescriptor.Kind.DECLARATION else CallableMemberDescriptor.Kind.SYNTHESIZED
) )
val typeParameters = classDescriptor.getTypeConstructor().getParameters() val typeParameters = classDescriptor.getTypeConstructor().getParameters()
val valueParameters = if (isAnnotation) createAnnotationConstructorParameters(constructorDescriptor, isPrimary) val valueParameters = if (isAnnotation) createAnnotationConstructorParameters(constructorDescriptor)
else Collections.emptyList<ValueParameterDescriptor>() else Collections.emptyList<ValueParameterDescriptor>()
constructorDescriptor.setHasSynthesizedParameterNames(false) constructorDescriptor.setHasSynthesizedParameterNames(false)
constructorDescriptor.initialize(typeParameters, valueParameters, getConstructorVisibility(classDescriptor)) constructorDescriptor.initialize(typeParameters, valueParameters, getConstructorVisibility(classDescriptor))
constructorDescriptor.setHasStableParameterNames(true) constructorDescriptor.setHasStableParameterNames(true)
constructorDescriptor.setReturnType(classDescriptor.getDefaultType()) constructorDescriptor.setReturnType(classDescriptor.getDefaultType())
if (isPrimary) { c.javaResolverCache.recordConstructor(jClass, constructorDescriptor);
c.javaResolverCache.recordConstructor(jClass, constructorDescriptor)
}
return constructorDescriptor return constructorDescriptor
} }
@@ -218,15 +192,11 @@ public class LazyJavaClassMemberScope(
return visibility return visibility
} }
private fun createAnnotationConstructorParameters( private fun createAnnotationConstructorParameters(constructor: ConstructorDescriptorImpl): List<ValueParameterDescriptor> {
constructor: ConstructorDescriptorImpl,
loadJavaClassAsKClass: Boolean
): List<ValueParameterDescriptor> {
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( val attr = TypeUsage.MEMBER_SIGNATURE_INVARIANT.toAttributes(allowFlexible = false, isForAnnotationParameter = true)
allowFlexible = false, isForAnnotationParameter = loadJavaClassAsKClass)
val (methodsNamedValue, otherMethods) = methods. val (methodsNamedValue, otherMethods) = methods.
partition { it.getName() == JvmAnnotationNames.DEFAULT_ANNOTATION_MEMBER_NAME } partition { it.getName() == JvmAnnotationNames.DEFAULT_ANNOTATION_MEMBER_NAME }