From b782d2cd119eaca23040b20062fa3adf0c8f6556 Mon Sep 17 00:00:00 2001 From: Natalia Ukhorskaya Date: Wed, 13 Apr 2016 13:06:19 +0300 Subject: [PATCH] J2K: do not invoke visitChildrenRecursively in Action.update #KT-11160 Fixed --- .../kotlin/idea/actions/JavaToKotlinAction.kt | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/idea/src/org/jetbrains/kotlin/idea/actions/JavaToKotlinAction.kt b/idea/src/org/jetbrains/kotlin/idea/actions/JavaToKotlinAction.kt index ae996bda146..aa0b0499501 100644 --- a/idea/src/org/jetbrains/kotlin/idea/actions/JavaToKotlinAction.kt +++ b/idea/src/org/jetbrains/kotlin/idea/actions/JavaToKotlinAction.kt @@ -35,9 +35,9 @@ import com.intellij.openapi.vfs.VirtualFileVisitor import com.intellij.psi.PsiJavaFile import com.intellij.psi.PsiManager import org.jetbrains.kotlin.idea.KotlinFileType -import org.jetbrains.kotlin.idea.refactoring.toPsiFile import org.jetbrains.kotlin.idea.j2k.IdeaJavaToKotlinServices import org.jetbrains.kotlin.idea.j2k.J2kPostProcessor +import org.jetbrains.kotlin.idea.refactoring.toPsiFile import org.jetbrains.kotlin.idea.util.application.executeWriteCommand import org.jetbrains.kotlin.idea.util.application.runReadAction import org.jetbrains.kotlin.j2k.ConverterSettings @@ -45,7 +45,7 @@ import org.jetbrains.kotlin.j2k.JavaToKotlinConverter import org.jetbrains.kotlin.psi.KtFile import java.io.File import java.io.IOException -import java.util.ArrayList +import java.util.* class JavaToKotlinAction : AnAction() { companion object { @@ -142,8 +142,17 @@ class JavaToKotlinAction : AnAction() { } override fun update(e: AnActionEvent) { - val enabled = selectedJavaFiles(e).any() - e.presentation.isEnabled = enabled + val virtualFiles = e.getData(CommonDataKeys.VIRTUAL_FILE_ARRAY) ?: return + val project = e.project ?: return + + e.presentation.isEnabled = isAnyJavaFileSelected(project, virtualFiles) + } + + private fun isAnyJavaFileSelected(project: Project, files: Array): Boolean { + val manager = PsiManager.getInstance(project) + + if (files.any { manager.findFile(it) is PsiJavaFile }) return true + return files.any { it.isDirectory && isAnyJavaFileSelected(project, it.children) } } private fun selectedJavaFiles(e: AnActionEvent): Sequence {