[FIR] Remove unnecessary SAM sonversion in java nullability checker
#KT-62847
This commit is contained in:
committed by
Space Team
parent
b857c28ab3
commit
674c56827f
+2
-20
@@ -15,7 +15,6 @@ import org.jetbrains.kotlin.fir.analysis.diagnostics.jvm.FirJvmErrors
|
|||||||
import org.jetbrains.kotlin.fir.expressions.*
|
import org.jetbrains.kotlin.fir.expressions.*
|
||||||
import org.jetbrains.kotlin.fir.expressions.impl.FirElseIfTrueCondition
|
import org.jetbrains.kotlin.fir.expressions.impl.FirElseIfTrueCondition
|
||||||
import org.jetbrains.kotlin.fir.java.enhancement.EnhancedForWarningConeSubstitutor
|
import org.jetbrains.kotlin.fir.java.enhancement.EnhancedForWarningConeSubstitutor
|
||||||
import org.jetbrains.kotlin.fir.resolve.FirSamResolver
|
|
||||||
import org.jetbrains.kotlin.fir.resolve.substitution.ConeSubstitutor
|
import org.jetbrains.kotlin.fir.resolve.substitution.ConeSubstitutor
|
||||||
import org.jetbrains.kotlin.fir.resolve.substitution.ConeSubstitutorByMap
|
import org.jetbrains.kotlin.fir.resolve.substitution.ConeSubstitutorByMap
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.FirCallableSymbol
|
import org.jetbrains.kotlin.fir.symbols.impl.FirCallableSymbol
|
||||||
@@ -153,7 +152,7 @@ internal fun FirExpression.checkExpressionForEnhancedTypeMismatch(
|
|||||||
|
|
||||||
if (!actualTypeForComparison.isSubtypeOf(context.session.typeContext, expectedTypeForComparison) &&
|
if (!actualTypeForComparison.isSubtypeOf(context.session.typeContext, expectedTypeForComparison) &&
|
||||||
// Don't report anything if the original types didn't match.
|
// Don't report anything if the original types didn't match.
|
||||||
actualType.isSubtypeOf(context.session.typeContext, expectedType.asExpectedFunctionTypeIfSam(actualType, context))
|
actualType.isSubtypeOf(context.session.typeContext, expectedType)
|
||||||
) {
|
) {
|
||||||
reporter.reportOn(source, factory, actualTypeForComparison, expectedTypeForComparison, context)
|
reporter.reportOn(source, factory, actualTypeForComparison, expectedTypeForComparison, context)
|
||||||
}
|
}
|
||||||
@@ -178,22 +177,5 @@ private fun getEnhancedTypesForComparison(
|
|||||||
val actualTypeForComparison = enhancedActualType ?: actualType
|
val actualTypeForComparison = enhancedActualType ?: actualType
|
||||||
val expectedTypeForComparison = enhancedExpectedType ?: expectedType
|
val expectedTypeForComparison = enhancedExpectedType ?: expectedType
|
||||||
|
|
||||||
val expectedTypeAsFunctionTypeIfSam = expectedTypeForComparison.asExpectedFunctionTypeIfSam(actualTypeForComparison, context)
|
return actualTypeForComparison to expectedTypeForComparison
|
||||||
|
|
||||||
return actualTypeForComparison to expectedTypeAsFunctionTypeIfSam
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* If the receiver is a SAM type and the [actualType] is a function type, converts the receiver to the corresponding function type.
|
|
||||||
* Otherwise, returns receiver.
|
|
||||||
*
|
|
||||||
* TODO remove after KT-62847
|
|
||||||
* */
|
|
||||||
private fun ConeKotlinType.asExpectedFunctionTypeIfSam(actualType: ConeKotlinType, context: CheckerContext): ConeKotlinType {
|
|
||||||
if (!actualType.isSomeFunctionType(context.session) || isSomeFunctionType(context.session)) {
|
|
||||||
return this
|
|
||||||
}
|
|
||||||
|
|
||||||
val samResolver = FirSamResolver(context.session, context.scopeSession)
|
|
||||||
return samResolver.getFunctionTypeForPossibleSamType(this) ?: this
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user