KT-25012: Use index to check is java file selected instead of traversing file tree
Add initial estimation via fileType index #KT-25012 fixed
This commit is contained in:
@@ -17,6 +17,7 @@
|
|||||||
package org.jetbrains.kotlin.idea.actions
|
package org.jetbrains.kotlin.idea.actions
|
||||||
|
|
||||||
import com.intellij.codeInsight.navigation.NavigationUtil
|
import com.intellij.codeInsight.navigation.NavigationUtil
|
||||||
|
import com.intellij.ide.highlighter.JavaFileType
|
||||||
import com.intellij.ide.scratch.ScratchFileService
|
import com.intellij.ide.scratch.ScratchFileService
|
||||||
import com.intellij.ide.scratch.ScratchRootType
|
import com.intellij.ide.scratch.ScratchRootType
|
||||||
import com.intellij.openapi.actionSystem.AnAction
|
import com.intellij.openapi.actionSystem.AnAction
|
||||||
@@ -36,6 +37,8 @@ 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
|
||||||
@@ -182,10 +185,14 @@ class JavaToKotlinAction : AnAction() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun isAnyJavaFileSelected(project: Project, files: Array<VirtualFile>): Boolean {
|
private fun isAnyJavaFileSelected(project: Project, files: Array<VirtualFile>): Boolean {
|
||||||
val manager = PsiManager.getInstance(project)
|
|
||||||
|
|
||||||
if (files.any { manager.findFile(it) is PsiJavaFile && it.isWritable }) return true
|
val filesScope = GlobalSearchScopesCore.directoriesScope(project, true, *files)
|
||||||
return files.any { it.isDirectory && isAnyJavaFileSelected(project, it.children) }
|
val potentialJavaFiles = FileTypeIndex.getFiles(JavaFileType.INSTANCE, filesScope)
|
||||||
|
|
||||||
|
if (potentialJavaFiles.isEmpty()) return false
|
||||||
|
|
||||||
|
val manager = PsiManager.getInstance(project)
|
||||||
|
return potentialJavaFiles.any { manager.findFile(it) is PsiJavaFile && it.isWritable }
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun selectedJavaFiles(e: AnActionEvent): Sequence<PsiJavaFile> {
|
private fun selectedJavaFiles(e: AnActionEvent): Sequence<PsiJavaFile> {
|
||||||
|
|||||||
@@ -17,6 +17,7 @@
|
|||||||
package org.jetbrains.kotlin.idea.actions
|
package org.jetbrains.kotlin.idea.actions
|
||||||
|
|
||||||
import com.intellij.codeInsight.navigation.NavigationUtil
|
import com.intellij.codeInsight.navigation.NavigationUtil
|
||||||
|
import com.intellij.ide.highlighter.JavaFileType
|
||||||
import com.intellij.ide.scratch.ScratchFileService
|
import com.intellij.ide.scratch.ScratchFileService
|
||||||
import com.intellij.ide.scratch.ScratchRootType
|
import com.intellij.ide.scratch.ScratchRootType
|
||||||
import com.intellij.openapi.actionSystem.AnAction
|
import com.intellij.openapi.actionSystem.AnAction
|
||||||
@@ -36,6 +37,8 @@ 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
|
||||||
@@ -182,10 +185,14 @@ class JavaToKotlinAction : AnAction() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun isAnyJavaFileSelected(project: Project, files: Array<VirtualFile>): Boolean {
|
private fun isAnyJavaFileSelected(project: Project, files: Array<VirtualFile>): Boolean {
|
||||||
val manager = PsiManager.getInstance(project)
|
|
||||||
|
|
||||||
if (files.any { manager.findFile(it) is PsiJavaFile && it.isWritable }) return true
|
val filesScope = GlobalSearchScopesCore.directoriesScope(project, true, *files)
|
||||||
return files.any { it.isDirectory && isAnyJavaFileSelected(project, it.children) }
|
val potentialJavaFiles = FileTypeIndex.getFiles(JavaFileType.INSTANCE, filesScope)
|
||||||
|
|
||||||
|
if (potentialJavaFiles.isEmpty()) return false
|
||||||
|
|
||||||
|
val manager = PsiManager.getInstance(project)
|
||||||
|
return potentialJavaFiles.any { manager.findFile(it) is PsiJavaFile && it.isWritable }
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun selectedJavaFiles(e: AnActionEvent): Sequence<PsiJavaFile> {
|
private fun selectedJavaFiles(e: AnActionEvent): Sequence<PsiJavaFile> {
|
||||||
|
|||||||
@@ -17,6 +17,7 @@
|
|||||||
package org.jetbrains.kotlin.idea.actions
|
package org.jetbrains.kotlin.idea.actions
|
||||||
|
|
||||||
import com.intellij.codeInsight.navigation.NavigationUtil
|
import com.intellij.codeInsight.navigation.NavigationUtil
|
||||||
|
import com.intellij.ide.highlighter.JavaFileType
|
||||||
import com.intellij.ide.scratch.ScratchFileService
|
import com.intellij.ide.scratch.ScratchFileService
|
||||||
import com.intellij.ide.scratch.ScratchRootType
|
import com.intellij.ide.scratch.ScratchRootType
|
||||||
import com.intellij.openapi.actionSystem.AnAction
|
import com.intellij.openapi.actionSystem.AnAction
|
||||||
@@ -37,6 +38,8 @@ 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
|
||||||
@@ -187,10 +190,14 @@ class JavaToKotlinAction : AnAction() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun isAnyJavaFileSelected(project: Project, files: Array<VirtualFile>): Boolean {
|
private fun isAnyJavaFileSelected(project: Project, files: Array<VirtualFile>): Boolean {
|
||||||
val manager = PsiManager.getInstance(project)
|
|
||||||
|
|
||||||
if (files.any { manager.findFile(it) is PsiJavaFile && it.isWritable }) return true
|
val filesScope = GlobalSearchScopesCore.directoriesScope(project, true, *files)
|
||||||
return files.any { it.isDirectory && isAnyJavaFileSelected(project, it.children) }
|
val potentialJavaFiles = FileTypeIndex.getFiles(JavaFileType.INSTANCE, filesScope)
|
||||||
|
|
||||||
|
if (potentialJavaFiles.isEmpty()) return false
|
||||||
|
|
||||||
|
val manager = PsiManager.getInstance(project)
|
||||||
|
return potentialJavaFiles.any { manager.findFile(it) is PsiJavaFile && it.isWritable }
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun selectedJavaFiles(e: AnActionEvent): Sequence<PsiJavaFile> {
|
private fun selectedJavaFiles(e: AnActionEvent): Sequence<PsiJavaFile> {
|
||||||
|
|||||||
@@ -17,6 +17,7 @@
|
|||||||
package org.jetbrains.kotlin.idea.actions
|
package org.jetbrains.kotlin.idea.actions
|
||||||
|
|
||||||
import com.intellij.codeInsight.navigation.NavigationUtil
|
import com.intellij.codeInsight.navigation.NavigationUtil
|
||||||
|
import com.intellij.ide.highlighter.JavaFileType
|
||||||
import com.intellij.ide.scratch.ScratchFileService
|
import com.intellij.ide.scratch.ScratchFileService
|
||||||
import com.intellij.ide.scratch.ScratchRootType
|
import com.intellij.ide.scratch.ScratchRootType
|
||||||
import com.intellij.openapi.actionSystem.AnAction
|
import com.intellij.openapi.actionSystem.AnAction
|
||||||
@@ -36,6 +37,8 @@ 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
|
||||||
@@ -184,10 +187,14 @@ class JavaToKotlinAction : AnAction() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun isAnyJavaFileSelected(project: Project, files: Array<VirtualFile>): Boolean {
|
private fun isAnyJavaFileSelected(project: Project, files: Array<VirtualFile>): Boolean {
|
||||||
val manager = PsiManager.getInstance(project)
|
|
||||||
|
|
||||||
if (files.any { manager.findFile(it) is PsiJavaFile && it.isWritable }) return true
|
val filesScope = GlobalSearchScopesCore.directoriesScope(project, true, *files)
|
||||||
return files.any { it.isDirectory && isAnyJavaFileSelected(project, it.children) }
|
val potentialJavaFiles = FileTypeIndex.getFiles(JavaFileType.INSTANCE, filesScope)
|
||||||
|
|
||||||
|
if (potentialJavaFiles.isEmpty()) return false
|
||||||
|
|
||||||
|
val manager = PsiManager.getInstance(project)
|
||||||
|
return potentialJavaFiles.any { manager.findFile(it) is PsiJavaFile && it.isWritable }
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun selectedJavaFiles(e: AnActionEvent): Sequence<PsiJavaFile> {
|
private fun selectedJavaFiles(e: AnActionEvent): Sequence<PsiJavaFile> {
|
||||||
|
|||||||
@@ -17,6 +17,7 @@
|
|||||||
package org.jetbrains.kotlin.idea.actions
|
package org.jetbrains.kotlin.idea.actions
|
||||||
|
|
||||||
import com.intellij.codeInsight.navigation.NavigationUtil
|
import com.intellij.codeInsight.navigation.NavigationUtil
|
||||||
|
import com.intellij.ide.highlighter.JavaFileType
|
||||||
import com.intellij.ide.scratch.ScratchFileService
|
import com.intellij.ide.scratch.ScratchFileService
|
||||||
import com.intellij.ide.scratch.ScratchRootType
|
import com.intellij.ide.scratch.ScratchRootType
|
||||||
import com.intellij.openapi.actionSystem.AnAction
|
import com.intellij.openapi.actionSystem.AnAction
|
||||||
@@ -36,6 +37,8 @@ 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
|
||||||
@@ -184,10 +187,14 @@ class JavaToKotlinAction : AnAction() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun isAnyJavaFileSelected(project: Project, files: Array<VirtualFile>): Boolean {
|
private fun isAnyJavaFileSelected(project: Project, files: Array<VirtualFile>): Boolean {
|
||||||
val manager = PsiManager.getInstance(project)
|
|
||||||
|
|
||||||
if (files.any { manager.findFile(it) is PsiJavaFile && it.isWritable }) return true
|
val filesScope = GlobalSearchScopesCore.directoriesScope(project, true, *files)
|
||||||
return files.any { it.isDirectory && isAnyJavaFileSelected(project, it.children) }
|
val potentialJavaFiles = FileTypeIndex.getFiles(JavaFileType.INSTANCE, filesScope)
|
||||||
|
|
||||||
|
if (potentialJavaFiles.isEmpty()) return false
|
||||||
|
|
||||||
|
val manager = PsiManager.getInstance(project)
|
||||||
|
return potentialJavaFiles.any { manager.findFile(it) is PsiJavaFile && it.isWritable }
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun selectedJavaFiles(e: AnActionEvent): Sequence<PsiJavaFile> {
|
private fun selectedJavaFiles(e: AnActionEvent): Sequence<PsiJavaFile> {
|
||||||
|
|||||||
Reference in New Issue
Block a user