[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
|
FILE: int.kt
|
||||||
public final val foo: R|kotlin/Int| = Int(1).R|kotlin/Int.toInt|()
|
public final val foo: R|kotlin/Int| = Int(1).R|kotlin/Int.toInt|()
|
||||||
public get(): R|kotlin/Int|
|
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
|
// 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.DiagnosticReporter
|
||||||
import org.jetbrains.kotlin.diagnostics.reportOn
|
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.context.CheckerContext
|
||||||
import org.jetbrains.kotlin.fir.analysis.checkers.expression.FirQualifiedAccessExpressionChecker
|
import org.jetbrains.kotlin.fir.analysis.checkers.expression.FirQualifiedAccessExpressionChecker
|
||||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors
|
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.FirFunctionCall
|
||||||
import org.jetbrains.kotlin.fir.expressions.FirQualifiedAccessExpression
|
import org.jetbrains.kotlin.fir.expressions.FirQualifiedAccessExpression
|
||||||
import org.jetbrains.kotlin.fir.psi
|
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.ConeFlexibleType
|
||||||
import org.jetbrains.kotlin.fir.types.classId
|
import org.jetbrains.kotlin.fir.types.classId
|
||||||
import org.jetbrains.kotlin.fir.types.isMarkedNullable
|
import org.jetbrains.kotlin.fir.types.isMarkedNullable
|
||||||
@@ -29,12 +31,12 @@ object RedundantCallOfConversionMethod : FirQualifiedAccessExpressionChecker() {
|
|||||||
val functionName = expression.calleeReference.name.asString()
|
val functionName = expression.calleeReference.name.asString()
|
||||||
val qualifiedType = targetClassMap[functionName] ?: return
|
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)
|
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<*>) {
|
val thisType = if (this is FirConstExpression<*>) {
|
||||||
this.resolvedType.classId
|
this.resolvedType.classId
|
||||||
} else {
|
} else {
|
||||||
@@ -43,7 +45,7 @@ object RedundantCallOfConversionMethod : FirQualifiedAccessExpressionChecker() {
|
|||||||
psi?.parent !is KtSafeQualifiedExpression
|
psi?.parent !is KtSafeQualifiedExpression
|
||||||
&& (psi is KtSafeQualifiedExpression || resolvedType.isMarkedNullable) -> null
|
&& (psi is KtSafeQualifiedExpression || resolvedType.isMarkedNullable) -> null
|
||||||
this.resolvedType.isMarkedNullable -> null
|
this.resolvedType.isMarkedNullable -> null
|
||||||
else -> this.resolvedType.classId
|
else -> this.resolvedType.fullyExpandedClassId(session)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return thisType == qualifiedClassId
|
return thisType == qualifiedClassId
|
||||||
|
|||||||
Reference in New Issue
Block a user