test method browser: remove duplicates in component completion

This commit is contained in:
Anna Kozlova
2015-07-16 12:53:15 +03:00
parent 6d5d272e92
commit f19dd5dd8c
4 changed files with 40 additions and 63 deletions
@@ -15,6 +15,8 @@
*/
package com.intellij.execution;
import com.intellij.codeInsight.completion.CompletionResultSet;
import com.intellij.codeInsight.lookup.LookupElementBuilder;
import com.intellij.execution.configuration.BrowseModuleValueActionListener;
import com.intellij.execution.junit.JUnitUtil;
import com.intellij.execution.ui.ConfigurationModuleSelector;
@@ -23,6 +25,9 @@ import com.intellij.openapi.ui.Messages;
import com.intellij.openapi.util.Condition;
import com.intellij.psi.PsiClass;
import com.intellij.psi.PsiMethod;
import com.intellij.ui.EditorTextField;
import com.intellij.util.TextFieldCompletionProvider;
import org.jetbrains.annotations.NotNull;
public abstract class MethodBrowser extends BrowseModuleValueActionListener {
@@ -58,4 +63,24 @@ public abstract class MethodBrowser extends BrowseModuleValueActionListener {
return null;
}
public void installCompletion(EditorTextField field) {
new TextFieldCompletionProvider() {
@Override
protected void addCompletionVariants(@NotNull String text, int offset, @NotNull String prefix, @NotNull CompletionResultSet result) {
final String className = getClassName();
if (className.trim().length() == 0) {
return;
}
final PsiClass testClass = getModuleSelector().findClass(className);
if (testClass == null) return;
final Condition<PsiMethod> filter = getFilter(testClass);
for (PsiMethod psiMethod : testClass.getAllMethods()) {
if (filter.value(psiMethod)) {
result.addElement(LookupElementBuilder.create(psiMethod.getName()));
}
}
}
}.apply(field);
}
}
@@ -15,10 +15,7 @@
*/
package com.intellij.execution.testDiscovery;
import com.intellij.codeInsight.completion.CompletionResultSet;
import com.intellij.codeInsight.lookup.LookupElementBuilder;
import com.intellij.execution.MethodBrowser;
import com.intellij.execution.junit.JUnitUtil;
import com.intellij.execution.ui.AlternativeJREPanel;
import com.intellij.execution.ui.ClassBrowser;
import com.intellij.execution.ui.CommonJavaParametersPanel;
@@ -33,11 +30,13 @@ import com.intellij.openapi.util.Condition;
import com.intellij.openapi.util.Pair;
import com.intellij.openapi.vcs.changes.ChangeListManager;
import com.intellij.openapi.vcs.changes.LocalChangeList;
import com.intellij.psi.*;
import com.intellij.psi.JavaCodeFragment;
import com.intellij.psi.JavaPsiFacade;
import com.intellij.psi.PsiClass;
import com.intellij.psi.PsiMethod;
import com.intellij.psi.search.GlobalSearchScope;
import com.intellij.ui.EditorTextFieldWithBrowseButton;
import com.intellij.ui.PanelWithAnchor;
import com.intellij.util.TextFieldCompletionProvider;
import com.intellij.util.ui.UIUtil;
import org.jetbrains.annotations.NotNull;
@@ -110,23 +109,6 @@ public class TestDiscoveryConfigurable<T extends TestDiscoveryConfiguration> ext
final EditorTextFieldWithBrowseButton textFieldWithBrowseButton = new EditorTextFieldWithBrowseButton(project, true,
JavaCodeFragment.VisibilityChecker.EVERYTHING_VISIBLE,
PlainTextLanguage.INSTANCE.getAssociatedFileType());
new TextFieldCompletionProvider() {
@Override
protected void addCompletionVariants(@NotNull String text, int offset, @NotNull String prefix, @NotNull CompletionResultSet result) {
final String className = myClass.getComponent().getText();
if (className.trim().length() == 0) {
return;
}
final PsiClass testClass = getModuleSelector().findClass(className);
if (testClass == null) return;
final JUnitUtil.TestMethodFilter filter = new JUnitUtil.TestMethodFilter(testClass);
for (PsiMethod psiMethod : testClass.getAllMethods()) {
if (filter.value(psiMethod)) {
result.addElement(LookupElementBuilder.create(psiMethod.getName()));
}
}
}
}.apply(textFieldWithBrowseButton.getChildComponent());
myMethod.setComponent(textFieldWithBrowseButton);
final MethodBrowser methodBrowser = new MethodBrowser(project) {
protected Condition<PsiMethod> getFilter(final PsiClass testClass) {
@@ -149,6 +131,7 @@ public class TestDiscoveryConfigurable<T extends TestDiscoveryConfiguration> ext
}
};
methodBrowser.setField(textFieldWithBrowseButton);
methodBrowser.installCompletion(textFieldWithBrowseButton.getChildComponent());
panelWithSettings.add(myMethod, gc);
panelWithSettings.add(myChangesRb, gc);
@@ -16,8 +16,6 @@
package com.intellij.execution.junit2.configuration;
import com.intellij.codeInsight.completion.CompletionResultSet;
import com.intellij.codeInsight.lookup.LookupElementBuilder;
import com.intellij.execution.ExecutionBundle;
import com.intellij.execution.MethodBrowser;
import com.intellij.execution.configuration.BrowseModuleValueActionListener;
@@ -53,7 +51,6 @@ import com.intellij.rt.execution.junit.RepeatCount;
import com.intellij.ui.*;
import com.intellij.ui.components.JBLabel;
import com.intellij.util.IconUtil;
import com.intellij.util.TextFieldCompletionProvider;
import com.intellij.util.ui.UIUtil;
import gnu.trove.TIntArrayList;
import org.jetbrains.annotations.NotNull;
@@ -419,6 +416,9 @@ public class JUnitConfigurable<T extends JUnitConfiguration> extends SettingsEdi
myModel.setJUnitDocument(i, document);
}
myBrowsers[i].setField(field);
if (myBrowsers[i] instanceof MethodBrowser) {
((MethodBrowser)myBrowsers[i]).installCompletion((EditorTextField)field.getChildComponent());
}
}
}
@@ -462,23 +462,6 @@ public class JUnitConfigurable<T extends JUnitConfiguration> extends SettingsEdi
final EditorTextFieldWithBrowseButton textFieldWithBrowseButton = new EditorTextFieldWithBrowseButton(myProject, true,
JavaCodeFragment.VisibilityChecker.EVERYTHING_VISIBLE,
PlainTextLanguage.INSTANCE.getAssociatedFileType());
new TextFieldCompletionProvider() {
@Override
protected void addCompletionVariants(@NotNull String text, int offset, @NotNull String prefix, @NotNull CompletionResultSet result) {
final String className = getClassName();
if (className.trim().length() == 0) {
return;
}
final PsiClass testClass = getModuleSelector().findClass(className);
if (testClass == null) return;
final JUnitUtil.TestMethodFilter filter = new JUnitUtil.TestMethodFilter(testClass);
for (PsiMethod psiMethod : testClass.getAllMethods()) {
if (filter.value(psiMethod)) {
result.addElement(LookupElementBuilder.create(psiMethod.getName()));
}
}
}
}.apply(textFieldWithBrowseButton.getChildComponent());
myMethod.setComponent(textFieldWithBrowseButton);
}
@@ -22,13 +22,10 @@
*/
package com.theoryinpractice.testng.configuration;
import com.intellij.codeInsight.completion.CompletionResultSet;
import com.intellij.codeInsight.lookup.LookupElementBuilder;
import com.intellij.execution.ExecutionBundle;
import com.intellij.execution.JavaExecutionUtil;
import com.intellij.execution.MethodBrowser;
import com.intellij.execution.configuration.BrowseModuleValueActionListener;
import com.intellij.execution.junit.JUnitUtil;
import com.intellij.execution.testframework.TestSearchScope;
import com.intellij.execution.ui.AlternativeJREPanel;
import com.intellij.execution.ui.CommonJavaParametersPanel;
@@ -53,9 +50,11 @@ import com.intellij.ui.*;
import com.intellij.ui.components.JBList;
import com.intellij.ui.table.TableView;
import com.intellij.util.IconUtil;
import com.intellij.util.TextFieldCompletionProvider;
import com.theoryinpractice.testng.MessageInfoException;
import com.theoryinpractice.testng.configuration.browser.*;
import com.theoryinpractice.testng.configuration.browser.GroupBrowser;
import com.theoryinpractice.testng.configuration.browser.PackageBrowser;
import com.theoryinpractice.testng.configuration.browser.SuiteBrowser;
import com.theoryinpractice.testng.configuration.browser.TestClassBrowser;
import com.theoryinpractice.testng.model.*;
import com.theoryinpractice.testng.util.TestNGUtil;
import org.jetbrains.annotations.NotNull;
@@ -211,6 +210,9 @@ public class TestNGConfigurationEditor extends SettingsEditor<TestNGConfiguratio
}
browseListeners[i].setField((ComponentWithBrowseButton)field);
if (browseListeners[i] instanceof MethodBrowser) {
((MethodBrowser)browseListeners[i]).installCompletion((EditorTextField)((ComponentWithBrowseButton)field).getChildComponent());
}
}
model.setType(TestType.CLASS);
propertiesFile.getComponent().getTextField().setDocument(model.getPropertiesFileDocument());
@@ -422,22 +424,6 @@ public class TestNGConfigurationEditor extends SettingsEditor<TestNGConfiguratio
final EditorTextFieldWithBrowseButton methodEditorTextField = new EditorTextFieldWithBrowseButton(project, true,
JavaCodeFragment.VisibilityChecker.EVERYTHING_VISIBLE,
PlainTextLanguage.INSTANCE.getAssociatedFileType());
new TextFieldCompletionProvider() {
@Override
protected void addCompletionVariants(@NotNull String text, int offset, @NotNull String prefix, @NotNull CompletionResultSet result) {
final String className = getClassName();
if (className.trim().length() == 0) {
return;
}
final PsiClass testClass = getModuleSelector().findClass(className);
if (testClass == null) return;
for (PsiMethod psiMethod : testClass.getAllMethods()) {
if (TestNGUtil.hasTest(psiMethod)) {
result.addElement(LookupElementBuilder.create(psiMethod.getName()));
}
}
}
}.apply(methodEditorTextField.getChildComponent());
methodField.setComponent(methodEditorTextField);
groupField.setComponent(new TextFieldWithBrowseButton.NoPathCompletion());