From 307c6cc746e4d169d2bf4a735b22b5645a82a426 Mon Sep 17 00:00:00 2001 From: anna Date: Wed, 2 Oct 2013 20:27:07 +0200 Subject: [PATCH] run configurations: accept configuration creation over multi selection in project view (IDEA-114259) --- .../actions/ConfigurationContext.java | 3 +- .../junit/AddToTestsPatternAction.java | 10 +++---- .../AllInPackageConfigurationProducer.java | 2 +- .../junit/PatternConfigurationProducer.java | 28 ++++++++++++------- 4 files changed, 26 insertions(+), 17 deletions(-) diff --git a/platform/lang-api/src/com/intellij/execution/actions/ConfigurationContext.java b/platform/lang-api/src/com/intellij/execution/actions/ConfigurationContext.java index b6fffe1ef127..32fd9c9ebcbd 100644 --- a/platform/lang-api/src/com/intellij/execution/actions/ConfigurationContext.java +++ b/platform/lang-api/src/com/intellij/execution/actions/ConfigurationContext.java @@ -219,7 +219,8 @@ public class ConfigurationContext { } } if (element == null) { - element = CommonDataKeys.PSI_ELEMENT.getData(dataContext); + final PsiElement[] elements = LangDataKeys.PSI_ELEMENT_ARRAY.getData(dataContext); + element = elements != null && elements.length >= 1 ? elements[0] : null; } if (element == null) { final VirtualFile file = CommonDataKeys.VIRTUAL_FILE.getData(dataContext); diff --git a/plugins/junit/src/com/intellij/execution/junit/AddToTestsPatternAction.java b/plugins/junit/src/com/intellij/execution/junit/AddToTestsPatternAction.java index d915a7e1590b..6ac30d98e11d 100644 --- a/plugins/junit/src/com/intellij/execution/junit/AddToTestsPatternAction.java +++ b/plugins/junit/src/com/intellij/execution/junit/AddToTestsPatternAction.java @@ -41,20 +41,20 @@ public class AddToTestsPatternAction extends AnAction { public void actionPerformed(AnActionEvent e) { final DataContext dataContext = e.getDataContext(); final PsiElement[] psiElements = LangDataKeys.PSI_ELEMENT_ARRAY.getData(dataContext); - final Set classes = PatternConfigurationProducer.collectTestMembers(psiElements); + final Set classes = PatternConfigurationProducer.collectTestMembers(psiElements); final Project project = CommonDataKeys.PROJECT.getData(dataContext); final List patternConfigurations = collectPatternConfigurations(classes, project); if (patternConfigurations.size() == 1) { final JUnitConfiguration configuration = patternConfigurations.get(0); - for (PsiMember aClass : classes) { + for (PsiElement aClass : classes) { configuration.getPersistentData().getPatterns().add(PatternConfigurationProducer.getQName(aClass)); } } else { JBPopupFactory.getInstance().createListPopup(new BaseListPopupStep("Choose suite to add", patternConfigurations) { @Override public PopupStep onChosen(JUnitConfiguration configuration, boolean finalChoice) { - for (PsiMember aClass : classes) { + for (PsiElement aClass : classes) { configuration.getPersistentData().getPatterns().add(PatternConfigurationProducer.getQName(aClass)); } return FINAL_CHOICE; @@ -81,7 +81,7 @@ public class AddToTestsPatternAction extends AnAction { final DataContext dataContext = e.getDataContext(); final PsiElement[] psiElements = LangDataKeys.PSI_ELEMENT_ARRAY.getData(dataContext); if (psiElements != null) { - final Set foundMembers = PatternConfigurationProducer.collectTestMembers(psiElements); + final Set foundMembers = PatternConfigurationProducer.collectTestMembers(psiElements); if (foundMembers.isEmpty()) return; final Project project = CommonDataKeys.PROJECT.getData(dataContext); if (project != null) { @@ -96,7 +96,7 @@ public class AddToTestsPatternAction extends AnAction { } } - private static List collectPatternConfigurations(Set foundClasses, Project project) { + private static List collectPatternConfigurations(Set foundClasses, Project project) { final List configurations = RunManager.getInstance(project).getConfigurationsList( JUnitConfigurationType.getInstance()); final List foundConfigurations = new ArrayList(); diff --git a/plugins/junit/src/com/intellij/execution/junit/AllInPackageConfigurationProducer.java b/plugins/junit/src/com/intellij/execution/junit/AllInPackageConfigurationProducer.java index d7fc2821a287..4958c15ee4f2 100644 --- a/plugins/junit/src/com/intellij/execution/junit/AllInPackageConfigurationProducer.java +++ b/plugins/junit/src/com/intellij/execution/junit/AllInPackageConfigurationProducer.java @@ -43,6 +43,6 @@ public class AllInPackageConfigurationProducer extends JUnitConfigurationProduce @Override public boolean isPreferredConfiguration(ConfigurationFromContext self, ConfigurationFromContext other) { - return !other.isProducedBy(AllInDirectoryConfigurationProducer.class); + return !other.isProducedBy(AllInDirectoryConfigurationProducer.class) && !other.isProducedBy(PatternConfigurationProducer.class); } } diff --git a/plugins/junit/src/com/intellij/execution/junit/PatternConfigurationProducer.java b/plugins/junit/src/com/intellij/execution/junit/PatternConfigurationProducer.java index b837eaafda9f..633f31adca37 100644 --- a/plugins/junit/src/com/intellij/execution/junit/PatternConfigurationProducer.java +++ b/plugins/junit/src/com/intellij/execution/junit/PatternConfigurationProducer.java @@ -22,7 +22,6 @@ import com.intellij.execution.configurations.ModuleBasedConfiguration; import com.intellij.openapi.actionSystem.CommonDataKeys; import com.intellij.openapi.actionSystem.DataContext; import com.intellij.openapi.actionSystem.LangDataKeys; -import com.intellij.openapi.actionSystem.PlatformDataKeys; import com.intellij.openapi.module.Module; import com.intellij.openapi.util.Comparing; import com.intellij.openapi.util.Condition; @@ -67,8 +66,8 @@ public class PatternConfigurationProducer extends JUnitConfigurationProducer { }); } - static Set collectTestMembers(PsiElement[] psiElements) { - final Set foundMembers = new LinkedHashSet(); + static Set collectTestMembers(PsiElement[] psiElements) { + final Set foundMembers = new LinkedHashSet(); for (PsiElement psiElement : psiElements) { if (psiElement instanceof PsiClassOwner) { final PsiClass[] classes = ((PsiClassOwner)psiElement).getClasses(); @@ -79,11 +78,16 @@ public class PatternConfigurationProducer extends JUnitConfigurationProducer { } } else if (psiElement instanceof PsiClass) { if (JUnitUtil.isTestClass((PsiClass)psiElement)) { - foundMembers.add((PsiClass)psiElement); + foundMembers.add(psiElement); } } else if (psiElement instanceof PsiMethod) { if (JUnitUtil.getTestMethod(psiElement) != null) { - foundMembers.add((PsiMethod)psiElement); + foundMembers.add(psiElement); + } + } else if (psiElement instanceof PsiDirectory) { + final PsiPackage aPackage = JavaDirectoryService.getInstance().getPackage((PsiDirectory)psiElement); + if (aPackage != null) { + foundMembers.add(aPackage); } } } @@ -103,7 +107,7 @@ public class PatternConfigurationProducer extends JUnitConfigurationProducer { final DataContext dataContext = context.getDataContext(); PsiElement[] elements = LangDataKeys.PSI_ELEMENT_ARRAY.getData(dataContext); if (elements != null) { - for (PsiMember psiClass : collectTestMembers(elements)) { + for (PsiElement psiClass : collectTestMembers(elements)) { classes.add(getQName(psiClass)); } return elements; @@ -115,7 +119,7 @@ public class PatternConfigurationProducer extends JUnitConfigurationProducer { for (VirtualFile file : files) { final PsiFile psiFile = psiManager.findFile(file); if (psiFile instanceof PsiClassOwner) { - for (PsiMember psiMember : collectTestMembers(((PsiClassOwner)psiFile).getClasses())) { + for (PsiElement psiMember : collectTestMembers(((PsiClassOwner)psiFile).getClasses())) { classes.add(((PsiClass)psiMember).getQualifiedName()); } psiFiles.add(psiFile); @@ -127,13 +131,17 @@ public class PatternConfigurationProducer extends JUnitConfigurationProducer { return null; } - public static String getQName(PsiMember psiMember) { + public static String getQName(PsiElement psiMember) { if (psiMember instanceof PsiClass) { return ((PsiClass)psiMember).getQualifiedName(); } - else { - return psiMember.getContainingClass().getQualifiedName() + "," + psiMember.getName(); + else if (psiMember instanceof PsiMember) { + return ((PsiMember)psiMember).getContainingClass().getQualifiedName() + "," + ((PsiMember)psiMember).getName(); + } else if (psiMember instanceof PsiPackage) { + return ((PsiPackage)psiMember).getQualifiedName(); } + assert false; + return null; } @Override