From a64526acfbb5743988710de226bf68ba71a4ce71 Mon Sep 17 00:00:00 2001 From: Ilya Kirillov Date: Thu, 5 Dec 2019 18:07:28 +0300 Subject: [PATCH] EA-210533: fix NPE in LiftReturnOrAssignmentInspection It may be still active after its application due to slow IDEA responsiveness Do not try to apply it again on invalid PSI elements --- .../idea/inspections/LiftReturnOrAssignmentInspection.kt | 2 +- .../branchedTransformations/BranchedFoldingUtils.kt | 6 ++++-- .../kotlin/idea/quickfix/LiftAssignmentOutOfTryFix.kt | 2 +- .../postProcessing/processings/inspeсtionLikeProcessings.kt | 2 +- 4 files changed, 7 insertions(+), 5 deletions(-) diff --git a/idea/src/org/jetbrains/kotlin/idea/inspections/LiftReturnOrAssignmentInspection.kt b/idea/src/org/jetbrains/kotlin/idea/inspections/LiftReturnOrAssignmentInspection.kt index 59b3b7dfd2b..27b0681195e 100644 --- a/idea/src/org/jetbrains/kotlin/idea/inspections/LiftReturnOrAssignmentInspection.kt +++ b/idea/src/org/jetbrains/kotlin/idea/inspections/LiftReturnOrAssignmentInspection.kt @@ -93,7 +93,7 @@ class LiftReturnOrAssignmentInspection @JvmOverloads constructor(private val ski override fun getFamilyName() = name override fun applyFix(project: Project, descriptor: ProblemDescriptor) { - BranchedFoldingUtils.foldToAssignment(descriptor.psiElement as KtExpression) + BranchedFoldingUtils.tryFoldToAssignment(descriptor.psiElement as KtExpression) } } diff --git a/idea/src/org/jetbrains/kotlin/idea/intentions/branchedTransformations/BranchedFoldingUtils.kt b/idea/src/org/jetbrains/kotlin/idea/intentions/branchedTransformations/BranchedFoldingUtils.kt index c6e69627f17..44de4d9a3d1 100644 --- a/idea/src/org/jetbrains/kotlin/idea/intentions/branchedTransformations/BranchedFoldingUtils.kt +++ b/idea/src/org/jetbrains/kotlin/idea/intentions/branchedTransformations/BranchedFoldingUtils.kt @@ -183,7 +183,7 @@ object BranchedFoldingUtils { fun canFoldToReturn(expression: KtExpression?): Boolean = getFoldableReturnNumber(expression) > 0 - fun foldToAssignment(expression: KtExpression) { + fun tryFoldToAssignment(expression: KtExpression) { var lhs: KtExpression? = null var op: String? = null val psiFactory = KtPsiFactory(expression) @@ -214,7 +214,9 @@ object BranchedFoldingUtils { } } lift(expression) - expression.replace(psiFactory.createExpressionByPattern("$0 $1 $2", lhs!!, op!!, expression)) + if (lhs != null && op != null) { + expression.replace(psiFactory.createExpressionByPattern("$0 $1 $2", lhs!!, op!!, expression)) + } } fun foldToReturn(expression: KtExpression): KtExpression { diff --git a/idea/src/org/jetbrains/kotlin/idea/quickfix/LiftAssignmentOutOfTryFix.kt b/idea/src/org/jetbrains/kotlin/idea/quickfix/LiftAssignmentOutOfTryFix.kt index 5ee90cd96e8..dae698f722a 100644 --- a/idea/src/org/jetbrains/kotlin/idea/quickfix/LiftAssignmentOutOfTryFix.kt +++ b/idea/src/org/jetbrains/kotlin/idea/quickfix/LiftAssignmentOutOfTryFix.kt @@ -22,7 +22,7 @@ class LiftAssignmentOutOfTryFix(element: KtTryExpression) : KotlinQuickFixAction override fun invoke(project: Project, editor: Editor?, file: KtFile) { val element = element ?: return - BranchedFoldingUtils.foldToAssignment(element) + BranchedFoldingUtils.tryFoldToAssignment(element) } companion object : KotlinSingleIntentionActionFactory() { diff --git a/nj2k/nj2k-services/src/org/jetbrains/kotlin/nj2k/postProcessing/processings/inspeсtionLikeProcessings.kt b/nj2k/nj2k-services/src/org/jetbrains/kotlin/nj2k/postProcessing/processings/inspeсtionLikeProcessings.kt index 4f0c7cfdc90..53149e66a45 100644 --- a/nj2k/nj2k-services/src/org/jetbrains/kotlin/nj2k/postProcessing/processings/inspeсtionLikeProcessings.kt +++ b/nj2k/nj2k-services/src/org/jetbrains/kotlin/nj2k/postProcessing/processings/inspeсtionLikeProcessings.kt @@ -491,7 +491,7 @@ class LiftAssignmentInspectionBasedProcessing : } ?: false override fun apply(element: KtExpression) { - BranchedFoldingUtils.foldToAssignment(element) + BranchedFoldingUtils.tryFoldToAssignment(element) } }