From 894a446585d039a6b4108802e63be7a54b164d07 Mon Sep 17 00:00:00 2001 From: Andrey Zinovyev Date: Wed, 18 Aug 2021 18:14:42 +0300 Subject: [PATCH] [FIR] Add missing messages for jvm diagnostics and fix some tests --- .../diagnostics/FirJvmDefaultErrorMessages.kt | 50 +++++++++++++++++++ .../forInIndices/kt43159_ArrayUpperBound.kt | 1 + .../annotation-classes/neg/1.fir.kt | 32 ++++++------ 3 files changed, 67 insertions(+), 16 deletions(-) diff --git a/compiler/fir/checkers/checkers.jvm/src/org/jetbrains/kotlin/fir/analysis/jvm/diagnostics/FirJvmDefaultErrorMessages.kt b/compiler/fir/checkers/checkers.jvm/src/org/jetbrains/kotlin/fir/analysis/jvm/diagnostics/FirJvmDefaultErrorMessages.kt index 07be961954a..84e4660e3d9 100644 --- a/compiler/fir/checkers/checkers.jvm/src/org/jetbrains/kotlin/fir/analysis/jvm/diagnostics/FirJvmDefaultErrorMessages.kt +++ b/compiler/fir/checkers/checkers.jvm/src/org/jetbrains/kotlin/fir/analysis/jvm/diagnostics/FirJvmDefaultErrorMessages.kt @@ -7,14 +7,64 @@ package org.jetbrains.kotlin.fir.analysis.jvm.diagnostics import org.jetbrains.kotlin.fir.analysis.diagnostics.FirDefaultErrorMessages import org.jetbrains.kotlin.fir.analysis.diagnostics.FirDiagnosticRenderers.RENDER_TYPE +import org.jetbrains.kotlin.fir.analysis.diagnostics.FirDiagnosticRenderers.TO_STRING import org.jetbrains.kotlin.fir.analysis.diagnostics.jvm.FirJvmErrors.CONFLICTING_JVM_DECLARATIONS +import org.jetbrains.kotlin.fir.analysis.diagnostics.jvm.FirJvmErrors.DEPRECATED_JAVA_ANNOTATION import org.jetbrains.kotlin.fir.analysis.diagnostics.jvm.FirJvmErrors.JAVA_TYPE_MISMATCH +import org.jetbrains.kotlin.fir.analysis.diagnostics.jvm.FirJvmErrors.JVM_PACKAGE_NAME_CANNOT_BE_EMPTY +import org.jetbrains.kotlin.fir.analysis.diagnostics.jvm.FirJvmErrors.JVM_PACKAGE_NAME_MUST_BE_VALID_NAME +import org.jetbrains.kotlin.fir.analysis.diagnostics.jvm.FirJvmErrors.JVM_PACKAGE_NAME_NOT_SUPPORTED_IN_FILES_WITH_CLASSES +import org.jetbrains.kotlin.fir.analysis.diagnostics.jvm.FirJvmErrors.OVERLOADS_ABSTRACT +import org.jetbrains.kotlin.fir.analysis.diagnostics.jvm.FirJvmErrors.OVERLOADS_ANNOTATION_CLASS_CONSTRUCTOR +import org.jetbrains.kotlin.fir.analysis.diagnostics.jvm.FirJvmErrors.OVERLOADS_INTERFACE +import org.jetbrains.kotlin.fir.analysis.diagnostics.jvm.FirJvmErrors.OVERLOADS_LOCAL +import org.jetbrains.kotlin.fir.analysis.diagnostics.jvm.FirJvmErrors.OVERLOADS_PRIVATE +import org.jetbrains.kotlin.fir.analysis.diagnostics.jvm.FirJvmErrors.OVERLOADS_WITHOUT_DEFAULT_ARGUMENTS +import org.jetbrains.kotlin.fir.analysis.diagnostics.jvm.FirJvmErrors.STRICTFP_ON_CLASS +import org.jetbrains.kotlin.fir.analysis.diagnostics.jvm.FirJvmErrors.SUPER_CALL_WITH_DEFAULT_PARAMETERS +import org.jetbrains.kotlin.fir.analysis.diagnostics.jvm.FirJvmErrors.SYNCHRONIZED_IN_INTERFACE +import org.jetbrains.kotlin.fir.analysis.diagnostics.jvm.FirJvmErrors.SYNCHRONIZED_ON_ABSTRACT +import org.jetbrains.kotlin.fir.analysis.diagnostics.jvm.FirJvmErrors.SYNCHRONIZED_ON_INLINE +import org.jetbrains.kotlin.fir.analysis.diagnostics.jvm.FirJvmErrors.UPPER_BOUND_CANNOT_BE_ARRAY +import org.jetbrains.kotlin.fir.analysis.diagnostics.jvm.FirJvmErrors.VOLATILE_ON_DELEGATE +import org.jetbrains.kotlin.fir.analysis.diagnostics.jvm.FirJvmErrors.VOLATILE_ON_VALUE object FirJvmDefaultErrorMessages { fun installJvmErrorMessages() { FirDefaultErrorMessages.Companion.MAP.also { map -> map.put(CONFLICTING_JVM_DECLARATIONS, "Platform declaration clash") map.put(JAVA_TYPE_MISMATCH, "Java type mismatch expected {0} but found {1}. Use explicit cast", RENDER_TYPE, RENDER_TYPE) + map.put(UPPER_BOUND_CANNOT_BE_ARRAY, "Upper bound of a type parameter cannot be an array") + map.put(STRICTFP_ON_CLASS, "'@Strictfp' annotation on classes is unsupported yet") + map.put(VOLATILE_ON_VALUE, "'@Volatile' annotation cannot be used on immutable properties") + map.put(VOLATILE_ON_DELEGATE, "'@Volatile' annotation cannot be used on delegated properties") + map.put(SYNCHRONIZED_ON_ABSTRACT, "'@Synchronized' annotation cannot be used on abstract functions") + map.put(SYNCHRONIZED_ON_INLINE, "'@Synchronized' annotation has no effect on inline functions") + map.put(SYNCHRONIZED_IN_INTERFACE, "'@Synchronized' annotation cannot be used on interface members") + map.put(OVERLOADS_WITHOUT_DEFAULT_ARGUMENTS, "'@JvmOverloads' annotation has no effect for methods without default arguments") + map.put(OVERLOADS_ABSTRACT, "'@JvmOverloads' annotation cannot be used on abstract methods") + map.put(OVERLOADS_INTERFACE, "'@JvmOverloads' annotation cannot be used on interface methods") + map.put(OVERLOADS_PRIVATE, "'@JvmOverloads' annotation has no effect on private declarations") + map.put(OVERLOADS_LOCAL, "'@JvmOverloads' annotation cannot be used on local declarations") + map.put( + OVERLOADS_ANNOTATION_CLASS_CONSTRUCTOR, + "'@JvmOverloads' annotation cannot be used on constructors of annotation classes" + ) + map.put(DEPRECATED_JAVA_ANNOTATION, "This annotation is deprecated in Kotlin. Use ''@{0}'' instead", TO_STRING) + map.put(JVM_PACKAGE_NAME_CANNOT_BE_EMPTY, "''@JvmPackageName'' annotation value cannot be empty") + map.put( + JVM_PACKAGE_NAME_MUST_BE_VALID_NAME, + "''@JvmPackageName'' annotation value must be a valid dot-qualified name of a package" + ) + map.put( + JVM_PACKAGE_NAME_NOT_SUPPORTED_IN_FILES_WITH_CLASSES, + "''@JvmPackageName'' annotation is not supported for files with class declarations" + ) + map.put( + SUPER_CALL_WITH_DEFAULT_PARAMETERS, + "Super-calls with default arguments are not allowed. Please specify all arguments of ''super.{0}'' explicitly", + TO_STRING + ) } } } \ No newline at end of file diff --git a/compiler/testData/codegen/box/ranges/forInIndices/kt43159_ArrayUpperBound.kt b/compiler/testData/codegen/box/ranges/forInIndices/kt43159_ArrayUpperBound.kt index 1fe5fc5ec69..d68e71c2e5d 100644 --- a/compiler/testData/codegen/box/ranges/forInIndices/kt43159_ArrayUpperBound.kt +++ b/compiler/testData/codegen/box/ranges/forInIndices/kt43159_ArrayUpperBound.kt @@ -1,6 +1,7 @@ // KJS_WITH_FULL_RUNTIME // WITH_RUNTIME // IGNORE_BACKEND: JVM, JVM_IR +// IGNORE_BACKEND_FIR: JVM_IR fun test(array: T): Int { var sum = 0 diff --git a/compiler/tests-spec/testData/diagnostics/notLinked/annotations/annotation-classes/neg/1.fir.kt b/compiler/tests-spec/testData/diagnostics/notLinked/annotations/annotation-classes/neg/1.fir.kt index 29e96dac46e..28ac2b83271 100644 --- a/compiler/tests-spec/testData/diagnostics/notLinked/annotations/annotation-classes/neg/1.fir.kt +++ b/compiler/tests-spec/testData/diagnostics/notLinked/annotations/annotation-classes/neg/1.fir.kt @@ -8,57 +8,57 @@ annotation class Case12_1 annotation class Case12_2 // TESTCASE NUMBER: 1 -annotation class Case1 @JvmOverloads constructor(val x: Int) +annotation class Case1 @JvmOverloads constructor(val x: Int) // TESTCASE NUMBER: 2 -annotation class Case2 @[Case12_2 Case12_2 Case12_2 Case12_2 Case12_2 Case12_2 JvmOverloads Case12_1] constructor(x: Int = 10) +annotation class Case2 @[Case12_2 Case12_2 Case12_2 Case12_2 Case12_2 Case12_2 JvmOverloads Case12_1] constructor(x: Int = 10) // TESTCASE NUMBER: 3 -annotation class Case3 @Case12_2 @Case12_1 @Case12_2 @`JvmOverloads` @Case12_2 @Case12_2 constructor(x: Int = 10) +annotation class Case3 @Case12_2 @Case12_1 @Case12_2 @`JvmOverloads` @Case12_2 @Case12_2 constructor(x: Int = 10) // TESTCASE NUMBER: 4 -annotation class Case4 @Case12_2 @[Case12_2 Case12_2 Case12_2 Case12_2 Case12_2 Case12_2 JvmOverloads Case12_1] @Case12_2 @Case12_2 constructor(x: Int = 10) +annotation class Case4 @Case12_2 @[Case12_2 Case12_2 Case12_2 Case12_2 Case12_2 Case12_2 JvmOverloads Case12_1] @Case12_2 @Case12_2 constructor(x: Int = 10) // TESTCASE NUMBER: 5 -annotation class Case5 @[JvmOverloads] constructor(val x: Int) +annotation class Case5 @[JvmOverloads] constructor(val x: Int) // TESTCASE NUMBER: 6 -annotation class Case6 @JvmOverloads constructor() +annotation class Case6 @JvmOverloads constructor() // TESTCASE NUMBER: 7 -annotation class Case7@JvmOverloads constructor() {} +annotation class Case7@JvmOverloads constructor() {} // TESTCASE NUMBER: 8 -annotation class Case8 @`JvmOverloads` constructor() +annotation class Case8 @`JvmOverloads` constructor() // TESTCASE NUMBER: 9 -annotation class Case9 @JvmOverloads constructor(val x: Int) +annotation class Case9 @JvmOverloads constructor(val x: Int) // TESTCASE NUMBER: 10 -annotation class Case10 @JvmOverloads constructor(val x: Int) +annotation class Case10 @JvmOverloads constructor(val x: Int) // TESTCASE NUMBER: 11 -annotation class Case11 > @JvmOverloads constructor(val x: Int) +annotation class Case11 > @JvmOverloads constructor(val x: Int) // TESTCASE NUMBER: 12 -annotation class Case12 @JvmOverloads constructor(val x: Int) where T: Number +annotation class Case12 @JvmOverloads constructor(val x: Int) where T: Number // TESTCASE NUMBER: 13 annotation class Case13 constructor(val x: Int) { - annotation class Case1 @JvmOverloads constructor(val x: Int) + annotation class Case1 @JvmOverloads constructor(val x: Int) } // TESTCASE NUMBER: 14 -annotation class Case14 @JvmOverloads constructor(val x: Int) { +annotation class Case14 @JvmOverloads constructor(val x: Int) { annotation class Case1 constructor(val x: Int) } // TESTCASE NUMBER: 15 object Case15 { - annotation class Case15 @JvmOverloads constructor(val x: Int) + annotation class Case15 @JvmOverloads constructor(val x: Int) } // TESTCASE NUMBER: 16 class Case16 { - annotation class Case16 @JvmOverloads constructor(val x: Int) + annotation class Case16 @JvmOverloads constructor(val x: Int) }