Do not call find editor outside UI thread

#KT-30117 Fixed
This commit is contained in:
Alexander Podkhalyuzin
2019-03-22 13:27:12 +03:00
parent c9581176d7
commit 37de9a0a26
@@ -39,6 +39,7 @@ import com.intellij.psi.PsiDocumentManager
import com.intellij.psi.PsiElement import com.intellij.psi.PsiElement
import com.intellij.psi.PsiFile import com.intellij.psi.PsiFile
import com.intellij.psi.PsiWhiteSpace import com.intellij.psi.PsiWhiteSpace
import com.intellij.psi.util.PsiModificationTracker
import com.intellij.psi.util.PsiUtilBase import com.intellij.psi.util.PsiUtilBase
import com.intellij.util.DocumentUtil import com.intellij.util.DocumentUtil
import org.jetbrains.kotlin.idea.caches.resolve.getResolutionFacade import org.jetbrains.kotlin.idea.caches.resolve.getResolutionFacade
@@ -154,13 +155,14 @@ class KotlinUnusedImportInspection : AbstractKotlinInspection() {
val highlightingSession = HighlightingSessionImpl.getHighlightingSession(file, progress) val highlightingSession = HighlightingSessionImpl.getHighlightingSession(file, progress)
val project = highlightingSession.project val project = highlightingSession.project
val editor = PsiUtilBase.findEditor(file)
if (editor != null) { val modificationCount = PsiModificationTracker.SERVICE.getInstance(project).modificationCount
val modificationStamp = editor.document.modificationStamp
val invokeFixLater = Disposable { val invokeFixLater = Disposable {
// later because should invoke when highlighting is finished // later because should invoke when highlighting is finished
ApplicationManager.getApplication().invokeLater { ApplicationManager.getApplication().invokeLater {
if (timeToOptimizeImportsOnTheFly(file, editor, project) && editor.document.modificationStamp == modificationStamp) { val editor = PsiUtilBase.findEditor(file)
val currentModificationCount = PsiModificationTracker.SERVICE.getInstance(project).modificationCount
if (editor != null && currentModificationCount == modificationCount && timeToOptimizeImportsOnTheFly(file, editor, project)) {
optimizeImportsOnTheFly(file, optimizedImports, editor, project) optimizeImportsOnTheFly(file, optimizedImports, editor, project)
} }
} }
@@ -175,7 +177,6 @@ class KotlinUnusedImportInspection : AbstractKotlinInspection() {
progress.checkCanceled() progress.checkCanceled()
} }
} }
}
private fun timeToOptimizeImportsOnTheFly(file: KtFile, editor: Editor, project: Project): Boolean { private fun timeToOptimizeImportsOnTheFly(file: KtFile, editor: Editor, project: Project): Boolean {
if (project.isDisposed || !file.isValid || editor.isDisposed || !file.isWritable) return false if (project.isDisposed || !file.isValid || editor.isDisposed || !file.isWritable) return false