From 269ca2095020891dd5832afeae0291a9150fdfbc Mon Sep 17 00:00:00 2001 From: Ilya Kirillov Date: Thu, 30 May 2019 18:52:49 +0300 Subject: [PATCH] New J2K: add number types conversions to post-processing --- .../nj2k/postProcessing/J2kPostProcessor.kt | 23 +++++++++++++------ 1 file changed, 16 insertions(+), 7 deletions(-) diff --git a/nj2k/nj2k-services/src/org/jetbrains/kotlin/nj2k/postProcessing/J2kPostProcessor.kt b/nj2k/nj2k-services/src/org/jetbrains/kotlin/nj2k/postProcessing/J2kPostProcessor.kt index 2f95c46f457..febe9a4f95e 100644 --- a/nj2k/nj2k-services/src/org/jetbrains/kotlin/nj2k/postProcessing/J2kPostProcessor.kt +++ b/nj2k/nj2k-services/src/org/jetbrains/kotlin/nj2k/postProcessing/J2kPostProcessor.kt @@ -161,17 +161,26 @@ private val processings: List = listOf( Errors.SMARTCAST_IMPOSSIBLE ), diagnosticBasedProcessing(Errors.TYPE_MISMATCH) { element: PsiElement, diagnostic -> - @Suppress("UNCHECKED_CAST") val diagnosticWithParameters = + @Suppress("UNCHECKED_CAST") + val diagnosticWithParameters = diagnostic as? DiagnosticWithParameters2 ?: return@diagnosticBasedProcessing val expectedType = diagnosticWithParameters.a val realType = diagnosticWithParameters.b - if (realType.makeNotNullable().isSubtypeOf(expectedType.makeNotNullable()) - && realType.isNullable() - && !expectedType.isNullable() - ) { - val factory = KtPsiFactory(element) - element.replace(factory.createExpressionByPattern("($0)!!", element.text)) + when { + realType.makeNotNullable().isSubtypeOf(expectedType.makeNotNullable()) + && realType.isNullable() + && !expectedType.isNullable() + -> { + val factory = KtPsiFactory(element) + element.replace(factory.createExpressionByPattern("($0)!!", element.text)) + } + element is KtExpression + && realType.isSignedOrUnsignedNumberType() + && expectedType.isSignedOrUnsignedNumberType() -> { + val fix = NumberConversionFix(element, expectedType, disableIfAvailable = null) + fix.invoke(element.project, null, element.containingFile) + } } },