[FIR] Fix false negative REDUNDANT_SINGLE_EXPRESSION_STRING_TEMPLATE

... in presence of typealiases.

#KT-61921
This commit is contained in:
Kirill Rakhman
2023-09-13 17:42:26 +02:00
committed by Space Team
parent 373ffbc779
commit e788c7166a
3 changed files with 11 additions and 2 deletions
@@ -3,6 +3,11 @@ FILE: RedundantSingleExpressionStringTemplateChecker.kt
public get(): R|kotlin/String|
public final val y: R|kotlin/String| = <strcat>(R|/x|)
public get(): R|kotlin/String|
public final typealias S = R|kotlin/String|
public final val x2: R|S| = String(Hello)
public get(): R|S|
public final val y2: R|kotlin/String| = <strcat>(R|/x2|)
public get(): R|kotlin/String|
public final val z: R|kotlin/String| = <strcat>(R|/y|.R|kotlin/Any.hashCode|())
public get(): R|kotlin/String|
public final fun toString(x: R|kotlin/String|): R|kotlin/String| {
@@ -2,6 +2,10 @@ val x = "Hello"
val y = "$<!REDUNDANT_SINGLE_EXPRESSION_STRING_TEMPLATE!>x<!>"
typealias S = String
val x2: S = "Hello"
val y2 = "$<!REDUNDANT_SINGLE_EXPRESSION_STRING_TEMPLATE!>x2<!>"
val z = "${y.hashCode()}"
fun toString(x: String) = "IC$x"
@@ -19,7 +19,7 @@ import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.REDUNDANT_SINGLE_
import org.jetbrains.kotlin.fir.expressions.FirStatement
import org.jetbrains.kotlin.fir.expressions.FirStringConcatenationCall
import org.jetbrains.kotlin.fir.expressions.arguments
import org.jetbrains.kotlin.fir.types.classId
import org.jetbrains.kotlin.fir.analysis.checkers.fullyExpandedClassId
import org.jetbrains.kotlin.fir.types.resolvedType
import org.jetbrains.kotlin.name.StandardClassIds
import org.jetbrains.kotlin.psi.KtStringTemplateExpression
@@ -28,7 +28,7 @@ import org.jetbrains.kotlin.util.getChildren
object RedundantSingleExpressionStringTemplateChecker : FirStringConcatenationCallChecker() {
override fun check(expression: FirStringConcatenationCall, context: CheckerContext, reporter: DiagnosticReporter) {
for (argumentExpression in expression.arguments) {
if (argumentExpression.resolvedType.classId == StandardClassIds.String &&
if (argumentExpression.resolvedType.fullyExpandedClassId(context.session) == StandardClassIds.String &&
argumentExpression.stringParentChildrenCount() == 1 // there is no more children in original string template
) {
reporter.reportOn(argumentExpression.source, REDUNDANT_SINGLE_EXPRESSION_STRING_TEMPLATE, context)