[Klib] Run prerelease checker in all backends
The checker also checks the metadata version, which would be handled separately. Now it would never emmit this error for klib-based backends. ^KT-61773 ^KT-61596 ^KT-55809
This commit is contained in:
committed by
Space Team
parent
9f9287fb2e
commit
9a9598c16b
+15
-15
@@ -4837,6 +4837,21 @@ internal val KT_DIAGNOSTIC_CONVERTER = KtDiagnosticConverterBuilder.buildConvert
|
||||
token,
|
||||
)
|
||||
}
|
||||
add(FirErrors.INCOMPATIBLE_CLASS) { firDiagnostic ->
|
||||
IncompatibleClassImpl(
|
||||
firDiagnostic.a,
|
||||
firDiagnostic.b,
|
||||
firDiagnostic as KtPsiDiagnostic,
|
||||
token,
|
||||
)
|
||||
}
|
||||
add(FirErrors.PRE_RELEASE_CLASS) { firDiagnostic ->
|
||||
PreReleaseClassImpl(
|
||||
firDiagnostic.a,
|
||||
firDiagnostic as KtPsiDiagnostic,
|
||||
token,
|
||||
)
|
||||
}
|
||||
add(FirJvmErrors.CONFLICTING_JVM_DECLARATIONS) { firDiagnostic ->
|
||||
ConflictingJvmDeclarationsImpl(
|
||||
firDiagnostic as KtPsiDiagnostic,
|
||||
@@ -5319,21 +5334,6 @@ internal val KT_DIAGNOSTIC_CONVERTER = KtDiagnosticConverterBuilder.buildConvert
|
||||
token,
|
||||
)
|
||||
}
|
||||
add(FirJvmErrors.INCOMPATIBLE_CLASS) { firDiagnostic ->
|
||||
IncompatibleClassImpl(
|
||||
firDiagnostic.a,
|
||||
firDiagnostic.b,
|
||||
firDiagnostic as KtPsiDiagnostic,
|
||||
token,
|
||||
)
|
||||
}
|
||||
add(FirJvmErrors.PRE_RELEASE_CLASS) { firDiagnostic ->
|
||||
PreReleaseClassImpl(
|
||||
firDiagnostic.a,
|
||||
firDiagnostic as KtPsiDiagnostic,
|
||||
token,
|
||||
)
|
||||
}
|
||||
add(FirJsErrors.IMPLEMENTING_FUNCTION_INTERFACE) { firDiagnostic ->
|
||||
ImplementingFunctionInterfaceImpl(
|
||||
firDiagnostic as KtPsiDiagnostic,
|
||||
|
||||
+11
-11
@@ -3373,6 +3373,17 @@ sealed interface KtFirDiagnostic<PSI : PsiElement> : KtDiagnosticWithPsi<PSI> {
|
||||
override val diagnosticClass get() = DeprecatedDeclarationOfEnumEntry::class
|
||||
}
|
||||
|
||||
interface IncompatibleClass : KtFirDiagnostic<PsiElement> {
|
||||
override val diagnosticClass get() = IncompatibleClass::class
|
||||
val presentableString: String
|
||||
val incompatibility: IncompatibleVersionErrorData<*>
|
||||
}
|
||||
|
||||
interface PreReleaseClass : KtFirDiagnostic<PsiElement> {
|
||||
override val diagnosticClass get() = PreReleaseClass::class
|
||||
val presentableString: String
|
||||
}
|
||||
|
||||
interface ConflictingJvmDeclarations : KtFirDiagnostic<PsiElement> {
|
||||
override val diagnosticClass get() = ConflictingJvmDeclarations::class
|
||||
}
|
||||
@@ -3705,17 +3716,6 @@ sealed interface KtFirDiagnostic<PSI : PsiElement> : KtDiagnosticWithPsi<PSI> {
|
||||
override val diagnosticClass get() = NoReflectionInClassPath::class
|
||||
}
|
||||
|
||||
interface IncompatibleClass : KtFirDiagnostic<PsiElement> {
|
||||
override val diagnosticClass get() = IncompatibleClass::class
|
||||
val presentableString: String
|
||||
val incompatibility: IncompatibleVersionErrorData<*>
|
||||
}
|
||||
|
||||
interface PreReleaseClass : KtFirDiagnostic<PsiElement> {
|
||||
override val diagnosticClass get() = PreReleaseClass::class
|
||||
val presentableString: String
|
||||
}
|
||||
|
||||
interface ImplementingFunctionInterface : KtFirDiagnostic<KtClassOrObject> {
|
||||
override val diagnosticClass get() = ImplementingFunctionInterface::class
|
||||
}
|
||||
|
||||
+13
-13
@@ -4070,6 +4070,19 @@ internal class DeprecatedDeclarationOfEnumEntryImpl(
|
||||
token: KtLifetimeToken,
|
||||
) : KtAbstractFirDiagnostic<KtEnumEntry>(firDiagnostic, token), KtFirDiagnostic.DeprecatedDeclarationOfEnumEntry
|
||||
|
||||
internal class IncompatibleClassImpl(
|
||||
override val presentableString: String,
|
||||
override val incompatibility: IncompatibleVersionErrorData<*>,
|
||||
firDiagnostic: KtPsiDiagnostic,
|
||||
token: KtLifetimeToken,
|
||||
) : KtAbstractFirDiagnostic<PsiElement>(firDiagnostic, token), KtFirDiagnostic.IncompatibleClass
|
||||
|
||||
internal class PreReleaseClassImpl(
|
||||
override val presentableString: String,
|
||||
firDiagnostic: KtPsiDiagnostic,
|
||||
token: KtLifetimeToken,
|
||||
) : KtAbstractFirDiagnostic<PsiElement>(firDiagnostic, token), KtFirDiagnostic.PreReleaseClass
|
||||
|
||||
internal class ConflictingJvmDeclarationsImpl(
|
||||
firDiagnostic: KtPsiDiagnostic,
|
||||
token: KtLifetimeToken,
|
||||
@@ -4477,19 +4490,6 @@ internal class NoReflectionInClassPathImpl(
|
||||
token: KtLifetimeToken,
|
||||
) : KtAbstractFirDiagnostic<PsiElement>(firDiagnostic, token), KtFirDiagnostic.NoReflectionInClassPath
|
||||
|
||||
internal class IncompatibleClassImpl(
|
||||
override val presentableString: String,
|
||||
override val incompatibility: IncompatibleVersionErrorData<*>,
|
||||
firDiagnostic: KtPsiDiagnostic,
|
||||
token: KtLifetimeToken,
|
||||
) : KtAbstractFirDiagnostic<PsiElement>(firDiagnostic, token), KtFirDiagnostic.IncompatibleClass
|
||||
|
||||
internal class PreReleaseClassImpl(
|
||||
override val presentableString: String,
|
||||
firDiagnostic: KtPsiDiagnostic,
|
||||
token: KtLifetimeToken,
|
||||
) : KtAbstractFirDiagnostic<PsiElement>(firDiagnostic, token), KtFirDiagnostic.PreReleaseClass
|
||||
|
||||
internal class ImplementingFunctionInterfaceImpl(
|
||||
firDiagnostic: KtPsiDiagnostic,
|
||||
token: KtLifetimeToken,
|
||||
|
||||
+3
-3
@@ -12,7 +12,7 @@ import org.jetbrains.kotlin.diagnostics.KtPsiDiagnostic
|
||||
import org.jetbrains.kotlin.diagnostics.Severity
|
||||
import org.jetbrains.kotlin.diagnostics.impl.BaseDiagnosticsCollector
|
||||
import org.jetbrains.kotlin.diagnostics.rendering.RootDiagnosticRendererFactory
|
||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.jvm.FirJvmErrors
|
||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors
|
||||
import java.io.Closeable
|
||||
import java.io.File
|
||||
import java.io.InputStreamReader
|
||||
@@ -27,8 +27,8 @@ object FirDiagnosticsCompilerResultsReporter {
|
||||
reportDiagnosticToMessageCollector(diagnostic, location, messageCollector, renderDiagnosticName)
|
||||
}.also {
|
||||
AnalyzerWithCompilerReport.reportSpecialErrors(
|
||||
diagnosticsCollector.diagnostics.any { it.factory == FirJvmErrors.INCOMPATIBLE_CLASS },
|
||||
diagnosticsCollector.diagnostics.any { it.factory == FirJvmErrors.PRE_RELEASE_CLASS },
|
||||
diagnosticsCollector.diagnostics.any { it.factory == FirErrors.INCOMPATIBLE_CLASS },
|
||||
diagnosticsCollector.diagnostics.any { it.factory == FirErrors.PRE_RELEASE_CLASS },
|
||||
hasUnstableClasses = false, // TODO (KT-61598): report FIR_COMPILED_CLASS and IR_WITH_UNSTABLE_ABI_COMPILED_CLASS
|
||||
hasFirUnstableClasses = false, // TODO (KT-61598): report FIR_COMPILED_CLASS and IR_WITH_UNSTABLE_ABI_COMPILED_CLASS
|
||||
messageCollector,
|
||||
|
||||
+12
@@ -38,6 +38,7 @@ import org.jetbrains.kotlin.resolve.deprecation.DeprecationInfo
|
||||
import org.jetbrains.kotlin.resolve.multiplatform.ExpectActualAnnotationsIncompatibilityType
|
||||
import org.jetbrains.kotlin.resolve.multiplatform.ExpectActualCompatibility
|
||||
import org.jetbrains.kotlin.resolve.multiplatform.ExpectActualCompatibility.Incompatible
|
||||
import org.jetbrains.kotlin.serialization.deserialization.IncompatibleVersionErrorData
|
||||
import org.jetbrains.kotlin.types.Variance
|
||||
import org.jetbrains.kotlin.util.PrivateForInline
|
||||
import kotlin.properties.PropertyDelegateProvider
|
||||
@@ -1708,6 +1709,17 @@ object DIAGNOSTICS_LIST : DiagnosticList("FirErrors") {
|
||||
val DEPRECATED_ACCESS_TO_ENUM_ENTRY_PROPERTY_AS_REFERENCE by warning<PsiElement>(PositioningStrategy.REFERENCED_NAME_BY_QUALIFIED)
|
||||
val DEPRECATED_DECLARATION_OF_ENUM_ENTRY by warning<KtEnumEntry>()
|
||||
}
|
||||
|
||||
val COMPATIBILITY_ISSUES by object : DiagnosticGroup("Compatibility issues") {
|
||||
val INCOMPATIBLE_CLASS by error<PsiElement> {
|
||||
parameter<String>("presentableString")
|
||||
parameter<IncompatibleVersionErrorData<*>>("incompatibility")
|
||||
}
|
||||
val PRE_RELEASE_CLASS by error<PsiElement> {
|
||||
parameter<String>("presentableString")
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private val exposedVisibilityDiagnosticInit: DiagnosticBuilder.() -> Unit = {
|
||||
|
||||
-8
@@ -21,7 +21,6 @@ import org.jetbrains.kotlin.psi.KtAnnotationEntry
|
||||
import org.jetbrains.kotlin.psi.KtDeclaration
|
||||
import org.jetbrains.kotlin.psi.KtElement
|
||||
import org.jetbrains.kotlin.psi.KtExpression
|
||||
import org.jetbrains.kotlin.serialization.deserialization.IncompatibleVersionErrorData
|
||||
|
||||
@Suppress("ClassName", "unused")
|
||||
@OptIn(PrivateForInline::class)
|
||||
@@ -177,12 +176,5 @@ object JVM_DIAGNOSTICS_LIST : DiagnosticList("FirJvmErrors") {
|
||||
)
|
||||
val JAVA_SAM_INTERFACE_CONSTRUCTOR_REFERENCE by error<PsiElement>()
|
||||
val NO_REFLECTION_IN_CLASS_PATH by warning<PsiElement>()
|
||||
val INCOMPATIBLE_CLASS by error<PsiElement> {
|
||||
parameter<String>("presentableString")
|
||||
parameter<IncompatibleVersionErrorData<*>>("incompatibility")
|
||||
}
|
||||
val PRE_RELEASE_CLASS by error<PsiElement> {
|
||||
parameter<String>("presentableString")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
-3
@@ -24,7 +24,6 @@ import org.jetbrains.kotlin.psi.KtAnnotationEntry
|
||||
import org.jetbrains.kotlin.psi.KtDeclaration
|
||||
import org.jetbrains.kotlin.psi.KtElement
|
||||
import org.jetbrains.kotlin.psi.KtExpression
|
||||
import org.jetbrains.kotlin.serialization.deserialization.IncompatibleVersionErrorData
|
||||
|
||||
/*
|
||||
* This file was generated automatically
|
||||
@@ -121,8 +120,6 @@ object FirJvmErrors {
|
||||
val SPREAD_ON_SIGNATURE_POLYMORPHIC_CALL by deprecationError0<PsiElement>(ProhibitSpreadOnSignaturePolymorphicCall, SourceElementPositioningStrategies.SPREAD_OPERATOR)
|
||||
val JAVA_SAM_INTERFACE_CONSTRUCTOR_REFERENCE by error0<PsiElement>()
|
||||
val NO_REFLECTION_IN_CLASS_PATH by warning0<PsiElement>()
|
||||
val INCOMPATIBLE_CLASS by error2<PsiElement, String, IncompatibleVersionErrorData<*>>()
|
||||
val PRE_RELEASE_CLASS by error1<PsiElement, String>()
|
||||
|
||||
init {
|
||||
RootDiagnosticRendererFactory.registerFactory(FirJvmErrorsDefaultMessages)
|
||||
|
||||
-20
@@ -29,7 +29,6 @@ import org.jetbrains.kotlin.fir.analysis.diagnostics.jvm.FirJvmErrors.ILLEGAL_JV
|
||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.jvm.FirJvmErrors.INAPPLICABLE_JVM_FIELD
|
||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.jvm.FirJvmErrors.INAPPLICABLE_JVM_FIELD_WARNING
|
||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.jvm.FirJvmErrors.INAPPLICABLE_JVM_NAME
|
||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.jvm.FirJvmErrors.INCOMPATIBLE_CLASS
|
||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.jvm.FirJvmErrors.INNER_JVM_RECORD
|
||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.jvm.FirJvmErrors.INTERFACE_CANT_CALL_DEFAULT_METHOD_VIA_SUPER
|
||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.jvm.FirJvmErrors.JAVA_SAM_INTERFACE_CONSTRUCTOR_REFERENCE
|
||||
@@ -64,7 +63,6 @@ import org.jetbrains.kotlin.fir.analysis.diagnostics.jvm.FirJvmErrors.OVERLOADS_
|
||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.jvm.FirJvmErrors.OVERLOADS_WITHOUT_DEFAULT_ARGUMENTS
|
||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.jvm.FirJvmErrors.OVERRIDE_CANNOT_BE_STATIC
|
||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.jvm.FirJvmErrors.POSITIONED_VALUE_ARGUMENT_FOR_JAVA_ANNOTATION
|
||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.jvm.FirJvmErrors.PRE_RELEASE_CLASS
|
||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.jvm.FirJvmErrors.REDUNDANT_REPEATABLE_ANNOTATION
|
||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.jvm.FirJvmErrors.REPEATABLE_ANNOTATION_HAS_NESTED_CLASS_NAMED_CONTAINER
|
||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.jvm.FirJvmErrors.REPEATABLE_CONTAINER_HAS_NON_DEFAULT_PARAMETER
|
||||
@@ -83,7 +81,6 @@ import org.jetbrains.kotlin.fir.analysis.diagnostics.jvm.FirJvmErrors.SYNCHRONIZ
|
||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.jvm.FirJvmErrors.SYNCHRONIZED_ON_SUSPEND
|
||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.jvm.FirJvmErrors.UPPER_BOUND_CANNOT_BE_ARRAY
|
||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.jvm.FirJvmErrors.VALUE_CLASS_WITHOUT_JVM_INLINE_ANNOTATION
|
||||
import org.jetbrains.kotlin.serialization.deserialization.IncompatibleVersionErrorData
|
||||
|
||||
object FirJvmErrorsDefaultMessages : BaseDiagnosticRendererFactory() {
|
||||
|
||||
@@ -268,22 +265,5 @@ object FirJvmErrorsDefaultMessages : BaseDiagnosticRendererFactory() {
|
||||
"Call uses reflection API which is not found in compilation classpath. " +
|
||||
"Make sure you have kotlin-reflect.jar in the classpath."
|
||||
)
|
||||
map.put(
|
||||
INCOMPATIBLE_CLASS,
|
||||
"{0} was compiled with an incompatible version of Kotlin. {1}",
|
||||
STRING,
|
||||
Renderer { incompatibility: IncompatibleVersionErrorData<*> ->
|
||||
"The actual metadata version is ${incompatibility.actualVersion}, " +
|
||||
"but the compiler version ${incompatibility.compilerVersion}" +
|
||||
(if (incompatibility.languageVersion == incompatibility.compilerVersion) "" else " [with language version " + incompatibility.languageVersion + "]") +
|
||||
" can read versions up to ${incompatibility.expectedVersion}.\n" +
|
||||
"The class is loaded from ${FileUtil.toSystemIndependentName(incompatibility.filePath)}"
|
||||
}
|
||||
)
|
||||
map.put(
|
||||
PRE_RELEASE_CLASS,
|
||||
"{0} is compiled by a pre-release version of Kotlin and cannot be loaded by this version of the compiler",
|
||||
STRING
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
-1
@@ -19,7 +19,6 @@ object JvmExpressionCheckers : ExpressionCheckers() {
|
||||
get() = setOf(
|
||||
FirInterfaceDefaultMethodCallChecker,
|
||||
FirJavaSamInterfaceConstructorReferenceChecker,
|
||||
FirIncompatibleClassExpressionChecker,
|
||||
)
|
||||
|
||||
override val callableReferenceAccessCheckers: Set<FirCallableReferenceAccessChecker>
|
||||
|
||||
+1
-2
@@ -8,12 +8,11 @@ package org.jetbrains.kotlin.fir.analysis.jvm.checkers
|
||||
import org.jetbrains.kotlin.fir.analysis.checkers.declaration.FirDynamicUnsupportedChecker
|
||||
import org.jetbrains.kotlin.fir.analysis.checkers.type.*
|
||||
import org.jetbrains.kotlin.fir.analysis.jvm.checkers.type.FirFunctionalTypeParameterNameChecker
|
||||
import org.jetbrains.kotlin.fir.analysis.jvm.checkers.type.FirJvmIncompatibleClassTypeChecker
|
||||
import org.jetbrains.kotlin.fir.analysis.checkers.type.FirIncompatibleClassTypeChecker
|
||||
|
||||
object JvmTypeCheckers : TypeCheckers() {
|
||||
override val typeRefCheckers: Set<FirTypeRefChecker> = setOf(
|
||||
FirDynamicUnsupportedChecker,
|
||||
FirFunctionalTypeParameterNameChecker,
|
||||
FirJvmIncompatibleClassTypeChecker,
|
||||
)
|
||||
}
|
||||
|
||||
@@ -111,6 +111,7 @@ import org.jetbrains.kotlin.resolve.deprecation.DeprecationInfo
|
||||
import org.jetbrains.kotlin.resolve.multiplatform.ExpectActualAnnotationsIncompatibilityType
|
||||
import org.jetbrains.kotlin.resolve.multiplatform.ExpectActualCompatibility
|
||||
import org.jetbrains.kotlin.resolve.multiplatform.ExpectActualCompatibility.Incompatible
|
||||
import org.jetbrains.kotlin.serialization.deserialization.IncompatibleVersionErrorData
|
||||
import org.jetbrains.kotlin.types.Variance
|
||||
|
||||
/*
|
||||
@@ -853,6 +854,10 @@ object FirErrors {
|
||||
val DEPRECATED_ACCESS_TO_ENUM_ENTRY_PROPERTY_AS_REFERENCE by warning0<PsiElement>(SourceElementPositioningStrategies.REFERENCED_NAME_BY_QUALIFIED)
|
||||
val DEPRECATED_DECLARATION_OF_ENUM_ENTRY by warning0<KtEnumEntry>()
|
||||
|
||||
// Compatibility issues
|
||||
val INCOMPATIBLE_CLASS by error2<PsiElement, String, IncompatibleVersionErrorData<*>>()
|
||||
val PRE_RELEASE_CLASS by error1<PsiElement, String>()
|
||||
|
||||
init {
|
||||
RootDiagnosticRendererFactory.registerFactory(FirErrorsDefaultMessages)
|
||||
}
|
||||
|
||||
+2
-2
@@ -563,6 +563,8 @@ val FIR_NON_SUPPRESSIBLE_ERROR_NAMES: Set<String> = setOf(
|
||||
"RETURN_FOR_BUILT_IN_SUSPEND",
|
||||
"MIXING_SUSPEND_AND_NON_SUSPEND_SUPERTYPES",
|
||||
"MIXING_FUNCTIONAL_KINDS_IN_SUPERTYPES",
|
||||
"INCOMPATIBLE_CLASS",
|
||||
"PRE_RELEASE_CLASS",
|
||||
"CONFLICTING_JVM_DECLARATIONS",
|
||||
"OVERRIDE_CANNOT_BE_STATIC",
|
||||
"JVM_STATIC_NOT_IN_OBJECT_OR_CLASS_COMPANION",
|
||||
@@ -613,8 +615,6 @@ val FIR_NON_SUPPRESSIBLE_ERROR_NAMES: Set<String> = setOf(
|
||||
"JVM_SYNTHETIC_ON_DELEGATE",
|
||||
"SUBCLASS_CANT_CALL_COMPANION_PROTECTED_NON_STATIC",
|
||||
"JAVA_SAM_INTERFACE_CONSTRUCTOR_REFERENCE",
|
||||
"INCOMPATIBLE_CLASS",
|
||||
"PRE_RELEASE_CLASS",
|
||||
"IMPLEMENTING_FUNCTION_INTERFACE",
|
||||
"OVERRIDING_EXTERNAL_FUN_WITH_OPTIONAL_PARAMS",
|
||||
"OVERRIDING_EXTERNAL_FUN_WITH_OPTIONAL_PARAMS_WITH_FAKE",
|
||||
|
||||
+1
@@ -53,6 +53,7 @@ object CommonExpressionCheckers : ExpressionCheckers() {
|
||||
FirLateinitIntrinsicApplicabilityChecker,
|
||||
FirAbstractClassInstantiationChecker,
|
||||
FirInlineBodyQualifiedAccessExpressionChecker,
|
||||
FirIncompatibleClassExpressionChecker,
|
||||
)
|
||||
|
||||
override val callCheckers: Set<FirCallChecker>
|
||||
|
||||
+2
-1
@@ -18,6 +18,7 @@ object CommonTypeCheckers : TypeCheckers() {
|
||||
FirUnsupportedModifiersInFunctionTypeParameterChecker,
|
||||
FirStarProjectionModifierChecker,
|
||||
FirDuplicateParameterNameInFunctionTypeChecker,
|
||||
FirOptionalExpectationTypeChecker
|
||||
FirOptionalExpectationTypeChecker,
|
||||
FirIncompatibleClassTypeChecker,
|
||||
)
|
||||
}
|
||||
|
||||
+4
-5
@@ -3,15 +3,14 @@
|
||||
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||
*/
|
||||
|
||||
package org.jetbrains.kotlin.fir.analysis.jvm.checkers.expression
|
||||
package org.jetbrains.kotlin.fir.analysis.checkers.expression
|
||||
|
||||
import org.jetbrains.kotlin.descriptors.SourceElement
|
||||
import org.jetbrains.kotlin.diagnostics.DiagnosticReporter
|
||||
import org.jetbrains.kotlin.diagnostics.reportOn
|
||||
import org.jetbrains.kotlin.fir.FirElement
|
||||
import org.jetbrains.kotlin.fir.analysis.checkers.context.CheckerContext
|
||||
import org.jetbrains.kotlin.fir.analysis.checkers.expression.FirQualifiedAccessExpressionChecker
|
||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.jvm.FirJvmErrors
|
||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors
|
||||
import org.jetbrains.kotlin.fir.declarations.utils.sourceElement
|
||||
import org.jetbrains.kotlin.fir.expressions.FirQualifiedAccessExpression
|
||||
import org.jetbrains.kotlin.fir.references.toResolvedCallableSymbol
|
||||
@@ -48,10 +47,10 @@ object FirIncompatibleClassExpressionChecker : FirQualifiedAccessExpressionCheck
|
||||
|
||||
val incompatibility = source.incompatibility
|
||||
if (incompatibility != null) {
|
||||
reporter.reportOn(element.source, FirJvmErrors.INCOMPATIBLE_CLASS, source.presentableString, incompatibility, context)
|
||||
reporter.reportOn(element.source, FirErrors.INCOMPATIBLE_CLASS, source.presentableString, incompatibility, context)
|
||||
}
|
||||
if (source.isPreReleaseInvisible) {
|
||||
reporter.reportOn(element.source, FirJvmErrors.PRE_RELEASE_CLASS, source.presentableString, context)
|
||||
reporter.reportOn(element.source, FirErrors.PRE_RELEASE_CLASS, source.presentableString, context)
|
||||
}
|
||||
}
|
||||
}
|
||||
+3
-4
@@ -3,16 +3,15 @@
|
||||
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||
*/
|
||||
|
||||
package org.jetbrains.kotlin.fir.analysis.jvm.checkers.type
|
||||
package org.jetbrains.kotlin.fir.analysis.checkers.type
|
||||
|
||||
import org.jetbrains.kotlin.diagnostics.DiagnosticReporter
|
||||
import org.jetbrains.kotlin.fir.analysis.checkers.context.CheckerContext
|
||||
import org.jetbrains.kotlin.fir.analysis.checkers.type.FirTypeRefChecker
|
||||
import org.jetbrains.kotlin.fir.analysis.jvm.checkers.expression.FirIncompatibleClassExpressionChecker
|
||||
import org.jetbrains.kotlin.fir.analysis.checkers.expression.FirIncompatibleClassExpressionChecker
|
||||
import org.jetbrains.kotlin.fir.types.FirTypeRef
|
||||
import org.jetbrains.kotlin.fir.types.coneTypeOrNull
|
||||
|
||||
object FirJvmIncompatibleClassTypeChecker : FirTypeRefChecker() {
|
||||
object FirIncompatibleClassTypeChecker : FirTypeRefChecker() {
|
||||
override fun check(typeRef: FirTypeRef, context: CheckerContext, reporter: DiagnosticReporter) {
|
||||
FirIncompatibleClassExpressionChecker.checkType(typeRef.coneTypeOrNull, typeRef, context, reporter)
|
||||
}
|
||||
+24
@@ -5,6 +5,7 @@
|
||||
|
||||
package org.jetbrains.kotlin.fir.analysis.diagnostics
|
||||
|
||||
import com.intellij.openapi.util.io.FileUtil
|
||||
import org.jetbrains.kotlin.diagnostics.KtDiagnosticFactoryToRendererMap
|
||||
import org.jetbrains.kotlin.diagnostics.KtDiagnosticRenderers.COLLECTION
|
||||
import org.jetbrains.kotlin.diagnostics.KtDiagnosticRenderers.EMPTY
|
||||
@@ -19,6 +20,7 @@ import org.jetbrains.kotlin.diagnostics.rendering.CommonRenderers.RENDER_POSITIO
|
||||
import org.jetbrains.kotlin.diagnostics.rendering.CommonRenderers.STRING
|
||||
import org.jetbrains.kotlin.diagnostics.rendering.CommonRenderers.commaSeparated
|
||||
import org.jetbrains.kotlin.diagnostics.rendering.LanguageFeatureMessageRenderer
|
||||
import org.jetbrains.kotlin.diagnostics.rendering.Renderer
|
||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirDiagnosticRenderers.AMBIGUOUS_CALLS
|
||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirDiagnosticRenderers.CALLEE_NAME
|
||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirDiagnosticRenderers.DECLARATION_NAME
|
||||
@@ -299,6 +301,7 @@ import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.INAPPLICABLE_TARG
|
||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.INAPPLICABLE_TARGET_PROPERTY_HAS_NO_BACKING_FIELD
|
||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.INAPPLICABLE_TARGET_PROPERTY_HAS_NO_DELEGATE
|
||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.INAPPLICABLE_TARGET_PROPERTY_IMMUTABLE
|
||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.INCOMPATIBLE_CLASS
|
||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.INCOMPATIBLE_ENUM_COMPARISON
|
||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.INCOMPATIBLE_ENUM_COMPARISON_ERROR
|
||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.INCOMPATIBLE_MODIFIERS
|
||||
@@ -482,6 +485,7 @@ import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.PACKAGE_CANNOT_BE
|
||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.PACKAGE_OR_CLASSIFIER_REDECLARATION
|
||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.PLATFORM_CLASS_MAPPED_TO_KOTLIN
|
||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.PLUGIN_ANNOTATION_AMBIGUITY
|
||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.PRE_RELEASE_CLASS
|
||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.PRIMARY_CONSTRUCTOR_DELEGATION_CALL_EXPECTED
|
||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.PRIMARY_CONSTRUCTOR_REQUIRED_FOR_DATA_CLASS
|
||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.PRIVATE_CLASS_MEMBER_FROM_INLINE
|
||||
@@ -688,6 +692,7 @@ import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.WRONG_MODIFIER_TA
|
||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.WRONG_NUMBER_OF_TYPE_ARGUMENTS
|
||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.WRONG_SETTER_PARAMETER_TYPE
|
||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.WRONG_SETTER_RETURN_TYPE
|
||||
import org.jetbrains.kotlin.serialization.deserialization.IncompatibleVersionErrorData
|
||||
|
||||
/**
|
||||
* ## Guidelines for diagnostic messages
|
||||
@@ -2476,6 +2481,25 @@ object FirErrorsDefaultMessages : BaseDiagnosticRendererFactory() {
|
||||
map.put(ASSIGNED_VALUE_IS_NEVER_READ, "Assigned value is never read.")
|
||||
map.put(VARIABLE_INITIALIZER_IS_REDUNDANT, "Initializer is redundant.")
|
||||
map.put(VARIABLE_NEVER_READ, "Variable is never read.")
|
||||
|
||||
// Compatibility issues group
|
||||
map.put(
|
||||
INCOMPATIBLE_CLASS,
|
||||
"{0} was compiled with an incompatible version of Kotlin. {1}",
|
||||
STRING,
|
||||
Renderer { incompatibility: IncompatibleVersionErrorData<*> ->
|
||||
"The actual metadata version is ${incompatibility.actualVersion}, " +
|
||||
"but the compiler version ${incompatibility.compilerVersion}" +
|
||||
(if (incompatibility.languageVersion == incompatibility.compilerVersion) "" else " [with language version " + incompatibility.languageVersion + "]") +
|
||||
" can read versions up to ${incompatibility.expectedVersion}.\n" +
|
||||
"The class is loaded from ${FileUtil.toSystemIndependentName(incompatibility.filePath)}"
|
||||
}
|
||||
)
|
||||
map.put(
|
||||
PRE_RELEASE_CLASS,
|
||||
"{0} is compiled by a pre-release version of Kotlin and cannot be loaded by this version of the compiler",
|
||||
STRING
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+32
@@ -0,0 +1,32 @@
|
||||
error: pre-release classes were found in dependencies. Remove them from the classpath, recompile with a release compiler or use '-Xskip-prerelease-check' to suppress errors
|
||||
compiler/testData/compileKotlinAgainstCustomBinaries/releaseCompilerAgainstPreReleaseLibraryJs/source.kt:5:16: error: package 'a' is compiled by a pre-release version of Kotlin and cannot be loaded by this version of the compiler
|
||||
fun baz(param: A, nested: A.Nested) {
|
||||
^
|
||||
compiler/testData/compileKotlinAgainstCustomBinaries/releaseCompilerAgainstPreReleaseLibraryJs/source.kt:5:27: error: package 'a' is compiled by a pre-release version of Kotlin and cannot be loaded by this version of the compiler
|
||||
fun baz(param: A, nested: A.Nested) {
|
||||
^
|
||||
compiler/testData/compileKotlinAgainstCustomBinaries/releaseCompilerAgainstPreReleaseLibraryJs/source.kt:6:23: error: package 'a' is compiled by a pre-release version of Kotlin and cannot be loaded by this version of the compiler
|
||||
val constructor = A()
|
||||
^
|
||||
compiler/testData/compileKotlinAgainstCustomBinaries/releaseCompilerAgainstPreReleaseLibraryJs/source.kt:7:18: error: package 'a' is compiled by a pre-release version of Kotlin and cannot be loaded by this version of the compiler
|
||||
val nested = A.Nested()
|
||||
^
|
||||
compiler/testData/compileKotlinAgainstCustomBinaries/releaseCompilerAgainstPreReleaseLibraryJs/source.kt:8:22: error: package 'a' is compiled by a pre-release version of Kotlin and cannot be loaded by this version of the compiler
|
||||
val methodCall = param.method()
|
||||
^
|
||||
compiler/testData/compileKotlinAgainstCustomBinaries/releaseCompilerAgainstPreReleaseLibraryJs/source.kt:8:28: error: unresolved reference 'method'.
|
||||
val methodCall = param.method()
|
||||
^
|
||||
compiler/testData/compileKotlinAgainstCustomBinaries/releaseCompilerAgainstPreReleaseLibraryJs/source.kt:9:30: error: package 'a' is compiled by a pre-release version of Kotlin and cannot be loaded by this version of the compiler
|
||||
val supertype = object : A() {}
|
||||
^
|
||||
compiler/testData/compileKotlinAgainstCustomBinaries/releaseCompilerAgainstPreReleaseLibraryJs/source.kt:11:13: error: package 'a' is compiled by a pre-release version of Kotlin and cannot be loaded by this version of the compiler
|
||||
val x = foo()
|
||||
^
|
||||
compiler/testData/compileKotlinAgainstCustomBinaries/releaseCompilerAgainstPreReleaseLibraryJs/source.kt:12:13: error: package 'a' is compiled by a pre-release version of Kotlin and cannot be loaded by this version of the compiler
|
||||
val y = bar
|
||||
^
|
||||
compiler/testData/compileKotlinAgainstCustomBinaries/releaseCompilerAgainstPreReleaseLibraryJs/source.kt:13:5: error: package 'a' is compiled by a pre-release version of Kotlin and cannot be loaded by this version of the compiler
|
||||
bar = 239
|
||||
^
|
||||
COMPILATION_ERROR
|
||||
+1
-1
@@ -250,7 +250,7 @@ abstract class AbstractCompileKotlinAgainstCustomBinariesTest : AbstractKotlinCo
|
||||
doTestPreReleaseKotlinLibrary(K2JVMCompiler(), "library", tmpdir)
|
||||
}
|
||||
|
||||
// KT-61596 K2 JS: support reporting PRE_RELEASE_CLASS
|
||||
// TODO: unmute this test after switching LanguageVersion.LATEST_STABLE to 2.0.
|
||||
fun testReleaseCompilerAgainstPreReleaseLibraryJs() = muteForK2 {
|
||||
doTestPreReleaseKotlinLibrary(K2JSCompiler(), "library", File(tmpdir, "usage.js"))
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user