Fixed assertion in internal action
This commit is contained in:
+29
-33
@@ -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()
|
||||
|
||||
Reference in New Issue
Block a user