Fixed assertion in internal action

This commit is contained in:
Valentin Kipyatkov
2015-02-19 14:43:42 +03:00
parent 204e9a0c34
commit a0b96231d3
@@ -19,41 +19,33 @@ package org.jetbrains.kotlin.idea.actions.internal
import com.intellij.openapi.actionSystem.AnAction import com.intellij.openapi.actionSystem.AnAction
import com.intellij.openapi.actionSystem.AnActionEvent import com.intellij.openapi.actionSystem.AnActionEvent
import com.intellij.openapi.actionSystem.CommonDataKeys import com.intellij.openapi.actionSystem.CommonDataKeys
import com.intellij.openapi.vfs.VirtualFile import com.intellij.openapi.application.ApplicationManager
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.diff.DiffManager import com.intellij.openapi.diff.DiffManager
import com.intellij.openapi.diff.SimpleDiffRequest
import com.intellij.openapi.diff.SimpleContent import com.intellij.openapi.diff.SimpleContent
import com.intellij.openapi.ui.DialogBuilder import com.intellij.openapi.diff.SimpleDiffRequest
import com.intellij.openapi.diff.impl.DiffPanelImpl
import com.intellij.openapi.diff.ex.DiffPanelOptions 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 com.intellij.openapi.ui.Messages
import javax.swing.SwingUtilities import com.intellij.openapi.vfs.VfsUtilCore
import org.jetbrains.kotlin.psi.JetNameReferenceExpression import com.intellij.openapi.vfs.VirtualFile
import org.jetbrains.kotlin.psi.JetExpression import com.intellij.openapi.vfs.VirtualFileVisitor
import org.jetbrains.kotlin.types.JetType 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.ResolutionFacade
import org.jetbrains.kotlin.idea.caches.resolve.getResolutionFacade import org.jetbrains.kotlin.idea.caches.resolve.getResolutionFacade
import org.jetbrains.kotlin.psi.JetBlockExpression import org.jetbrains.kotlin.psi.*
import org.jetbrains.kotlin.psi.JetDeclarationWithBody
import org.jetbrains.kotlin.psi.JetContainerNode
import org.jetbrains.kotlin.psi.JetDeclaration
import org.jetbrains.kotlin.psi.psiUtil.siblings 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.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() { public class CheckPartialBodyResolveAction : AnAction() {
override fun actionPerformed(e: AnActionEvent) { override fun actionPerformed(e: AnActionEvent) {
@@ -61,7 +53,11 @@ public class CheckPartialBodyResolveAction : AnAction() {
val project = CommonDataKeys.PROJECT.getData(e.getDataContext())!! val project = CommonDataKeys.PROJECT.getData(e.getDataContext())!!
ProgressManager.getInstance().runProcessWithProgressSynchronously( ProgressManager.getInstance().runProcessWithProgressSynchronously(
Runnable { checkResolve(selectedFiles, project) }, Runnable {
ApplicationManager.getApplication().runReadAction {
checkResolve(selectedFiles, project)
}
},
"Checking Partial Body Resolve", "Checking Partial Body Resolve",
true, true,
project) project)
@@ -70,8 +66,8 @@ public class CheckPartialBodyResolveAction : AnAction() {
private fun checkResolve(files: Collection<JetFile>, project: Project) { private fun checkResolve(files: Collection<JetFile>, project: Project) {
//TODO: drop resolve caches if any //TODO: drop resolve caches if any
val progressIndicator = ProgressManager.getInstance().getProgressIndicator() val progressIndicator = ProgressManager.getInstance().getProgressIndicator()
for ((i, file) in files.withIndices()) { for ((i, file) in files.withIndex()) {
progressIndicator?.setText("Checking resolve $i of ${files.size}...") progressIndicator?.setText("Checking resolve $i of ${files.size()}...")
progressIndicator?.setText2(file.getVirtualFile().getPath()) progressIndicator?.setText2(file.getVirtualFile().getPath())
val partialResolveDump = dumpResolve(file) {(element, resolutionFacade) -> val partialResolveDump = dumpResolve(file) {(element, resolutionFacade) ->
@@ -101,18 +97,18 @@ public class CheckPartialBodyResolveAction : AnAction() {
return return
} }
progressIndicator?.setFraction((i + 1) / files.size.toDouble()) progressIndicator?.setFraction((i + 1) / files.size().toDouble())
} }
SwingUtilities.invokeLater { 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 { private fun dumpResolve(file: JetFile, resolver: (JetElement, ResolutionFacade) -> BindingContext): String {
val builder = StringBuilder() val builder = StringBuilder()
val resolutionFacade = file.getResolutionFacade() val resolutionFacade = file.getResolutionFacade()
val document = FileDocumentManager.getInstance().getDocument(file.getVirtualFile()) val document = FileDocumentManager.getInstance().getDocument(file.getVirtualFile())!!
file.acceptChildren(object : JetVisitorVoid(){ file.acceptChildren(object : JetVisitorVoid(){
override fun visitJetElement(element: JetElement) { override fun visitJetElement(element: JetElement) {
ProgressManager.checkCanceled() ProgressManager.checkCanceled()