KT-25733: Fix regression after optimization

#KT-25733 fixed
This commit is contained in:
Simon Ogorodnik
2018-07-31 00:21:45 +03:00
parent be3f0628ef
commit 07cc3bd63a
4 changed files with 53 additions and 36 deletions
@@ -28,18 +28,19 @@ import com.intellij.openapi.fileEditor.FileDocumentManager
import com.intellij.openapi.fileEditor.FileEditorManager import com.intellij.openapi.fileEditor.FileEditorManager
import com.intellij.openapi.progress.ProgressManager import com.intellij.openapi.progress.ProgressManager
import com.intellij.openapi.project.Project import com.intellij.openapi.project.Project
import com.intellij.openapi.ui.MessageType
import com.intellij.openapi.ui.Messages import com.intellij.openapi.ui.Messages
import com.intellij.openapi.ui.ex.MessagesEx import com.intellij.openapi.ui.ex.MessagesEx
import com.intellij.openapi.util.Key import com.intellij.openapi.util.Key
import com.intellij.openapi.ui.popup.JBPopupFactory
import com.intellij.openapi.vfs.VfsUtilCore import com.intellij.openapi.vfs.VfsUtilCore
import com.intellij.openapi.vfs.VirtualFile import com.intellij.openapi.vfs.VirtualFile
import com.intellij.openapi.vfs.VirtualFileVisitor import com.intellij.openapi.vfs.VirtualFileVisitor
import com.intellij.openapi.wm.WindowManager
import com.intellij.psi.PsiDocumentManager import com.intellij.psi.PsiDocumentManager
import com.intellij.psi.PsiErrorElement import com.intellij.psi.PsiErrorElement
import com.intellij.psi.PsiJavaFile import com.intellij.psi.PsiJavaFile
import com.intellij.psi.PsiManager import com.intellij.psi.PsiManager
import com.intellij.psi.search.FileTypeIndex
import com.intellij.psi.search.GlobalSearchScopesCore
import com.intellij.psi.util.PsiTreeUtil import com.intellij.psi.util.PsiTreeUtil
import org.jetbrains.kotlin.idea.KotlinFileType import org.jetbrains.kotlin.idea.KotlinFileType
import org.jetbrains.kotlin.idea.j2k.IdeaJavaToKotlinServices import org.jetbrains.kotlin.idea.j2k.IdeaJavaToKotlinServices
@@ -162,6 +163,14 @@ class JavaToKotlinAction : AnAction() {
val javaFiles = selectedJavaFiles(e).filter { it.isWritable }.toList() val javaFiles = selectedJavaFiles(e).filter { it.isWritable }.toList()
val project = CommonDataKeys.PROJECT.getData(e.dataContext)!! val project = CommonDataKeys.PROJECT.getData(e.dataContext)!!
if (javaFiles.isEmpty()) {
val statusBar = WindowManager.getInstance().getStatusBar(project)
JBPopupFactory.getInstance()
.createHtmlTextBalloonBuilder("Nothing to convert:<br>No writable Java files found", MessageType.ERROR, null)
.createBalloon()
.showInCenterOf(statusBar.component)
}
val firstSyntaxError = javaFiles.asSequence().map { PsiTreeUtil.findChildOfType(it, PsiErrorElement::class.java) }.firstOrNull() val firstSyntaxError = javaFiles.asSequence().map { PsiTreeUtil.findChildOfType(it, PsiErrorElement::class.java) }.firstOrNull()
if (firstSyntaxError != null) { if (firstSyntaxError != null) {
@@ -196,14 +205,9 @@ class JavaToKotlinAction : AnAction() {
} }
private fun isAnyJavaFileSelected(project: Project, files: Array<VirtualFile>): Boolean { private fun isAnyJavaFileSelected(project: Project, files: Array<VirtualFile>): Boolean {
if (files.any { it.isDirectory }) return true // Giving up on directories
val filesScope = GlobalSearchScopesCore.directoriesScope(project, true, *files)
val potentialJavaFiles = FileTypeIndex.getFiles(JavaFileType.INSTANCE, filesScope)
if (potentialJavaFiles.isEmpty()) return false
val manager = PsiManager.getInstance(project) val manager = PsiManager.getInstance(project)
return potentialJavaFiles.any { manager.findFile(it) is PsiJavaFile && it.isWritable } return files.any { it.extension == JavaFileType.DEFAULT_EXTENSION && manager.findFile(it) is PsiJavaFile && it.isWritable }
} }
private fun selectedJavaFiles(e: AnActionEvent): Sequence<PsiJavaFile> { private fun selectedJavaFiles(e: AnActionEvent): Sequence<PsiJavaFile> {
@@ -28,17 +28,19 @@ import com.intellij.openapi.fileEditor.FileDocumentManager
import com.intellij.openapi.fileEditor.FileEditorManager import com.intellij.openapi.fileEditor.FileEditorManager
import com.intellij.openapi.progress.ProgressManager import com.intellij.openapi.progress.ProgressManager
import com.intellij.openapi.project.Project import com.intellij.openapi.project.Project
import com.intellij.openapi.ui.MessageType
import com.intellij.openapi.ui.Messages import com.intellij.openapi.ui.Messages
import com.intellij.openapi.ui.ex.MessagesEx import com.intellij.openapi.ui.ex.MessagesEx
import com.intellij.openapi.util.Key
import com.intellij.openapi.ui.popup.JBPopupFactory
import com.intellij.openapi.vfs.VfsUtilCore import com.intellij.openapi.vfs.VfsUtilCore
import com.intellij.openapi.vfs.VirtualFile import com.intellij.openapi.vfs.VirtualFile
import com.intellij.openapi.vfs.VirtualFileVisitor import com.intellij.openapi.vfs.VirtualFileVisitor
import com.intellij.openapi.wm.WindowManager
import com.intellij.psi.PsiDocumentManager import com.intellij.psi.PsiDocumentManager
import com.intellij.psi.PsiErrorElement import com.intellij.psi.PsiErrorElement
import com.intellij.psi.PsiJavaFile import com.intellij.psi.PsiJavaFile
import com.intellij.psi.PsiManager import com.intellij.psi.PsiManager
import com.intellij.psi.search.FileTypeIndex
import com.intellij.psi.search.GlobalSearchScopesCore
import com.intellij.psi.util.PsiTreeUtil import com.intellij.psi.util.PsiTreeUtil
import org.jetbrains.kotlin.idea.KotlinFileType import org.jetbrains.kotlin.idea.KotlinFileType
import org.jetbrains.kotlin.idea.j2k.IdeaJavaToKotlinServices import org.jetbrains.kotlin.idea.j2k.IdeaJavaToKotlinServices
@@ -157,6 +159,14 @@ class JavaToKotlinAction : AnAction() {
val javaFiles = selectedJavaFiles(e).filter { it.isWritable }.toList() val javaFiles = selectedJavaFiles(e).filter { it.isWritable }.toList()
val project = CommonDataKeys.PROJECT.getData(e.dataContext)!! val project = CommonDataKeys.PROJECT.getData(e.dataContext)!!
if (javaFiles.isEmpty()) {
val statusBar = WindowManager.getInstance().getStatusBar(project)
JBPopupFactory.getInstance()
.createHtmlTextBalloonBuilder("Nothing to convert:<br>No writable Java files found", MessageType.ERROR, null)
.createBalloon()
.showInCenterOf(statusBar.component)
}
val firstSyntaxError = javaFiles.asSequence().map { PsiTreeUtil.findChildOfType(it, PsiErrorElement::class.java) }.firstOrNull() val firstSyntaxError = javaFiles.asSequence().map { PsiTreeUtil.findChildOfType(it, PsiErrorElement::class.java) }.firstOrNull()
if (firstSyntaxError != null) { if (firstSyntaxError != null) {
@@ -191,14 +201,9 @@ class JavaToKotlinAction : AnAction() {
} }
private fun isAnyJavaFileSelected(project: Project, files: Array<VirtualFile>): Boolean { private fun isAnyJavaFileSelected(project: Project, files: Array<VirtualFile>): Boolean {
if (files.any { it.isDirectory }) return true // Giving up on directories
val filesScope = GlobalSearchScopesCore.directoriesScope(project, true, *files)
val potentialJavaFiles = FileTypeIndex.getFiles(JavaFileType.INSTANCE, filesScope)
if (potentialJavaFiles.isEmpty()) return false
val manager = PsiManager.getInstance(project) val manager = PsiManager.getInstance(project)
return potentialJavaFiles.any { manager.findFile(it) is PsiJavaFile && it.isWritable } return files.any { it.extension == JavaFileType.DEFAULT_EXTENSION && manager.findFile(it) is PsiJavaFile && it.isWritable }
} }
private fun selectedJavaFiles(e: AnActionEvent): Sequence<PsiJavaFile> { private fun selectedJavaFiles(e: AnActionEvent): Sequence<PsiJavaFile> {
@@ -28,17 +28,18 @@ import com.intellij.openapi.fileEditor.FileDocumentManager
import com.intellij.openapi.fileEditor.FileEditorManager import com.intellij.openapi.fileEditor.FileEditorManager
import com.intellij.openapi.progress.ProgressManager import com.intellij.openapi.progress.ProgressManager
import com.intellij.openapi.project.Project import com.intellij.openapi.project.Project
import com.intellij.openapi.ui.MessageType
import com.intellij.openapi.ui.Messages import com.intellij.openapi.ui.Messages
import com.intellij.openapi.ui.ex.MessagesEx import com.intellij.openapi.ui.ex.MessagesEx
import com.intellij.openapi.ui.popup.JBPopupFactory
import com.intellij.openapi.vfs.VfsUtilCore import com.intellij.openapi.vfs.VfsUtilCore
import com.intellij.openapi.vfs.VirtualFile import com.intellij.openapi.vfs.VirtualFile
import com.intellij.openapi.vfs.VirtualFileVisitor import com.intellij.openapi.vfs.VirtualFileVisitor
import com.intellij.openapi.wm.WindowManager
import com.intellij.psi.PsiDocumentManager import com.intellij.psi.PsiDocumentManager
import com.intellij.psi.PsiErrorElement import com.intellij.psi.PsiErrorElement
import com.intellij.psi.PsiJavaFile import com.intellij.psi.PsiJavaFile
import com.intellij.psi.PsiManager import com.intellij.psi.PsiManager
import com.intellij.psi.search.FileTypeIndex
import com.intellij.psi.search.GlobalSearchScopesCore
import com.intellij.psi.util.PsiTreeUtil import com.intellij.psi.util.PsiTreeUtil
import org.jetbrains.kotlin.idea.KotlinFileType import org.jetbrains.kotlin.idea.KotlinFileType
import org.jetbrains.kotlin.idea.j2k.IdeaJavaToKotlinServices import org.jetbrains.kotlin.idea.j2k.IdeaJavaToKotlinServices
@@ -159,6 +160,14 @@ class JavaToKotlinAction : AnAction() {
val javaFiles = selectedJavaFiles(e).filter { it.isWritable }.toList() val javaFiles = selectedJavaFiles(e).filter { it.isWritable }.toList()
val project = CommonDataKeys.PROJECT.getData(e.dataContext)!! val project = CommonDataKeys.PROJECT.getData(e.dataContext)!!
if (javaFiles.isEmpty()) {
val statusBar = WindowManager.getInstance().getStatusBar(project)
JBPopupFactory.getInstance()
.createHtmlTextBalloonBuilder("Nothing to convert:<br>No writable Java files found", MessageType.ERROR, null)
.createBalloon()
.showInCenterOf(statusBar.component)
}
val firstSyntaxError = javaFiles.asSequence().map { PsiTreeUtil.findChildOfType(it, PsiErrorElement::class.java) }.firstOrNull() val firstSyntaxError = javaFiles.asSequence().map { PsiTreeUtil.findChildOfType(it, PsiErrorElement::class.java) }.firstOrNull()
if (firstSyntaxError != null) { if (firstSyntaxError != null) {
@@ -193,14 +202,9 @@ class JavaToKotlinAction : AnAction() {
} }
private fun isAnyJavaFileSelected(project: Project, files: Array<VirtualFile>): Boolean { private fun isAnyJavaFileSelected(project: Project, files: Array<VirtualFile>): Boolean {
if (files.any { it.isDirectory }) return true // Giving up on directories
val filesScope = GlobalSearchScopesCore.directoriesScope(project, true, *files)
val potentialJavaFiles = FileTypeIndex.getFiles(JavaFileType.INSTANCE, filesScope)
if (potentialJavaFiles.isEmpty()) return false
val manager = PsiManager.getInstance(project) val manager = PsiManager.getInstance(project)
return potentialJavaFiles.any { manager.findFile(it) is PsiJavaFile && it.isWritable } return files.any { it.extension == JavaFileType.DEFAULT_EXTENSION && manager.findFile(it) is PsiJavaFile && it.isWritable }
} }
private fun selectedJavaFiles(e: AnActionEvent): Sequence<PsiJavaFile> { private fun selectedJavaFiles(e: AnActionEvent): Sequence<PsiJavaFile> {
@@ -28,17 +28,18 @@ import com.intellij.openapi.fileEditor.FileDocumentManager
import com.intellij.openapi.fileEditor.FileEditorManager import com.intellij.openapi.fileEditor.FileEditorManager
import com.intellij.openapi.progress.ProgressManager import com.intellij.openapi.progress.ProgressManager
import com.intellij.openapi.project.Project import com.intellij.openapi.project.Project
import com.intellij.openapi.ui.MessageType
import com.intellij.openapi.ui.Messages import com.intellij.openapi.ui.Messages
import com.intellij.openapi.ui.ex.MessagesEx import com.intellij.openapi.ui.ex.MessagesEx
import com.intellij.openapi.ui.popup.JBPopupFactory
import com.intellij.openapi.vfs.VfsUtilCore import com.intellij.openapi.vfs.VfsUtilCore
import com.intellij.openapi.vfs.VirtualFile import com.intellij.openapi.vfs.VirtualFile
import com.intellij.openapi.vfs.VirtualFileVisitor import com.intellij.openapi.vfs.VirtualFileVisitor
import com.intellij.openapi.wm.WindowManager
import com.intellij.psi.PsiDocumentManager import com.intellij.psi.PsiDocumentManager
import com.intellij.psi.PsiErrorElement import com.intellij.psi.PsiErrorElement
import com.intellij.psi.PsiJavaFile import com.intellij.psi.PsiJavaFile
import com.intellij.psi.PsiManager import com.intellij.psi.PsiManager
import com.intellij.psi.search.FileTypeIndex
import com.intellij.psi.search.GlobalSearchScopesCore
import com.intellij.psi.util.PsiTreeUtil import com.intellij.psi.util.PsiTreeUtil
import org.jetbrains.kotlin.idea.KotlinFileType import org.jetbrains.kotlin.idea.KotlinFileType
import org.jetbrains.kotlin.idea.j2k.IdeaJavaToKotlinServices import org.jetbrains.kotlin.idea.j2k.IdeaJavaToKotlinServices
@@ -159,6 +160,14 @@ class JavaToKotlinAction : AnAction() {
val javaFiles = selectedJavaFiles(e).filter { it.isWritable }.toList() val javaFiles = selectedJavaFiles(e).filter { it.isWritable }.toList()
val project = CommonDataKeys.PROJECT.getData(e.dataContext)!! val project = CommonDataKeys.PROJECT.getData(e.dataContext)!!
if (javaFiles.isEmpty()) {
val statusBar = WindowManager.getInstance().getStatusBar(project)
JBPopupFactory.getInstance()
.createHtmlTextBalloonBuilder("Nothing to convert:<br>No writable Java files found", MessageType.ERROR, null)
.createBalloon()
.showInCenterOf(statusBar.component)
}
val firstSyntaxError = javaFiles.asSequence().map { PsiTreeUtil.findChildOfType(it, PsiErrorElement::class.java) }.firstOrNull() val firstSyntaxError = javaFiles.asSequence().map { PsiTreeUtil.findChildOfType(it, PsiErrorElement::class.java) }.firstOrNull()
if (firstSyntaxError != null) { if (firstSyntaxError != null) {
@@ -193,14 +202,9 @@ class JavaToKotlinAction : AnAction() {
} }
private fun isAnyJavaFileSelected(project: Project, files: Array<VirtualFile>): Boolean { private fun isAnyJavaFileSelected(project: Project, files: Array<VirtualFile>): Boolean {
if (files.any { it.isDirectory }) return true // Giving up on directories
val filesScope = GlobalSearchScopesCore.directoriesScope(project, true, *files)
val potentialJavaFiles = FileTypeIndex.getFiles(JavaFileType.INSTANCE, filesScope)
if (potentialJavaFiles.isEmpty()) return false
val manager = PsiManager.getInstance(project) val manager = PsiManager.getInstance(project)
return potentialJavaFiles.any { manager.findFile(it) is PsiJavaFile && it.isWritable } return files.any { it.extension == JavaFileType.DEFAULT_EXTENSION && manager.findFile(it) is PsiJavaFile && it.isWritable }
} }
private fun selectedJavaFiles(e: AnActionEvent): Sequence<PsiJavaFile> { private fun selectedJavaFiles(e: AnActionEvent): Sequence<PsiJavaFile> {