run configurations: accept configuration creation over multi selection in project view (IDEA-114259)

This commit is contained in:
anna
2013-10-02 20:30:19 +02:00
parent 4caf5f0dca
commit 307c6cc746
4 changed files with 26 additions and 17 deletions
@@ -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);
@@ -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<PsiMember> classes = PatternConfigurationProducer.collectTestMembers(psiElements);
final Set<PsiElement> classes = PatternConfigurationProducer.collectTestMembers(psiElements);
final Project project = CommonDataKeys.PROJECT.getData(dataContext);
final List<JUnitConfiguration> 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<JUnitConfiguration>("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<PsiMember> foundMembers = PatternConfigurationProducer.collectTestMembers(psiElements);
final Set<PsiElement> 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<JUnitConfiguration> collectPatternConfigurations(Set<PsiMember> foundClasses, Project project) {
private static List<JUnitConfiguration> collectPatternConfigurations(Set<PsiElement> foundClasses, Project project) {
final List<RunConfiguration> configurations = RunManager.getInstance(project).getConfigurationsList(
JUnitConfigurationType.getInstance());
final List<JUnitConfiguration> foundConfigurations = new ArrayList<JUnitConfiguration>();
@@ -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);
}
}
@@ -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<PsiMember> collectTestMembers(PsiElement[] psiElements) {
final Set<PsiMember> foundMembers = new LinkedHashSet<PsiMember>();
static Set<PsiElement> collectTestMembers(PsiElement[] psiElements) {
final Set<PsiElement> foundMembers = new LinkedHashSet<PsiElement>();
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