[FIR] Don't lose error level enhancements in warning-level-enhanced arguments
The error-level enhancement is kept as warning-level and a new
LanguageFeature is introduced to turn the warning into an error.
#KT-63208 Fixed
#KT-63209
(cherry picked from commit 371b1eb3d5)
This commit is contained in:
committed by
Space Team
parent
c39262195d
commit
e91e9d8ca8
+3
-2
@@ -15,6 +15,7 @@ import org.jetbrains.kotlin.diagnostics.*
|
||||
import org.jetbrains.kotlin.diagnostics.KtDiagnosticFactory0
|
||||
import org.jetbrains.kotlin.diagnostics.KtDiagnosticFactory1
|
||||
import org.jetbrains.kotlin.diagnostics.KtDiagnosticFactory2
|
||||
import org.jetbrains.kotlin.diagnostics.KtDiagnosticFactory3
|
||||
import org.jetbrains.kotlin.diagnostics.KtDiagnosticFactoryForDeprecation0
|
||||
import org.jetbrains.kotlin.diagnostics.KtDiagnosticFactoryForDeprecation2
|
||||
import org.jetbrains.kotlin.diagnostics.KtDiagnosticFactoryForDeprecation4
|
||||
@@ -52,8 +53,8 @@ object FirJvmErrors {
|
||||
|
||||
// Types
|
||||
val JAVA_TYPE_MISMATCH: KtDiagnosticFactory2<ConeKotlinType, ConeKotlinType> by error2<KtExpression, ConeKotlinType, ConeKotlinType>()
|
||||
val RECEIVER_NULLABILITY_MISMATCH_BASED_ON_JAVA_ANNOTATIONS: KtDiagnosticFactory2<ConeKotlinType, ConeKotlinType> by warning2<PsiElement, ConeKotlinType, ConeKotlinType>()
|
||||
val NULLABILITY_MISMATCH_BASED_ON_JAVA_ANNOTATIONS: KtDiagnosticFactory2<ConeKotlinType, ConeKotlinType> by warning2<PsiElement, ConeKotlinType, ConeKotlinType>()
|
||||
val RECEIVER_NULLABILITY_MISMATCH_BASED_ON_JAVA_ANNOTATIONS: KtDiagnosticFactory3<ConeKotlinType, ConeKotlinType, String> by warning3<PsiElement, ConeKotlinType, ConeKotlinType, String>()
|
||||
val NULLABILITY_MISMATCH_BASED_ON_JAVA_ANNOTATIONS: KtDiagnosticFactory3<ConeKotlinType, ConeKotlinType, String> by warning3<PsiElement, ConeKotlinType, ConeKotlinType, String>()
|
||||
|
||||
// Type parameters
|
||||
val UPPER_BOUND_CANNOT_BE_ARRAY: KtDiagnosticFactory0 by error0<PsiElement>()
|
||||
|
||||
+7
-4
@@ -12,6 +12,7 @@ import org.jetbrains.kotlin.diagnostics.rendering.BaseDiagnosticRendererFactory
|
||||
import org.jetbrains.kotlin.diagnostics.rendering.CommonRenderers.NAME
|
||||
import org.jetbrains.kotlin.diagnostics.rendering.CommonRenderers.STRING
|
||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirDiagnosticRenderers.DECLARATION_NAME
|
||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirDiagnosticRenderers.OPTIONAL_SENTENCE
|
||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirDiagnosticRenderers.RENDER_TYPE
|
||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirDiagnosticRenderers.SYMBOL
|
||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.jvm.FirJvmErrors.CONCURRENT_HASH_MAP_CONTAINS_OPERATOR
|
||||
@@ -94,15 +95,17 @@ object FirJvmErrorsDefaultMessages : BaseDiagnosticRendererFactory() {
|
||||
|
||||
map.put(
|
||||
NULLABILITY_MISMATCH_BASED_ON_JAVA_ANNOTATIONS,
|
||||
"Java type mismatch: inferred type is ''{1}'', but ''{0}'' was expected.",
|
||||
"Java type mismatch: inferred type is ''{1}'', but ''{0}'' was expected.{2}",
|
||||
RENDER_TYPE,
|
||||
RENDER_TYPE
|
||||
RENDER_TYPE,
|
||||
OPTIONAL_SENTENCE,
|
||||
)
|
||||
map.put(
|
||||
RECEIVER_NULLABILITY_MISMATCH_BASED_ON_JAVA_ANNOTATIONS,
|
||||
"Only safe (?.) or non-null asserted (!!.) calls are allowed on a nullable receiver of type ''{0}''.",
|
||||
"Only safe (?.) or non-null asserted (!!.) calls are allowed on a nullable receiver of type ''{0}''.{2}",
|
||||
RENDER_TYPE,
|
||||
NOT_RENDERED
|
||||
NOT_RENDERED,
|
||||
OPTIONAL_SENTENCE,
|
||||
)
|
||||
|
||||
map.put(
|
||||
|
||||
+12
-4
@@ -5,8 +5,9 @@
|
||||
|
||||
package org.jetbrains.kotlin.fir.analysis.jvm.checkers.expression
|
||||
|
||||
import org.jetbrains.kotlin.config.LanguageFeature
|
||||
import org.jetbrains.kotlin.diagnostics.DiagnosticReporter
|
||||
import org.jetbrains.kotlin.diagnostics.KtDiagnosticFactory2
|
||||
import org.jetbrains.kotlin.diagnostics.KtDiagnosticFactory3
|
||||
import org.jetbrains.kotlin.diagnostics.reportOn
|
||||
import org.jetbrains.kotlin.fir.FirSession
|
||||
import org.jetbrains.kotlin.fir.analysis.checkers.context.CheckerContext
|
||||
@@ -15,11 +16,11 @@ import org.jetbrains.kotlin.fir.analysis.diagnostics.jvm.FirJvmErrors
|
||||
import org.jetbrains.kotlin.fir.expressions.*
|
||||
import org.jetbrains.kotlin.fir.expressions.impl.FirElseIfTrueCondition
|
||||
import org.jetbrains.kotlin.fir.java.enhancement.EnhancedForWarningConeSubstitutor
|
||||
import org.jetbrains.kotlin.fir.java.enhancement.isEnhancedTypeForWarningDeprecation
|
||||
import org.jetbrains.kotlin.fir.resolve.substitution.ConeSubstitutor
|
||||
import org.jetbrains.kotlin.fir.resolve.substitution.ConeSubstitutorByMap
|
||||
import org.jetbrains.kotlin.fir.symbols.impl.FirCallableSymbol
|
||||
import org.jetbrains.kotlin.fir.types.*
|
||||
import java.util.*
|
||||
|
||||
// TODO reimplement using AdditionalTypeChecker KT-62864
|
||||
object FirQualifiedAccessJavaNullabilityWarningChecker : FirQualifiedAccessExpressionChecker() {
|
||||
@@ -142,7 +143,7 @@ internal fun FirExpression.checkExpressionForEnhancedTypeMismatch(
|
||||
expectedType: ConeKotlinType?,
|
||||
reporter: DiagnosticReporter,
|
||||
context: CheckerContext,
|
||||
factory: KtDiagnosticFactory2<ConeKotlinType, ConeKotlinType>,
|
||||
factory: KtDiagnosticFactory3<ConeKotlinType, ConeKotlinType, String>,
|
||||
) {
|
||||
if (expectedType == null) return
|
||||
val actualType = resolvedType
|
||||
@@ -154,7 +155,14 @@ internal fun FirExpression.checkExpressionForEnhancedTypeMismatch(
|
||||
// Don't report anything if the original types didn't match.
|
||||
actualType.isSubtypeOf(context.session.typeContext, expectedType)
|
||||
) {
|
||||
reporter.reportOn(source, factory, actualTypeForComparison, expectedTypeForComparison, context)
|
||||
val suffix =
|
||||
if (actualType.isEnhancedTypeForWarningDeprecation || expectedType.isEnhancedTypeForWarningDeprecation) {
|
||||
val versionString = LanguageFeature.SupportJavaErrorEnhancementOfArgumentsOfWarningLevelEnhanced.sinceVersion?.versionString
|
||||
"This will become an error in Kotlin $versionString. See https://youtrack.jetbrains.com/issue/KT-63209"
|
||||
} else {
|
||||
""
|
||||
}
|
||||
reporter.reportOn(source, factory, actualTypeForComparison, expectedTypeForComparison, suffix, context)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user