diff --git a/idea/src/org/jetbrains/kotlin/idea/actions/internal/CheckPartialBodyResolveAction.kt b/idea/src/org/jetbrains/kotlin/idea/actions/internal/CheckPartialBodyResolveAction.kt index af5e94e4bfc..165f6e85748 100644 --- a/idea/src/org/jetbrains/kotlin/idea/actions/internal/CheckPartialBodyResolveAction.kt +++ b/idea/src/org/jetbrains/kotlin/idea/actions/internal/CheckPartialBodyResolveAction.kt @@ -19,41 +19,33 @@ package org.jetbrains.kotlin.idea.actions.internal import com.intellij.openapi.actionSystem.AnAction import com.intellij.openapi.actionSystem.AnActionEvent import com.intellij.openapi.actionSystem.CommonDataKeys -import com.intellij.openapi.vfs.VirtualFile -import com.intellij.openapi.project.Project -import com.intellij.psi.PsiManager -import java.util.ArrayList -import org.jetbrains.kotlin.psi.JetFile -import com.intellij.openapi.vfs.VfsUtilCore -import com.intellij.openapi.vfs.VirtualFileVisitor -import com.intellij.openapi.progress.ProgressManager -import org.jetbrains.kotlin.psi.JetVisitorVoid -import org.jetbrains.kotlin.psi.JetElement -import org.jetbrains.kotlin.psi.JetReferenceExpression -import org.jetbrains.kotlin.resolve.BindingContext -import com.intellij.openapi.fileEditor.FileDocumentManager -import org.jetbrains.kotlin.descriptors.DeclarationDescriptor -import org.jetbrains.kotlin.renderer.DescriptorRenderer +import com.intellij.openapi.application.ApplicationManager import com.intellij.openapi.diff.DiffManager -import com.intellij.openapi.diff.SimpleDiffRequest import com.intellij.openapi.diff.SimpleContent -import com.intellij.openapi.ui.DialogBuilder -import com.intellij.openapi.diff.impl.DiffPanelImpl +import com.intellij.openapi.diff.SimpleDiffRequest import com.intellij.openapi.diff.ex.DiffPanelOptions +import com.intellij.openapi.diff.impl.DiffPanelImpl +import com.intellij.openapi.fileEditor.FileDocumentManager +import com.intellij.openapi.progress.ProgressManager +import com.intellij.openapi.project.Project +import com.intellij.openapi.ui.DialogBuilder import com.intellij.openapi.ui.Messages -import javax.swing.SwingUtilities -import org.jetbrains.kotlin.psi.JetNameReferenceExpression -import org.jetbrains.kotlin.psi.JetExpression -import org.jetbrains.kotlin.types.JetType +import com.intellij.openapi.vfs.VfsUtilCore +import com.intellij.openapi.vfs.VirtualFile +import com.intellij.openapi.vfs.VirtualFileVisitor +import com.intellij.psi.PsiManager +import org.jetbrains.kotlin.descriptors.DeclarationDescriptor import org.jetbrains.kotlin.idea.caches.resolve.ResolutionFacade import org.jetbrains.kotlin.idea.caches.resolve.getResolutionFacade -import org.jetbrains.kotlin.psi.JetBlockExpression -import org.jetbrains.kotlin.psi.JetDeclarationWithBody -import org.jetbrains.kotlin.psi.JetContainerNode -import org.jetbrains.kotlin.psi.JetDeclaration +import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.psi.psiUtil.siblings -import org.jetbrains.kotlin.utils.addToStdlib.firstIsInstanceOrNull +import org.jetbrains.kotlin.renderer.DescriptorRenderer +import org.jetbrains.kotlin.resolve.BindingContext import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode +import org.jetbrains.kotlin.types.JetType +import org.jetbrains.kotlin.utils.addToStdlib.firstIsInstanceOrNull +import java.util.ArrayList +import javax.swing.SwingUtilities public class CheckPartialBodyResolveAction : AnAction() { override fun actionPerformed(e: AnActionEvent) { @@ -61,7 +53,11 @@ public class CheckPartialBodyResolveAction : AnAction() { val project = CommonDataKeys.PROJECT.getData(e.getDataContext())!! ProgressManager.getInstance().runProcessWithProgressSynchronously( - Runnable { checkResolve(selectedFiles, project) }, + Runnable { + ApplicationManager.getApplication().runReadAction { + checkResolve(selectedFiles, project) + } + }, "Checking Partial Body Resolve", true, project) @@ -70,8 +66,8 @@ public class CheckPartialBodyResolveAction : AnAction() { private fun checkResolve(files: Collection, project: Project) { //TODO: drop resolve caches if any val progressIndicator = ProgressManager.getInstance().getProgressIndicator() - for ((i, file) in files.withIndices()) { - progressIndicator?.setText("Checking resolve $i of ${files.size}...") + for ((i, file) in files.withIndex()) { + progressIndicator?.setText("Checking resolve $i of ${files.size()}...") progressIndicator?.setText2(file.getVirtualFile().getPath()) val partialResolveDump = dumpResolve(file) {(element, resolutionFacade) -> @@ -101,18 +97,18 @@ public class CheckPartialBodyResolveAction : AnAction() { return } - progressIndicator?.setFraction((i + 1) / files.size.toDouble()) + progressIndicator?.setFraction((i + 1) / files.size().toDouble()) } SwingUtilities.invokeLater { - Messages.showInfoMessage(project, "Analyzed ${files.size} file(s). No resolve difference found. ", "Success") + Messages.showInfoMessage(project, "Analyzed ${files.size()} file(s). No resolve difference found. ", "Success") } } private fun dumpResolve(file: JetFile, resolver: (JetElement, ResolutionFacade) -> BindingContext): String { val builder = StringBuilder() val resolutionFacade = file.getResolutionFacade() - val document = FileDocumentManager.getInstance().getDocument(file.getVirtualFile()) + val document = FileDocumentManager.getInstance().getDocument(file.getVirtualFile())!! file.acceptChildren(object : JetVisitorVoid(){ override fun visitJetElement(element: JetElement) { ProgressManager.checkCanceled()