[FIR] Fix false negative REDUNDANT_CALL_OF_CONVERSION_METHOD
... in presence of typealiases. #KT-61921
This commit is contained in:
committed by
Space Team
parent
e788c7166a
commit
9475bc250c
+5
@@ -1,3 +1,8 @@
|
||||
FILE: int.kt
|
||||
public final val foo: R|kotlin/Int| = Int(1).R|kotlin/Int.toInt|()
|
||||
public get(): R|kotlin/Int|
|
||||
public final typealias IntAlias = R|kotlin/Int|
|
||||
public final val aliased: R|IntAlias| = Int(1)
|
||||
public get(): R|IntAlias|
|
||||
public final val bar: R|kotlin/Int| = R|/aliased|.R|kotlin/Int.toInt|()
|
||||
public get(): R|kotlin/Int|
|
||||
|
||||
compiler/fir/analysis-tests/testData/resolve/extendedCheckers/RedundantCallOfConversionMethod/int.kt
Vendored
+6
-1
@@ -1,2 +1,7 @@
|
||||
// WITH_STDLIB
|
||||
val foo = 1.<!REDUNDANT_CALL_OF_CONVERSION_METHOD!>toInt()<!>
|
||||
val foo = 1.<!REDUNDANT_CALL_OF_CONVERSION_METHOD!>toInt()<!>
|
||||
|
||||
typealias IntAlias = Int
|
||||
val aliased: IntAlias = 1
|
||||
|
||||
val bar = aliased.<!REDUNDANT_CALL_OF_CONVERSION_METHOD!>toInt()<!>
|
||||
|
||||
+5
-3
@@ -7,6 +7,7 @@ package org.jetbrains.kotlin.fir.analysis.checkers.extended
|
||||
|
||||
import org.jetbrains.kotlin.diagnostics.DiagnosticReporter
|
||||
import org.jetbrains.kotlin.diagnostics.reportOn
|
||||
import org.jetbrains.kotlin.fir.FirSession
|
||||
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.FirErrors
|
||||
@@ -15,6 +16,7 @@ import org.jetbrains.kotlin.fir.expressions.FirExpression
|
||||
import org.jetbrains.kotlin.fir.expressions.FirFunctionCall
|
||||
import org.jetbrains.kotlin.fir.expressions.FirQualifiedAccessExpression
|
||||
import org.jetbrains.kotlin.fir.psi
|
||||
import org.jetbrains.kotlin.fir.analysis.checkers.fullyExpandedClassId
|
||||
import org.jetbrains.kotlin.fir.types.ConeFlexibleType
|
||||
import org.jetbrains.kotlin.fir.types.classId
|
||||
import org.jetbrains.kotlin.fir.types.isMarkedNullable
|
||||
@@ -29,12 +31,12 @@ object RedundantCallOfConversionMethod : FirQualifiedAccessExpressionChecker() {
|
||||
val functionName = expression.calleeReference.name.asString()
|
||||
val qualifiedType = targetClassMap[functionName] ?: return
|
||||
|
||||
if (expression.explicitReceiver?.isRedundant(qualifiedType) == true) {
|
||||
if (expression.explicitReceiver?.isRedundant(qualifiedType, context.session) == true) {
|
||||
reporter.reportOn(expression.source, FirErrors.REDUNDANT_CALL_OF_CONVERSION_METHOD, context)
|
||||
}
|
||||
}
|
||||
|
||||
private fun FirExpression.isRedundant(qualifiedClassId: ClassId): Boolean {
|
||||
private fun FirExpression.isRedundant(qualifiedClassId: ClassId, session: FirSession): Boolean {
|
||||
val thisType = if (this is FirConstExpression<*>) {
|
||||
this.resolvedType.classId
|
||||
} else {
|
||||
@@ -43,7 +45,7 @@ object RedundantCallOfConversionMethod : FirQualifiedAccessExpressionChecker() {
|
||||
psi?.parent !is KtSafeQualifiedExpression
|
||||
&& (psi is KtSafeQualifiedExpression || resolvedType.isMarkedNullable) -> null
|
||||
this.resolvedType.isMarkedNullable -> null
|
||||
else -> this.resolvedType.classId
|
||||
else -> this.resolvedType.fullyExpandedClassId(session)
|
||||
}
|
||||
}
|
||||
return thisType == qualifiedClassId
|
||||
|
||||
Reference in New Issue
Block a user