From 2d2f439a7898a9b06640202ca429b15ae4b0087c Mon Sep 17 00:00:00 2001 From: Dmitry Jemerov Date: Mon, 21 Nov 2016 17:05:49 +0100 Subject: [PATCH] Restore element after running postprocess (EA-91562 - PIEAE: ASTDelegatePsiElement.getManager) --- .../intentions/IterateExpressionIntention.kt | 22 +++++++++---------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/idea/src/org/jetbrains/kotlin/idea/intentions/IterateExpressionIntention.kt b/idea/src/org/jetbrains/kotlin/idea/intentions/IterateExpressionIntention.kt index 063531ea9dd..b2877deb0de 100644 --- a/idea/src/org/jetbrains/kotlin/idea/intentions/IterateExpressionIntention.kt +++ b/idea/src/org/jetbrains/kotlin/idea/intentions/IterateExpressionIntention.kt @@ -16,11 +16,11 @@ package org.jetbrains.kotlin.idea.intentions +import com.intellij.codeInsight.CodeInsightUtilCore import com.intellij.codeInsight.intention.HighPriorityAction import com.intellij.codeInsight.template.TemplateBuilderImpl import com.intellij.codeInsight.template.impl.ConstantNode 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.getResolutionFacade import org.jetbrains.kotlin.idea.core.* @@ -85,19 +85,19 @@ class IterateExpressionIntention : SelfTargetingIntention(KtExpres var forExpression = psiFactory.createExpressionByPattern("for($0 in $1) {\nx\n}", paramPattern, element) as KtForExpression 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 parameters = forExpression.destructuringDeclaration?.entries ?: forExpression.loopParameter!!.singletonList() + val templateBuilder = TemplateBuilderImpl(forExpression) + for ((parameter, parameterNames) in (parameters zip names)) { + templateBuilder.replaceElement(parameter, ChooseStringExpression(parameterNames)) + } + templateBuilder.replaceElement(bodyPlaceholder, ConstantNode(""), false) + templateBuilder.setEndVariableAfter(bodyPlaceholder) - val templateBuilder = TemplateBuilderImpl(forExpression) - for ((parameter, parameterNames) in (parameters zip names)) { - templateBuilder.replaceElement(parameter, ChooseStringExpression(parameterNames)) + templateBuilder.run(editor, true) } - templateBuilder.replaceElement(bodyPlaceholder, ConstantNode(""), false) - templateBuilder.setEndVariableAfter(bodyPlaceholder) - - templateBuilder.run(editor, true) } } }