diff --git a/java/execution/impl/src/com/intellij/execution/junit/InheritorChooser.java b/java/execution/impl/src/com/intellij/execution/junit/InheritorChooser.java index c9fa4d9df899..f56bbabb7977 100644 --- a/java/execution/impl/src/com/intellij/execution/junit/InheritorChooser.java +++ b/java/execution/impl/src/com/intellij/execution/junit/InheritorChooser.java @@ -19,21 +19,24 @@ import com.intellij.execution.Location; import com.intellij.execution.actions.ConfigurationContext; import com.intellij.execution.junit2.info.MethodLocation; import com.intellij.ide.util.PsiClassListCellRenderer; +import com.intellij.openapi.actionSystem.PlatformDataKeys; +import com.intellij.openapi.editor.Document; +import com.intellij.openapi.editor.Editor; +import com.intellij.openapi.fileEditor.FileDocumentManager; +import com.intellij.openapi.fileEditor.FileEditor; +import com.intellij.openapi.fileEditor.TextEditor; import com.intellij.openapi.progress.ProgressManager; import com.intellij.openapi.ui.popup.JBPopupFactory; -import com.intellij.psi.PsiClass; -import com.intellij.psi.PsiMethod; -import com.intellij.psi.PsiModifier; +import com.intellij.psi.*; import com.intellij.psi.search.searches.ClassInheritorsSearch; +import com.intellij.psi.util.PsiClassUtil; import com.intellij.ui.ColoredListCellRenderer; import com.intellij.ui.components.JBList; import com.intellij.util.ArrayUtil; import com.intellij.util.Processor; import javax.swing.*; -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; +import java.util.*; /** * User: anna @@ -68,7 +71,7 @@ public class InheritorChooser { ClassInheritorsSearch.search(containingClass).forEach(new Processor() { @Override public boolean process(PsiClass aClass) { - if (!aClass.hasModifierProperty(PsiModifier.ABSTRACT)) { + if (PsiClassUtil.isRunnableClass(aClass, true, true)) { classes.add(aClass); } return true; @@ -84,6 +87,19 @@ public class InheritorChooser { return true; } if (classes.isEmpty()) return false; + final FileEditor fileEditor = PlatformDataKeys.FILE_EDITOR.getData(context.getDataContext()); + if (fileEditor instanceof TextEditor) { + final Document document = ((TextEditor)fileEditor).getEditor().getDocument(); + final PsiFile containingFile = PsiDocumentManager.getInstance(context.getProject()).getPsiFile(document); + if (containingFile instanceof PsiClassOwner) { + final List psiClasses = new ArrayList(Arrays.asList(((PsiClassOwner)containingFile).getClasses())); + psiClasses.retainAll(classes); + if (psiClasses.size() == 1) { + runForClass(psiClasses.get(0), psiMethod, context, performRunnable); + return true; + } + } + } final PsiClassListCellRenderer renderer = new PsiClassListCellRenderer() { @Override protected boolean customizeNonPsiElementLeftRenderer(ColoredListCellRenderer renderer,