From 2e284718ceaf6b16086d986f59afc494719a513f Mon Sep 17 00:00:00 2001 From: Denis Zharkov Date: Tue, 9 Jun 2015 16:16:01 +0300 Subject: [PATCH] Revert "Create additional constructor for java annotation with Class-parameter" This reverts commit 8f0e290deccf6990ceaca13ad70ab387554877ec. --- .../annotationParameters/orderWithValue.txt | 1 - .../orderWithoutValue.txt | 1 - .../annotationParameters/valueArray.txt | 1 - .../valueArrayAndOtherDefault.txt | 1 - .../annotationAsArgument.txt | 2 - .../arg.txt | 1 - .../argAndOtherDefault.txt | 1 - .../argArray.txt | 1 - .../argWithDefault.txt | 1 - .../argWithDefaultAndOther.txt | 1 - .../twoArgs.txt | 1 - .../value.txt | 1 - .../valueAndOtherDefault.txt | 1 - .../valueArray.txt | 1 - .../valueWithDefault.txt | 1 - .../valueWithDefaultAndOther.txt | 1 - .../annotations/ClassObjectArrayInParam.txt | 1 - .../annotations/ClassObjectInParam.txt | 1 - .../annotations/ClassObjectInParamRaw.txt | 1 - .../ClassObjectInParamVariance.txt | 1 - .../components/DescriptorResolverUtils.java | 1 + .../JavaConstructorDescriptor.java | 10 ++-- .../descriptors/LazyJavaClassMemberScope.kt | 52 ++++--------------- 23 files changed, 18 insertions(+), 66 deletions(-) diff --git a/compiler/testData/diagnostics/testsWithStdLib/annotations/annotationParameters/orderWithValue.txt b/compiler/testData/diagnostics/testsWithStdLib/annotations/annotationParameters/orderWithValue.txt index ce79ad666ce..8eb4cc4a5cc 100644 --- a/compiler/testData/diagnostics/testsWithStdLib/annotations/annotationParameters/orderWithValue.txt +++ b/compiler/testData/diagnostics/testsWithStdLib/annotations/annotationParameters/orderWithValue.txt @@ -1,7 +1,6 @@ package 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 final val a: kotlin.Int public final val b: kotlin.Double diff --git a/compiler/testData/diagnostics/testsWithStdLib/annotations/annotationParameters/orderWithoutValue.txt b/compiler/testData/diagnostics/testsWithStdLib/annotations/annotationParameters/orderWithoutValue.txt index ad682e93e5e..df8f9fb54aa 100644 --- a/compiler/testData/diagnostics/testsWithStdLib/annotations/annotationParameters/orderWithoutValue.txt +++ b/compiler/testData/diagnostics/testsWithStdLib/annotations/annotationParameters/orderWithoutValue.txt @@ -1,7 +1,6 @@ package 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 final val a: kotlin.Int public final val b: kotlin.Double diff --git a/compiler/testData/diagnostics/testsWithStdLib/annotations/annotationParameters/valueArray.txt b/compiler/testData/diagnostics/testsWithStdLib/annotations/annotationParameters/valueArray.txt index d348cdc8c6e..c75f9743c82 100644 --- a/compiler/testData/diagnostics/testsWithStdLib/annotations/annotationParameters/valueArray.txt +++ b/compiler/testData/diagnostics/testsWithStdLib/annotations/annotationParameters/valueArray.txt @@ -10,7 +10,6 @@ A(value = {}: kotlin.Array, y = IntegerValueType(7): IntegerV A(value = {"8", "9", "10"}: kotlin.Array) internal fun test8(): kotlin.Unit public final annotation class A : kotlin.Annotation { - public /*synthesized*/ constructor A(/*0*/ vararg value: kotlin.String /*kotlin.Array*/, /*1*/ x: java.lang.Class<*> = ..., /*2*/ y: kotlin.Int) public constructor A(/*0*/ vararg value: kotlin.String /*kotlin.Array*/, /*1*/ x: kotlin.reflect.KClass<*> = ..., /*2*/ y: kotlin.Int) public final val value: kotlin.Array public final val x: kotlin.reflect.KClass<*> diff --git a/compiler/testData/diagnostics/testsWithStdLib/annotations/annotationParameters/valueArrayAndOtherDefault.txt b/compiler/testData/diagnostics/testsWithStdLib/annotations/annotationParameters/valueArrayAndOtherDefault.txt index b456fd40399..406b9293b45 100644 --- a/compiler/testData/diagnostics/testsWithStdLib/annotations/annotationParameters/valueArrayAndOtherDefault.txt +++ b/compiler/testData/diagnostics/testsWithStdLib/annotations/annotationParameters/valueArrayAndOtherDefault.txt @@ -13,7 +13,6 @@ A(value = {}: kotlin.Array) internal fun test8(): kotlin.Unit A(value = {}: kotlin.Array, x = kotlin.Any::class: kotlin.reflect.KClass, y = IntegerValueType(3): IntegerValueType(3)) internal fun test9(): kotlin.Unit public final annotation class A : kotlin.Annotation { - public /*synthesized*/ constructor A(/*0*/ vararg value: kotlin.String /*kotlin.Array*/, /*1*/ x: java.lang.Class<*> = ..., /*2*/ y: kotlin.Int = ...) public constructor A(/*0*/ vararg value: kotlin.String /*kotlin.Array*/, /*1*/ x: kotlin.reflect.KClass<*> = ..., /*2*/ y: kotlin.Int = ...) public final val value: kotlin.Array public final val x: kotlin.reflect.KClass<*> diff --git a/compiler/testData/diagnostics/testsWithStdLib/annotations/javaAnnotationsWithKClassParameter/annotationAsArgument.txt b/compiler/testData/diagnostics/testsWithStdLib/annotations/javaAnnotationsWithKClassParameter/annotationAsArgument.txt index a0ff1950ab8..8d102d2b2cb 100644 --- a/compiler/testData/diagnostics/testsWithStdLib/annotations/javaAnnotationsWithKClassParameter/annotationAsArgument.txt +++ b/compiler/testData/diagnostics/testsWithStdLib/annotations/javaAnnotationsWithKClassParameter/annotationAsArgument.txt @@ -1,7 +1,6 @@ package 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 final val arg: kotlin.reflect.KClass<*> public final val b: B @@ -15,7 +14,6 @@ public final annotation class A : 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 final val arg: kotlin.reflect.KClass<*> public final val y: kotlin.Int diff --git a/compiler/testData/diagnostics/testsWithStdLib/annotations/javaAnnotationsWithKClassParameter/arg.txt b/compiler/testData/diagnostics/testsWithStdLib/annotations/javaAnnotationsWithKClassParameter/arg.txt index 7aa13ba155e..631dcd09ee9 100644 --- a/compiler/testData/diagnostics/testsWithStdLib/annotations/javaAnnotationsWithKClassParameter/arg.txt +++ b/compiler/testData/diagnostics/testsWithStdLib/annotations/javaAnnotationsWithKClassParameter/arg.txt @@ -1,7 +1,6 @@ package 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 final val arg: kotlin.reflect.KClass<*> public abstract fun arg(): kotlin.reflect.KClass<*> diff --git a/compiler/testData/diagnostics/testsWithStdLib/annotations/javaAnnotationsWithKClassParameter/argAndOtherDefault.txt b/compiler/testData/diagnostics/testsWithStdLib/annotations/javaAnnotationsWithKClassParameter/argAndOtherDefault.txt index 76339fe6789..1540a77d953 100644 --- a/compiler/testData/diagnostics/testsWithStdLib/annotations/javaAnnotationsWithKClassParameter/argAndOtherDefault.txt +++ b/compiler/testData/diagnostics/testsWithStdLib/annotations/javaAnnotationsWithKClassParameter/argAndOtherDefault.txt @@ -1,7 +1,6 @@ package 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 final val arg: kotlin.reflect.KClass<*> public final val x: kotlin.Int diff --git a/compiler/testData/diagnostics/testsWithStdLib/annotations/javaAnnotationsWithKClassParameter/argArray.txt b/compiler/testData/diagnostics/testsWithStdLib/annotations/javaAnnotationsWithKClassParameter/argArray.txt index 253e94cc909..48e96760457 100644 --- a/compiler/testData/diagnostics/testsWithStdLib/annotations/javaAnnotationsWithKClassParameter/argArray.txt +++ b/compiler/testData/diagnostics/testsWithStdLib/annotations/javaAnnotationsWithKClassParameter/argArray.txt @@ -1,7 +1,6 @@ package public final annotation class A : kotlin.Annotation { - public /*synthesized*/ constructor A(/*0*/ arg: kotlin.Array>) public constructor A(/*0*/ arg: kotlin.Array>) public final val arg: kotlin.Array> public abstract fun arg(): kotlin.Array> diff --git a/compiler/testData/diagnostics/testsWithStdLib/annotations/javaAnnotationsWithKClassParameter/argWithDefault.txt b/compiler/testData/diagnostics/testsWithStdLib/annotations/javaAnnotationsWithKClassParameter/argWithDefault.txt index ee9c680af0b..5c1da464297 100644 --- a/compiler/testData/diagnostics/testsWithStdLib/annotations/javaAnnotationsWithKClassParameter/argWithDefault.txt +++ b/compiler/testData/diagnostics/testsWithStdLib/annotations/javaAnnotationsWithKClassParameter/argWithDefault.txt @@ -1,7 +1,6 @@ package 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 final val arg: kotlin.reflect.KClass<*> public abstract fun arg(): kotlin.reflect.KClass<*> diff --git a/compiler/testData/diagnostics/testsWithStdLib/annotations/javaAnnotationsWithKClassParameter/argWithDefaultAndOther.txt b/compiler/testData/diagnostics/testsWithStdLib/annotations/javaAnnotationsWithKClassParameter/argWithDefaultAndOther.txt index 3a13be46865..30359b05a67 100644 --- a/compiler/testData/diagnostics/testsWithStdLib/annotations/javaAnnotationsWithKClassParameter/argWithDefaultAndOther.txt +++ b/compiler/testData/diagnostics/testsWithStdLib/annotations/javaAnnotationsWithKClassParameter/argWithDefaultAndOther.txt @@ -1,7 +1,6 @@ package 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 final val arg: kotlin.reflect.KClass<*> public final val x: kotlin.Int diff --git a/compiler/testData/diagnostics/testsWithStdLib/annotations/javaAnnotationsWithKClassParameter/twoArgs.txt b/compiler/testData/diagnostics/testsWithStdLib/annotations/javaAnnotationsWithKClassParameter/twoArgs.txt index bcc19fafcf8..2fb26f1f70c 100644 --- a/compiler/testData/diagnostics/testsWithStdLib/annotations/javaAnnotationsWithKClassParameter/twoArgs.txt +++ b/compiler/testData/diagnostics/testsWithStdLib/annotations/javaAnnotationsWithKClassParameter/twoArgs.txt @@ -1,7 +1,6 @@ package 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 final val arg1: kotlin.reflect.KClass<*> public final val arg2: kotlin.reflect.KClass<*> diff --git a/compiler/testData/diagnostics/testsWithStdLib/annotations/javaAnnotationsWithKClassParameter/value.txt b/compiler/testData/diagnostics/testsWithStdLib/annotations/javaAnnotationsWithKClassParameter/value.txt index 8b622f3016e..c8a4d1be80f 100644 --- a/compiler/testData/diagnostics/testsWithStdLib/annotations/javaAnnotationsWithKClassParameter/value.txt +++ b/compiler/testData/diagnostics/testsWithStdLib/annotations/javaAnnotationsWithKClassParameter/value.txt @@ -1,7 +1,6 @@ package 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 final val value: kotlin.reflect.KClass<*> public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean diff --git a/compiler/testData/diagnostics/testsWithStdLib/annotations/javaAnnotationsWithKClassParameter/valueAndOtherDefault.txt b/compiler/testData/diagnostics/testsWithStdLib/annotations/javaAnnotationsWithKClassParameter/valueAndOtherDefault.txt index ca78e648e5b..1dbf8aefd33 100644 --- a/compiler/testData/diagnostics/testsWithStdLib/annotations/javaAnnotationsWithKClassParameter/valueAndOtherDefault.txt +++ b/compiler/testData/diagnostics/testsWithStdLib/annotations/javaAnnotationsWithKClassParameter/valueAndOtherDefault.txt @@ -1,7 +1,6 @@ package 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 final val value: kotlin.reflect.KClass<*> public final val x: kotlin.Int diff --git a/compiler/testData/diagnostics/testsWithStdLib/annotations/javaAnnotationsWithKClassParameter/valueArray.txt b/compiler/testData/diagnostics/testsWithStdLib/annotations/javaAnnotationsWithKClassParameter/valueArray.txt index 139a443d13a..f639e0681ae 100644 --- a/compiler/testData/diagnostics/testsWithStdLib/annotations/javaAnnotationsWithKClassParameter/valueArray.txt +++ b/compiler/testData/diagnostics/testsWithStdLib/annotations/javaAnnotationsWithKClassParameter/valueArray.txt @@ -1,7 +1,6 @@ package public final annotation class A : kotlin.Annotation { - public /*synthesized*/ constructor A(/*0*/ vararg value: java.lang.Class<*> /*kotlin.Array>*/) public constructor A(/*0*/ vararg value: kotlin.reflect.KClass<*> /*kotlin.Array>*/) public final val value: kotlin.Array> public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean diff --git a/compiler/testData/diagnostics/testsWithStdLib/annotations/javaAnnotationsWithKClassParameter/valueWithDefault.txt b/compiler/testData/diagnostics/testsWithStdLib/annotations/javaAnnotationsWithKClassParameter/valueWithDefault.txt index 933638fcd64..cead2117d1b 100644 --- a/compiler/testData/diagnostics/testsWithStdLib/annotations/javaAnnotationsWithKClassParameter/valueWithDefault.txt +++ b/compiler/testData/diagnostics/testsWithStdLib/annotations/javaAnnotationsWithKClassParameter/valueWithDefault.txt @@ -1,7 +1,6 @@ package 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 final val value: kotlin.reflect.KClass<*> public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean diff --git a/compiler/testData/diagnostics/testsWithStdLib/annotations/javaAnnotationsWithKClassParameter/valueWithDefaultAndOther.txt b/compiler/testData/diagnostics/testsWithStdLib/annotations/javaAnnotationsWithKClassParameter/valueWithDefaultAndOther.txt index bd250c82948..88318b6a0ef 100644 --- a/compiler/testData/diagnostics/testsWithStdLib/annotations/javaAnnotationsWithKClassParameter/valueWithDefaultAndOther.txt +++ b/compiler/testData/diagnostics/testsWithStdLib/annotations/javaAnnotationsWithKClassParameter/valueWithDefaultAndOther.txt @@ -1,7 +1,6 @@ package 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 final val value: kotlin.reflect.KClass<*> public final val x: kotlin.Int diff --git a/compiler/testData/loadJava/compiledJava/annotations/ClassObjectArrayInParam.txt b/compiler/testData/loadJava/compiledJava/annotations/ClassObjectArrayInParam.txt index 3a409b37fbe..cc1a8046442 100644 --- a/compiler/testData/loadJava/compiledJava/annotations/ClassObjectArrayInParam.txt +++ b/compiler/testData/loadJava/compiledJava/annotations/ClassObjectArrayInParam.txt @@ -4,7 +4,6 @@ public open class ClassObjectArrayInParam { public constructor ClassObjectArrayInParam() public final annotation class Anno : kotlin.Annotation { - public /*synthesized*/ constructor Anno(/*0*/ vararg value: java.lang.Class<*> /*kotlin.Array>*/) public constructor Anno(/*0*/ vararg value: kotlin.reflect.KClass<*> /*kotlin.Array>*/) public final val value: kotlin.Array> public abstract fun value(): kotlin.Array> diff --git a/compiler/testData/loadJava/compiledJava/annotations/ClassObjectInParam.txt b/compiler/testData/loadJava/compiledJava/annotations/ClassObjectInParam.txt index 2e6b13c6775..e72f3d006b8 100644 --- a/compiler/testData/loadJava/compiledJava/annotations/ClassObjectInParam.txt +++ b/compiler/testData/loadJava/compiledJava/annotations/ClassObjectInParam.txt @@ -4,7 +4,6 @@ public open class ClassObjectInParam { public constructor ClassObjectInParam() 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 final val value: kotlin.reflect.KClass<*> public abstract fun value(): kotlin.reflect.KClass<*> diff --git a/compiler/testData/loadJava/compiledJava/annotations/ClassObjectInParamRaw.txt b/compiler/testData/loadJava/compiledJava/annotations/ClassObjectInParamRaw.txt index c2b5b35bb52..a3a66e73a33 100644 --- a/compiler/testData/loadJava/compiledJava/annotations/ClassObjectInParamRaw.txt +++ b/compiler/testData/loadJava/compiledJava/annotations/ClassObjectInParamRaw.txt @@ -4,7 +4,6 @@ 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>) public constructor Anno(/*0*/ value: kotlin.reflect.KClass<*>, /*1*/ arg: kotlin.Array>) public final val arg: kotlin.Array> public final val value: kotlin.reflect.KClass<*> diff --git a/compiler/testData/loadJava/compiledJava/annotations/ClassObjectInParamVariance.txt b/compiler/testData/loadJava/compiledJava/annotations/ClassObjectInParamVariance.txt index 4141de66107..da7962c1fcc 100644 --- a/compiler/testData/loadJava/compiledJava/annotations/ClassObjectInParamVariance.txt +++ b/compiler/testData/loadJava/compiledJava/annotations/ClassObjectInParamVariance.txt @@ -4,7 +4,6 @@ public open class ClassObjectInParamVariance { public constructor ClassObjectInParamVariance() public final annotation class Anno : kotlin.Annotation { - public /*synthesized*/ constructor Anno(/*0*/ arg1: java.lang.Class, /*1*/ arg2: java.lang.Class, /*2*/ arg3: kotlin.Array>, /*3*/ arg4: kotlin.Array>, /*4*/ arg5: kotlin.Array!>>, /*5*/ arg6: kotlin.Array!>>, /*6*/ arg7: kotlin.Array!>>, /*7*/ arg8: kotlin.Array!>>) public constructor Anno(/*0*/ arg1: kotlin.reflect.KClass, /*1*/ arg2: kotlin.reflect.KClass, /*2*/ arg3: kotlin.Array>, /*3*/ arg4: kotlin.Array>, /*4*/ arg5: kotlin.Array!>>, /*5*/ arg6: kotlin.Array!>>, /*6*/ arg7: kotlin.Array!>>, /*7*/ arg8: kotlin.Array!>>) public final val arg1: kotlin.reflect.KClass public final val arg2: kotlin.reflect.KClass diff --git a/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/java/components/DescriptorResolverUtils.java b/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/java/components/DescriptorResolverUtils.java index d501e953c85..5339279af47 100644 --- a/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/java/components/DescriptorResolverUtils.java +++ b/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/java/components/DescriptorResolverUtils.java @@ -78,6 +78,7 @@ public final class DescriptorResolverUtils { @Nullable public static ValueParameterDescriptor getAnnotationParameterByName(@NotNull Name name, @NotNull ClassDescriptor annotationClass) { Collection constructors = annotationClass.getConstructors(); + assert constructors.size() == 1 : "Annotation class descriptor must have only one constructor"; for (ValueParameterDescriptor parameter : constructors.iterator().next().getValueParameters()) { if (parameter.getName().equals(name)) { diff --git a/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/java/descriptors/JavaConstructorDescriptor.java b/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/java/descriptors/JavaConstructorDescriptor.java index c01054e521a..562e767dff2 100644 --- a/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/java/descriptors/JavaConstructorDescriptor.java +++ b/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/java/descriptors/JavaConstructorDescriptor.java @@ -18,7 +18,10 @@ package org.jetbrains.kotlin.load.java.descriptors; import org.jetbrains.annotations.NotNull; 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.impl.ConstructorDescriptorImpl; @@ -42,10 +45,9 @@ public class JavaConstructorDescriptor extends ConstructorDescriptorImpl impleme @NotNull ClassDescriptor containingDeclaration, @NotNull Annotations annotations, boolean isPrimary, - @NotNull SourceElement source, - Kind kind + @NotNull SourceElement source ) { - return new JavaConstructorDescriptor(containingDeclaration, null, annotations, isPrimary, kind, source); + return new JavaConstructorDescriptor(containingDeclaration, null, annotations, isPrimary, Kind.DECLARATION, source); } @Override diff --git a/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/java/lazy/descriptors/LazyJavaClassMemberScope.kt b/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/java/lazy/descriptors/LazyJavaClassMemberScope.kt index ea21245b373..ff353cf30bf 100644 --- a/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/java/lazy/descriptors/LazyJavaClassMemberScope.kt +++ b/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/java/lazy/descriptors/LazyJavaClassMemberScope.kt @@ -16,7 +16,6 @@ package org.jetbrains.kotlin.load.java.lazy.descriptors -import org.jetbrains.kotlin.builtins.KotlinBuiltIns import org.jetbrains.kotlin.descriptors.* import org.jetbrains.kotlin.descriptors.annotations.Annotations 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.types.JetType import org.jetbrains.kotlin.types.TypeUtils -import org.jetbrains.kotlin.utils.addIfNotNull -import org.jetbrains.kotlin.utils.ifEmpty -import org.jetbrains.kotlin.utils.singletonOrEmptyList -import org.jetbrains.kotlin.utils.valuesToMap +import org.jetbrains.kotlin.utils.* import java.util.ArrayList import java.util.Collections import java.util.LinkedHashSet @@ -69,7 +65,7 @@ public class LazyJavaClassMemberScope( result.add(descriptor) result.addIfNotNull(c.samConversionResolver.resolveSamAdapter(descriptor)) } - result ifEmpty { createDefaultConstructors() } + result ifEmpty { emptyOrSingletonList(createDefaultConstructor()) } } override fun computeNonDeclaredFunctions(result: MutableCollection, name: Name) { @@ -140,8 +136,7 @@ public class LazyJavaClassMemberScope( val classDescriptor = getContainingDeclaration() val constructorDescriptor = JavaConstructorDescriptor.createJavaConstructor( - classDescriptor, c.resolveAnnotations(constructor), false, c.sourceElementFactory.source(constructor), - CallableMemberDescriptor.Kind.DECLARATION + classDescriptor, c.resolveAnnotations(constructor), /* isPrimary = */ false, c.sourceElementFactory.source(constructor) ) val valueParameters = resolveValueParameters(c, constructorDescriptor, constructor.getValueParameters()) @@ -168,45 +163,24 @@ public class LazyJavaClassMemberScope( return constructorDescriptor } - private fun createDefaultConstructors(): List { - val isAnnotation = jClass.isAnnotationType() + private fun createDefaultConstructor(): ConstructorDescriptor? { + val isAnnotation: Boolean = jClass.isAnnotationType() if (jClass.isInterface() && !isAnnotation) - return emptyList() - - 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() + return null val classDescriptor = getContainingDeclaration() val constructorDescriptor = JavaConstructorDescriptor.createJavaConstructor( - classDescriptor, Annotations.EMPTY, isPrimary, c.sourceElementFactory.source(jClass), - if (isPrimary) CallableMemberDescriptor.Kind.DECLARATION else CallableMemberDescriptor.Kind.SYNTHESIZED + classDescriptor, Annotations.EMPTY, /* isPrimary = */ true, c.sourceElementFactory.source(jClass) ) val typeParameters = classDescriptor.getTypeConstructor().getParameters() - val valueParameters = if (isAnnotation) createAnnotationConstructorParameters(constructorDescriptor, isPrimary) + val valueParameters = if (isAnnotation) createAnnotationConstructorParameters(constructorDescriptor) else Collections.emptyList() - constructorDescriptor.setHasSynthesizedParameterNames(false) constructorDescriptor.initialize(typeParameters, valueParameters, getConstructorVisibility(classDescriptor)) constructorDescriptor.setHasStableParameterNames(true) constructorDescriptor.setReturnType(classDescriptor.getDefaultType()) - if (isPrimary) { - c.javaResolverCache.recordConstructor(jClass, constructorDescriptor) - } + c.javaResolverCache.recordConstructor(jClass, constructorDescriptor); return constructorDescriptor } @@ -218,15 +192,11 @@ public class LazyJavaClassMemberScope( return visibility } - private fun createAnnotationConstructorParameters( - constructor: ConstructorDescriptorImpl, - loadJavaClassAsKClass: Boolean - ): List { + private fun createAnnotationConstructorParameters(constructor: ConstructorDescriptorImpl): List { val methods = jClass.getMethods() val result = ArrayList(methods.size()) - val attr = TypeUsage.MEMBER_SIGNATURE_INVARIANT.toAttributes( - allowFlexible = false, isForAnnotationParameter = loadJavaClassAsKClass) + val attr = TypeUsage.MEMBER_SIGNATURE_INVARIANT.toAttributes(allowFlexible = false, isForAnnotationParameter = true) val (methodsNamedValue, otherMethods) = methods. partition { it.getName() == JvmAnnotationNames.DEFAULT_ANNOTATION_MEMBER_NAME }