From da254ab1a0135a71d4fe570ab799f13e96a8d70f Mon Sep 17 00:00:00 2001 From: Denis Zharkov Date: Tue, 9 Jun 2015 18:14:33 +0300 Subject: [PATCH] Drop support of java.lang.Class as annotation parameter Also drop some related diagnostics and testData --- .../load/kotlin/JavaAnnotationCallChecker.kt | 13 ------------- .../jvm/diagnostics/DefaultErrorMessagesJvm.java | 1 - .../resolve/jvm/diagnostics/ErrorsJvm.java | 1 - .../org/jetbrains/kotlin/diagnostics/Errors.java | 1 - .../rendering/DefaultErrorMessages.java | 1 - .../kotlin/resolve/AnnotationResolver.java | 3 --- .../kotlin/resolve/CompileTimeConstantUtils.java | 9 --------- .../tests/annotations/deprecatedJavaLangClass.kt | 10 ---------- .../annotations/deprecatedJavaLangClass.txt | 16 ---------------- .../invalidTypesInAnnotationConstructor.kt | 6 +++--- .../checkers/JetDiagnosticsTestGenerated.java | 6 ------ .../kotlin/resolve/DescriptorUtils.java | 4 ---- .../src/org/jetbrains/kotlin/types/TypeUtils.kt | 12 ------------ 13 files changed, 3 insertions(+), 80 deletions(-) delete mode 100644 compiler/testData/diagnostics/tests/annotations/deprecatedJavaLangClass.kt delete mode 100644 compiler/testData/diagnostics/tests/annotations/deprecatedJavaLangClass.txt diff --git a/compiler/frontend.java/src/org/jetbrains/kotlin/load/kotlin/JavaAnnotationCallChecker.kt b/compiler/frontend.java/src/org/jetbrains/kotlin/load/kotlin/JavaAnnotationCallChecker.kt index 900dd4e1f5c..94eb2fafe8f 100644 --- a/compiler/frontend.java/src/org/jetbrains/kotlin/load/kotlin/JavaAnnotationCallChecker.kt +++ b/compiler/frontend.java/src/org/jetbrains/kotlin/load/kotlin/JavaAnnotationCallChecker.kt @@ -33,9 +33,6 @@ import org.jetbrains.kotlin.resolve.calls.model.ResolvedCall import org.jetbrains.kotlin.resolve.calls.model.ResolvedValueArgument import org.jetbrains.kotlin.resolve.jvm.diagnostics.ErrorsJvm import org.jetbrains.kotlin.types.JetType -import org.jetbrains.kotlin.types.typeUtil.isArrayOfJavaLangClass -import org.jetbrains.kotlin.types.typeUtil.isJavaLangClass -import org.jetbrains.kotlin.types.typeUtil.isJavaLangClassOrArray public class JavaAnnotationCallChecker : CallChecker { override fun check(resolvedCall: ResolvedCall, context: BasicCallResolutionContext) { @@ -44,16 +41,6 @@ public class JavaAnnotationCallChecker : CallChecker { resultingDescriptor.getContainingDeclaration().getKind() != ClassKind.ANNOTATION_CLASS) return reportErrorsOnPositionedArguments(resolvedCall, context) - reportWarningOnJavaClassUsages(resolvedCall, context) - } - - private fun reportWarningOnJavaClassUsages( - resolvedCall: ResolvedCall<*>, - context: BasicCallResolutionContext - ) { - resolvedCall.getValueArguments().filter { it.getKey().getType().isJavaLangClassOrArray() }.forEach { - reportOnValueArgument(context, it, ErrorsJvm.JAVA_LANG_CLASS_ARGUMENT_IN_ANNOTATION) - } } private fun reportErrorsOnPositionedArguments( diff --git a/compiler/frontend.java/src/org/jetbrains/kotlin/resolve/jvm/diagnostics/DefaultErrorMessagesJvm.java b/compiler/frontend.java/src/org/jetbrains/kotlin/resolve/jvm/diagnostics/DefaultErrorMessagesJvm.java index 0127a001e8b..83be54b0e1d 100644 --- a/compiler/frontend.java/src/org/jetbrains/kotlin/resolve/jvm/diagnostics/DefaultErrorMessagesJvm.java +++ b/compiler/frontend.java/src/org/jetbrains/kotlin/resolve/jvm/diagnostics/DefaultErrorMessagesJvm.java @@ -57,7 +57,6 @@ public class DefaultErrorMessagesJvm implements DefaultErrorMessages.Extension { MAP.put(ErrorsJvm.NATIVE_DECLARATION_CANNOT_BE_INLINED, "Members of interfaces can not be inlined"); MAP.put(ErrorsJvm.POSITIONED_VALUE_ARGUMENT_FOR_JAVA_ANNOTATION, "Only named arguments are available for Java annotations"); - MAP.put(ErrorsJvm.JAVA_LANG_CLASS_ARGUMENT_IN_ANNOTATION, "Usage of `javaClass()` in annotations is deprecated. Use T::class instead"); MAP.put(ErrorsJvm.DEPRECATED_ANNOTATION_METHOD_CALL, "Annotation methods are deprecated. Use property instead"); MAP.put(ErrorsJvm.NO_REFLECTION_IN_CLASS_PATH, "Expression ''{0}'' uses reflection which is not found in compilation classpath. " + diff --git a/compiler/frontend.java/src/org/jetbrains/kotlin/resolve/jvm/diagnostics/ErrorsJvm.java b/compiler/frontend.java/src/org/jetbrains/kotlin/resolve/jvm/diagnostics/ErrorsJvm.java index ec66ca22976..3e16df39687 100644 --- a/compiler/frontend.java/src/org/jetbrains/kotlin/resolve/jvm/diagnostics/ErrorsJvm.java +++ b/compiler/frontend.java/src/org/jetbrains/kotlin/resolve/jvm/diagnostics/ErrorsJvm.java @@ -52,7 +52,6 @@ public interface ErrorsJvm { DiagnosticFactory0 NATIVE_DECLARATION_CANNOT_BE_INLINED = DiagnosticFactory0.create(ERROR, DECLARATION_SIGNATURE); DiagnosticFactory0 POSITIONED_VALUE_ARGUMENT_FOR_JAVA_ANNOTATION = DiagnosticFactory0.create(ERROR); - DiagnosticFactory0 JAVA_LANG_CLASS_ARGUMENT_IN_ANNOTATION = DiagnosticFactory0.create(WARNING); DiagnosticFactory0 DEPRECATED_ANNOTATION_METHOD_CALL = DiagnosticFactory0.create(WARNING); DiagnosticFactory0 TRAIT_CANT_CALL_DEFAULT_METHOD_VIA_SUPER = DiagnosticFactory0.create(ERROR); diff --git a/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/Errors.java b/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/Errors.java index 90078926311..739611cf9a3 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/Errors.java +++ b/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/Errors.java @@ -128,7 +128,6 @@ public interface Errors { DiagnosticFactory0 ILLEGAL_ANNOTATION_KEYWORD = DiagnosticFactory0 .create(ERROR, modifierSetPosition(JetTokens.ANNOTATION_KEYWORD)); DiagnosticFactory0 ANNOTATION_PARAMETER_MUST_BE_CONST = DiagnosticFactory0.create(ERROR); - DiagnosticFactory0 ANNOTATION_PARAMETER_MUST_BE_CLASS_LITERAL = DiagnosticFactory0.create(ERROR); DiagnosticFactory0 ANNOTATION_PARAMETER_MUST_BE_KCLASS_LITERAL = DiagnosticFactory0.create(ERROR); DiagnosticFactory0 ANNOTATION_PARAMETER_MUST_BE_ENUM_CONST = DiagnosticFactory0.create(ERROR); DiagnosticFactory0 ANNOTATION_PARAMETER_DEFAULT_VALUE_MUST_BE_CONSTANT = DiagnosticFactory0.create(ERROR); diff --git a/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/rendering/DefaultErrorMessages.java b/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/rendering/DefaultErrorMessages.java index 3659f11337c..4272678d51f 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/rendering/DefaultErrorMessages.java +++ b/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/rendering/DefaultErrorMessages.java @@ -607,7 +607,6 @@ public class DefaultErrorMessages { MAP.put(ILLEGAL_ANNOTATION_KEYWORD, "''annotation'' keyword is only applicable for class"); MAP.put(ANNOTATION_PARAMETER_MUST_BE_CONST, "An annotation parameter must be a compile-time constant"); MAP.put(ANNOTATION_PARAMETER_MUST_BE_ENUM_CONST, "An enum annotation parameter must be a enum constant"); - MAP.put(ANNOTATION_PARAMETER_MUST_BE_CLASS_LITERAL, "An annotation parameter must be a `javaClass()` call"); MAP.put(ANNOTATION_PARAMETER_MUST_BE_KCLASS_LITERAL, "An annotation parameter must be a class literal (T::class)"); MAP.put(ANNOTATION_PARAMETER_DEFAULT_VALUE_MUST_BE_CONSTANT, "Default value of annotation parameter must be a compile-time constant"); diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/AnnotationResolver.java b/compiler/frontend/src/org/jetbrains/kotlin/resolve/AnnotationResolver.java index a2e55785c3f..792730b3a45 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/AnnotationResolver.java +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/AnnotationResolver.java @@ -289,9 +289,6 @@ public class AnnotationResolver { if (descriptor != null && DescriptorUtils.isEnumClass(descriptor)) { trace.report(Errors.ANNOTATION_PARAMETER_MUST_BE_ENUM_CONST.on(argumentExpression)); } - else if (descriptor instanceof ClassDescriptor && DescriptorUtils.isJavaLangClass((ClassDescriptor) descriptor)) { - trace.report(Errors.ANNOTATION_PARAMETER_MUST_BE_CLASS_LITERAL.on(argumentExpression)); - } else if (descriptor instanceof ClassDescriptor && KotlinBuiltIns.isKClass((ClassDescriptor) descriptor)) { trace.report(Errors.ANNOTATION_PARAMETER_MUST_BE_KCLASS_LITERAL.on(argumentExpression)); } diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/CompileTimeConstantUtils.java b/compiler/frontend/src/org/jetbrains/kotlin/resolve/CompileTimeConstantUtils.java index 118e9bf50f1..52fb1adf652 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/CompileTimeConstantUtils.java +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/CompileTimeConstantUtils.java @@ -70,9 +70,6 @@ public class CompileTimeConstantUtils { else if (!isAcceptableTypeForAnnotationParameter(parameterType)) { trace.report(INVALID_TYPE_OF_ANNOTATION_MEMBER.on(typeReference)); } - else if (TypeUtilPackage.isJavaLangClassOrArray(parameterType)) { - trace.report(JAVA_LANG_CLASS_PARAMETER_IN_ANNOTATION.on(typeReference)); - } } } } @@ -86,7 +83,6 @@ public class CompileTimeConstantUtils { KotlinBuiltIns builtIns = KotlinBuiltIns.getInstance(); if (isEnumClass(typeDescriptor) || isAnnotationClass(typeDescriptor) || - DescriptorUtils.isJavaLangClass(typeDescriptor) || KotlinBuiltIns.isKClass(typeDescriptor) || KotlinBuiltIns.isPrimitiveArray(parameterType) || KotlinBuiltIns.isPrimitiveType(parameterType) || @@ -105,7 +101,6 @@ public class CompileTimeConstantUtils { if (arrayTypeDescriptor != null) { return isEnumClass(arrayTypeDescriptor) || isAnnotationClass(arrayTypeDescriptor) || - DescriptorUtils.isJavaLangClass(arrayTypeDescriptor) || KotlinBuiltIns.isKClass(arrayTypeDescriptor) || builtIns.getStringType().equals(arrayType); } @@ -131,10 +126,6 @@ public class CompileTimeConstantUtils { return ARRAY_CALL_NAMES.contains(DescriptorUtils.getFqName(resolvedCall.getCandidateDescriptor()).asString()); } - public static boolean isJavaClassMethodCall(@NotNull ResolvedCall resolvedCall) { - return "kotlin.javaClass.function".equals(getIntrinsicAnnotationArgument(resolvedCall.getResultingDescriptor().getOriginal())); - } - public static boolean canBeReducedToBooleanConstant( @Nullable JetExpression expression, @NotNull BindingTrace trace, diff --git a/compiler/testData/diagnostics/tests/annotations/deprecatedJavaLangClass.kt b/compiler/testData/diagnostics/tests/annotations/deprecatedJavaLangClass.kt deleted file mode 100644 index fce18badca4..00000000000 --- a/compiler/testData/diagnostics/tests/annotations/deprecatedJavaLangClass.kt +++ /dev/null @@ -1,10 +0,0 @@ -annotation class Ann( - val x1: Class<*>, - val x2: Class, - val x3: Class, - val x4: java.lang.Class<*>, - val x5: Array>, - val x6: Array>, - val x7: Array>, - vararg val x8: Class<*> -) diff --git a/compiler/testData/diagnostics/tests/annotations/deprecatedJavaLangClass.txt b/compiler/testData/diagnostics/tests/annotations/deprecatedJavaLangClass.txt deleted file mode 100644 index 944f110ca7e..00000000000 --- a/compiler/testData/diagnostics/tests/annotations/deprecatedJavaLangClass.txt +++ /dev/null @@ -1,16 +0,0 @@ -package - -internal final annotation class Ann : kotlin.Annotation { - public constructor Ann(/*0*/ x1: java.lang.Class<*>, /*1*/ x2: java.lang.Class, /*2*/ x3: java.lang.Class, /*3*/ x4: java.lang.Class<*>, /*4*/ x5: kotlin.Array>, /*5*/ x6: kotlin.Array>, /*6*/ x7: kotlin.Array>, /*7*/ vararg x8: java.lang.Class<*> /*kotlin.Array>*/) - internal final val x1: java.lang.Class<*> - internal final val x2: java.lang.Class - internal final val x3: java.lang.Class - internal final val x4: java.lang.Class<*> - internal final val x5: kotlin.Array> - internal final val x6: kotlin.Array> - internal final val x7: kotlin.Array> - internal final val x8: kotlin.Array> - 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 -} diff --git a/compiler/testData/diagnostics/tests/annotations/invalidTypesInAnnotationConstructor.kt b/compiler/testData/diagnostics/tests/annotations/invalidTypesInAnnotationConstructor.kt index 95681866dc0..c40ee592380 100644 --- a/compiler/testData/diagnostics/tests/annotations/invalidTypesInAnnotationConstructor.kt +++ b/compiler/testData/diagnostics/tests/annotations/invalidTypesInAnnotationConstructor.kt @@ -26,16 +26,16 @@ annotation class Ann4(val p1: IntArray, annotation class Ann5(val p1: MyEnum) -annotation class Ann6(val p: Class<*>) +annotation class Ann6(val p: Class<*>) annotation class Ann7(val p: RetentionPolicy) annotation class Ann8(val p1: Array, - val p2: Array>, + val p2: Array>, val p3: Array, val p4: Array) annotation class Ann9(vararg val p1: String, - vararg val p2: Class<*>, + vararg val p2: Class<*>, vararg val p3: MyEnum, vararg val p4: Ann1, vararg val p5: Int) diff --git a/compiler/tests/org/jetbrains/kotlin/checkers/JetDiagnosticsTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/checkers/JetDiagnosticsTestGenerated.java index e7c0e76daa0..3d746285e04 100644 --- a/compiler/tests/org/jetbrains/kotlin/checkers/JetDiagnosticsTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/checkers/JetDiagnosticsTestGenerated.java @@ -747,12 +747,6 @@ public class JetDiagnosticsTestGenerated extends AbstractJetDiagnosticsTest { doTest(fileName); } - @TestMetadata("deprecatedJavaLangClass.kt") - public void testDeprecatedJavaLangClass() throws Exception { - String fileName = JetTestUtils.navigationMetadata("compiler/testData/diagnostics/tests/annotations/deprecatedJavaLangClass.kt"); - doTest(fileName); - } - @TestMetadata("extensionFunctionType.kt") public void testExtensionFunctionType() throws Exception { String fileName = JetTestUtils.navigationMetadata("compiler/testData/diagnostics/tests/annotations/extensionFunctionType.kt"); diff --git a/core/descriptors/src/org/jetbrains/kotlin/resolve/DescriptorUtils.java b/core/descriptors/src/org/jetbrains/kotlin/resolve/DescriptorUtils.java index b6be0be35b4..cde01bc8dcd 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/resolve/DescriptorUtils.java +++ b/core/descriptors/src/org/jetbrains/kotlin/resolve/DescriptorUtils.java @@ -541,8 +541,4 @@ public class DescriptorUtils { } } } - - public static boolean isJavaLangClass(ClassDescriptor descriptor) { - return "java.lang.Class".equals(getFqName(descriptor).asString()); - } } diff --git a/core/descriptors/src/org/jetbrains/kotlin/types/TypeUtils.kt b/core/descriptors/src/org/jetbrains/kotlin/types/TypeUtils.kt index 373e213d3f6..558ed9d3912 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/types/TypeUtils.kt +++ b/core/descriptors/src/org/jetbrains/kotlin/types/TypeUtils.kt @@ -86,18 +86,6 @@ fun JetType.replaceAnnotations(newAnnotations: Annotations): JetType { } } -public fun JetType.isJavaLangClass(): Boolean { - val classifier = getConstructor().getDeclarationDescriptor() - - if (classifier !is ClassDescriptor) return false - return DescriptorUtils.isJavaLangClass(classifier) -} - -public fun JetType.isArrayOfJavaLangClass(): Boolean = - KotlinBuiltIns.isArray(this) && getArguments().firstOrNull()?.getType()?.isJavaLangClass() ?: false - -public fun JetType.isJavaLangClassOrArray(): Boolean = isJavaLangClass() || isArrayOfJavaLangClass() - public fun JetTypeChecker.equalTypesOrNulls(type1: JetType?, type2: JetType?): Boolean { if (type1 identityEquals type2) return true if (type1 == null || type2 == null) return false