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.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<JetFile>, 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()