diff --git a/compiler/fir/analysis-tests/testData/resolve/extendedCheckers/RedundantCallOfConversionMethod/int.fir.txt b/compiler/fir/analysis-tests/testData/resolve/extendedCheckers/RedundantCallOfConversionMethod/int.fir.txt index cedb43319a0..706c452a5d3 100644 --- a/compiler/fir/analysis-tests/testData/resolve/extendedCheckers/RedundantCallOfConversionMethod/int.fir.txt +++ b/compiler/fir/analysis-tests/testData/resolve/extendedCheckers/RedundantCallOfConversionMethod/int.fir.txt @@ -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| diff --git a/compiler/fir/analysis-tests/testData/resolve/extendedCheckers/RedundantCallOfConversionMethod/int.kt b/compiler/fir/analysis-tests/testData/resolve/extendedCheckers/RedundantCallOfConversionMethod/int.kt index bb9950a832a..866d79c7adb 100644 --- a/compiler/fir/analysis-tests/testData/resolve/extendedCheckers/RedundantCallOfConversionMethod/int.kt +++ b/compiler/fir/analysis-tests/testData/resolve/extendedCheckers/RedundantCallOfConversionMethod/int.kt @@ -1,2 +1,7 @@ // WITH_STDLIB -val foo = 1.toInt() \ No newline at end of file +val foo = 1.toInt() + +typealias IntAlias = Int +val aliased: IntAlias = 1 + +val bar = aliased.toInt() diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/extended/RedundantCallOfConversionMethod.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/extended/RedundantCallOfConversionMethod.kt index 95f2b1b47af..56909e4e6e9 100644 --- a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/extended/RedundantCallOfConversionMethod.kt +++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/extended/RedundantCallOfConversionMethod.kt @@ -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