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
This commit is contained in:
Ilya Kirillov
2019-12-05 18:07:28 +03:00
parent 9af30f4ac7
commit a64526acfb
4 changed files with 7 additions and 5 deletions
@@ -93,7 +93,7 @@ class LiftReturnOrAssignmentInspection @JvmOverloads constructor(private val ski
override fun getFamilyName() = name override fun getFamilyName() = name
override fun applyFix(project: Project, descriptor: ProblemDescriptor) { override fun applyFix(project: Project, descriptor: ProblemDescriptor) {
BranchedFoldingUtils.foldToAssignment(descriptor.psiElement as KtExpression) BranchedFoldingUtils.tryFoldToAssignment(descriptor.psiElement as KtExpression)
} }
} }
@@ -183,7 +183,7 @@ object BranchedFoldingUtils {
fun canFoldToReturn(expression: KtExpression?): Boolean = getFoldableReturnNumber(expression) > 0 fun canFoldToReturn(expression: KtExpression?): Boolean = getFoldableReturnNumber(expression) > 0
fun foldToAssignment(expression: KtExpression) { fun tryFoldToAssignment(expression: KtExpression) {
var lhs: KtExpression? = null var lhs: KtExpression? = null
var op: String? = null var op: String? = null
val psiFactory = KtPsiFactory(expression) val psiFactory = KtPsiFactory(expression)
@@ -214,7 +214,9 @@ object BranchedFoldingUtils {
} }
} }
lift(expression) 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 { fun foldToReturn(expression: KtExpression): KtExpression {
@@ -22,7 +22,7 @@ class LiftAssignmentOutOfTryFix(element: KtTryExpression) : KotlinQuickFixAction
override fun invoke(project: Project, editor: Editor?, file: KtFile) { override fun invoke(project: Project, editor: Editor?, file: KtFile) {
val element = element ?: return val element = element ?: return
BranchedFoldingUtils.foldToAssignment(element) BranchedFoldingUtils.tryFoldToAssignment(element)
} }
companion object : KotlinSingleIntentionActionFactory() { companion object : KotlinSingleIntentionActionFactory() {
@@ -491,7 +491,7 @@ class LiftAssignmentInspectionBasedProcessing :
} ?: false } ?: false
override fun apply(element: KtExpression) { override fun apply(element: KtExpression) {
BranchedFoldingUtils.foldToAssignment(element) BranchedFoldingUtils.tryFoldToAssignment(element)
} }
} }