Restore element after running postprocess (EA-91562 - PIEAE: ASTDelegatePsiElement.getManager)
This commit is contained in:
@@ -16,11 +16,11 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.idea.intentions
|
package org.jetbrains.kotlin.idea.intentions
|
||||||
|
|
||||||
|
import com.intellij.codeInsight.CodeInsightUtilCore
|
||||||
import com.intellij.codeInsight.intention.HighPriorityAction
|
import com.intellij.codeInsight.intention.HighPriorityAction
|
||||||
import com.intellij.codeInsight.template.TemplateBuilderImpl
|
import com.intellij.codeInsight.template.TemplateBuilderImpl
|
||||||
import com.intellij.codeInsight.template.impl.ConstantNode
|
import com.intellij.codeInsight.template.impl.ConstantNode
|
||||||
import com.intellij.openapi.editor.Editor
|
import com.intellij.openapi.editor.Editor
|
||||||
import com.intellij.psi.PsiDocumentManager
|
|
||||||
import org.jetbrains.kotlin.idea.caches.resolve.analyze
|
import org.jetbrains.kotlin.idea.caches.resolve.analyze
|
||||||
import org.jetbrains.kotlin.idea.caches.resolve.getResolutionFacade
|
import org.jetbrains.kotlin.idea.caches.resolve.getResolutionFacade
|
||||||
import org.jetbrains.kotlin.idea.core.*
|
import org.jetbrains.kotlin.idea.core.*
|
||||||
@@ -85,19 +85,19 @@ class IterateExpressionIntention : SelfTargetingIntention<KtExpression>(KtExpres
|
|||||||
var forExpression = psiFactory.createExpressionByPattern("for($0 in $1) {\nx\n}", paramPattern, element) as KtForExpression
|
var forExpression = psiFactory.createExpressionByPattern("for($0 in $1) {\nx\n}", paramPattern, element) as KtForExpression
|
||||||
forExpression = element.replaced(forExpression)
|
forExpression = element.replaced(forExpression)
|
||||||
|
|
||||||
PsiDocumentManager.getInstance(forExpression.project).doPostponedOperationsAndUnblockDocument(editor.document)
|
CodeInsightUtilCore.forcePsiPostprocessAndRestoreElement(forExpression)?.let { forExpression ->
|
||||||
|
val bodyPlaceholder = (forExpression.body as KtBlockExpression).statements.single()
|
||||||
|
val parameters = forExpression.destructuringDeclaration?.entries ?: forExpression.loopParameter!!.singletonList()
|
||||||
|
|
||||||
val bodyPlaceholder = (forExpression.body as KtBlockExpression).statements.single()
|
val templateBuilder = TemplateBuilderImpl(forExpression)
|
||||||
val parameters = forExpression.destructuringDeclaration?.entries ?: forExpression.loopParameter!!.singletonList()
|
for ((parameter, parameterNames) in (parameters zip names)) {
|
||||||
|
templateBuilder.replaceElement(parameter, ChooseStringExpression(parameterNames))
|
||||||
|
}
|
||||||
|
templateBuilder.replaceElement(bodyPlaceholder, ConstantNode(""), false)
|
||||||
|
templateBuilder.setEndVariableAfter(bodyPlaceholder)
|
||||||
|
|
||||||
val templateBuilder = TemplateBuilderImpl(forExpression)
|
templateBuilder.run(editor, true)
|
||||||
for ((parameter, parameterNames) in (parameters zip names)) {
|
|
||||||
templateBuilder.replaceElement(parameter, ChooseStringExpression(parameterNames))
|
|
||||||
}
|
}
|
||||||
templateBuilder.replaceElement(bodyPlaceholder, ConstantNode(""), false)
|
|
||||||
templateBuilder.setEndVariableAfter(bodyPlaceholder)
|
|
||||||
|
|
||||||
templateBuilder.run(editor, true)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user