mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
IDEA-198407 Add nullness annotations to base SearchEverywhereContributor class
This commit is contained in:
+27
-12
@@ -6,6 +6,7 @@ package com.intellij.ide.actions.searcheverywhere;
|
||||
import com.intellij.openapi.extensions.ExtensionPointName;
|
||||
import com.intellij.openapi.progress.ProgressIndicator;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import javax.swing.*;
|
||||
import java.util.ArrayList;
|
||||
@@ -16,7 +17,6 @@ import java.util.function.Function;
|
||||
/**
|
||||
* @author Konstantin Bulenkov
|
||||
*/
|
||||
//todo generic? #UX-1
|
||||
public interface SearchEverywhereContributor<F> {
|
||||
|
||||
ExtensionPointName<SearchEverywhereContributorFactory<?>> EP_NAME = ExtensionPointName.create("com.intellij.searchEverywhereContributor");
|
||||
@@ -27,6 +27,7 @@ public interface SearchEverywhereContributor<F> {
|
||||
@NotNull
|
||||
String getGroupName();
|
||||
|
||||
@Nullable
|
||||
String includeNonProjectItemsText();
|
||||
|
||||
int getSortWeight();
|
||||
@@ -37,15 +38,22 @@ public interface SearchEverywhereContributor<F> {
|
||||
return false;
|
||||
}
|
||||
|
||||
default int getElementPriority(Object element, String searchPattern) {
|
||||
default int getElementPriority(@NotNull Object element, @NotNull String searchPattern) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
void fetchElements(String pattern, boolean everywhere, SearchEverywhereContributorFilter<F> filter,
|
||||
ProgressIndicator progressIndicator, Function<Object, Boolean> consumer);
|
||||
void fetchElements(@NotNull String pattern,
|
||||
boolean everywhere,
|
||||
@Nullable SearchEverywhereContributorFilter<F> filter,
|
||||
@NotNull ProgressIndicator progressIndicator,
|
||||
@NotNull Function<Object, Boolean> consumer);
|
||||
|
||||
default ContributorSearchResult<Object> search(String pattern, boolean everywhere, SearchEverywhereContributorFilter<F> filter,
|
||||
ProgressIndicator progressIndicator, int elementsLimit) {
|
||||
@NotNull
|
||||
default ContributorSearchResult<Object> search(@NotNull String pattern,
|
||||
boolean everywhere,
|
||||
@Nullable SearchEverywhereContributorFilter<F> filter,
|
||||
@NotNull ProgressIndicator progressIndicator,
|
||||
int elementsLimit) {
|
||||
ContributorSearchResult.Builder<Object> builder = ContributorSearchResult.builder();
|
||||
fetchElements(pattern, everywhere, filter, progressIndicator, element -> {
|
||||
if (elementsLimit < 0 || builder.itemsCount() < elementsLimit) {
|
||||
@@ -61,20 +69,26 @@ public interface SearchEverywhereContributor<F> {
|
||||
return builder.build();
|
||||
}
|
||||
|
||||
default List<Object> search(String pattern, boolean everywhere, SearchEverywhereContributorFilter<F> filter,
|
||||
ProgressIndicator progressIndicator) {
|
||||
@NotNull
|
||||
default List<Object> search(@NotNull String pattern,
|
||||
boolean everywhere,
|
||||
@Nullable SearchEverywhereContributorFilter<F> filter,
|
||||
@NotNull ProgressIndicator progressIndicator) {
|
||||
List<Object> res = new ArrayList<>();
|
||||
fetchElements(pattern, everywhere, filter, progressIndicator, o -> res.add(o));
|
||||
return res;
|
||||
}
|
||||
|
||||
boolean processSelectedItem(Object selected, int modifiers, String searchText);
|
||||
boolean processSelectedItem(@NotNull Object selected, int modifiers, @NotNull String searchText);
|
||||
|
||||
ListCellRenderer getElementsRenderer(JList<?> list);
|
||||
@NotNull
|
||||
ListCellRenderer getElementsRenderer(@NotNull JList<?> list);
|
||||
|
||||
Object getDataForItem(Object element, String dataId);
|
||||
@Nullable
|
||||
Object getDataForItem(@NotNull Object element, @NotNull String dataId);
|
||||
|
||||
default String filterControlSymbols(String pattern) {
|
||||
@NotNull
|
||||
default String filterControlSymbols(@NotNull String pattern) {
|
||||
return pattern;
|
||||
}
|
||||
|
||||
@@ -86,6 +100,7 @@ public interface SearchEverywhereContributor<F> {
|
||||
return true;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
static List<SearchEverywhereContributorFactory<?>> getProviders() {
|
||||
return Arrays.asList(EP_NAME.getExtensions());
|
||||
}
|
||||
|
||||
+12
-8
@@ -65,8 +65,8 @@ public abstract class AbstractGotoSEContributor<F> implements SearchEverywhereCo
|
||||
private static final Logger LOG = Logger.getInstance(AbstractGotoSEContributor.class);
|
||||
|
||||
@Override
|
||||
public void fetchElements(String pattern, boolean everywhere, SearchEverywhereContributorFilter<F> filter,
|
||||
ProgressIndicator progressIndicator, Function<Object, Boolean> consumer) {
|
||||
public void fetchElements(@NotNull String pattern, boolean everywhere, @Nullable SearchEverywhereContributorFilter<F> filter,
|
||||
@NotNull ProgressIndicator progressIndicator, @NotNull Function<Object, Boolean> consumer) {
|
||||
if (!isDumbModeSupported() && DumbService.getInstance(myProject).isDumb()) {
|
||||
return;
|
||||
}
|
||||
@@ -74,7 +74,9 @@ public abstract class AbstractGotoSEContributor<F> implements SearchEverywhereCo
|
||||
String suffix = pattern.endsWith(fullMatchSearchSuffix) ? fullMatchSearchSuffix : "";
|
||||
String searchString = filterControlSymbols(pattern) + suffix;
|
||||
FilteringGotoByModel<F> model = createModel(myProject);
|
||||
model.setFilterItems(filter.getSelectedElements());
|
||||
if (filter != null) {
|
||||
model.setFilterItems(filter.getSelectedElements());
|
||||
}
|
||||
ChooseByNamePopup popup = ChooseByNamePopup.createPopup(myProject, model, (PsiElement)null);
|
||||
try {
|
||||
ApplicationManager.getApplication().runReadAction(() -> {
|
||||
@@ -95,8 +97,9 @@ public abstract class AbstractGotoSEContributor<F> implements SearchEverywhereCo
|
||||
//todo param is unnecessary #UX-1
|
||||
protected abstract FilteringGotoByModel<F> createModel(Project project);
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
public String filterControlSymbols(String pattern) {
|
||||
public String filterControlSymbols(@NotNull String pattern) {
|
||||
if (StringUtil.containsAnyChar(pattern, ":,;@[( #") || pattern.contains(" line ") || pattern.contains("?l=")) { // quick test if reg exp should be used
|
||||
return applyPatternFilter(pattern, patternToDetectLinesAndColumns);
|
||||
}
|
||||
@@ -119,7 +122,7 @@ public abstract class AbstractGotoSEContributor<F> implements SearchEverywhereCo
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean processSelectedItem(Object selected, int modifiers, String searchText) {
|
||||
public boolean processSelectedItem(@NotNull Object selected, int modifiers, @NotNull String searchText) {
|
||||
if (selected instanceof PsiElement) {
|
||||
if (!((PsiElement)selected).isValid()) {
|
||||
LOG.warn("Cannot navigate to invalid PsiElement");
|
||||
@@ -143,7 +146,7 @@ public abstract class AbstractGotoSEContributor<F> implements SearchEverywhereCo
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object getDataForItem(Object element, String dataId) {
|
||||
public Object getDataForItem(@NotNull Object element, @NotNull String dataId) {
|
||||
if (CommonDataKeys.PSI_ELEMENT.is(dataId) && element instanceof PsiElement) {
|
||||
return element;
|
||||
}
|
||||
@@ -156,8 +159,9 @@ public abstract class AbstractGotoSEContributor<F> implements SearchEverywhereCo
|
||||
return true;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
public ListCellRenderer getElementsRenderer(JList<?> list) {
|
||||
public ListCellRenderer getElementsRenderer(@NotNull JList<?> list) {
|
||||
return new SearchEverywherePsiRenderer(list) {
|
||||
@Override
|
||||
public String getElementText(PsiElement element) {
|
||||
@@ -172,7 +176,7 @@ public abstract class AbstractGotoSEContributor<F> implements SearchEverywhereCo
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getElementPriority(Object element, String searchPattern) {
|
||||
public int getElementPriority(@NotNull Object element, @NotNull String searchPattern) {
|
||||
return 50;
|
||||
}
|
||||
|
||||
|
||||
+6
-5
@@ -57,8 +57,8 @@ public class ActionSearchEverywhereContributor implements SearchEverywhereContri
|
||||
}
|
||||
|
||||
@Override
|
||||
public void fetchElements(String pattern, boolean everywhere, SearchEverywhereContributorFilter<Void> filter,
|
||||
ProgressIndicator progressIndicator, Function<Object, Boolean> consumer) {
|
||||
public void fetchElements(@NotNull String pattern, boolean everywhere, @Nullable SearchEverywhereContributorFilter<Void> filter,
|
||||
@NotNull ProgressIndicator progressIndicator, @NotNull Function<Object, Boolean> consumer) {
|
||||
if (StringUtil.isEmptyOrSpaces(pattern)) {
|
||||
return;
|
||||
}
|
||||
@@ -80,8 +80,9 @@ public class ActionSearchEverywhereContributor implements SearchEverywhereContri
|
||||
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
public ListCellRenderer getElementsRenderer(JList<?> list) {
|
||||
public ListCellRenderer getElementsRenderer(@NotNull JList<?> list) {
|
||||
return new GotoActionModel.GotoActionListCellRenderer(myModel::getGroupName, true);
|
||||
}
|
||||
|
||||
@@ -97,7 +98,7 @@ public class ActionSearchEverywhereContributor implements SearchEverywhereContri
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object getDataForItem(Object element, String dataId) {
|
||||
public Object getDataForItem(@NotNull Object element, @NotNull String dataId) {
|
||||
if (SetShortcutAction.SELECTED_ACTION.is(dataId)) {
|
||||
Object value = ((GotoActionModel.MatchedValue)element).value;
|
||||
if (value instanceof GotoActionModel.ActionWrapper) {
|
||||
@@ -113,7 +114,7 @@ public class ActionSearchEverywhereContributor implements SearchEverywhereContri
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean processSelectedItem(Object selected, int modifiers, String text) {
|
||||
public boolean processSelectedItem(@NotNull Object selected, int modifiers, @NotNull String text) {
|
||||
selected = ((GotoActionModel.MatchedValue) selected).value;
|
||||
|
||||
if (selected instanceof BooleanOptionDescription) {
|
||||
|
||||
+3
-2
@@ -60,8 +60,9 @@ public class ClassSearchEverywhereContributor extends AbstractGotoSEContributor<
|
||||
return new GotoClassModel2(project);
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
public String filterControlSymbols(String pattern) {
|
||||
public String filterControlSymbols(@NotNull String pattern) {
|
||||
if (pattern.indexOf('#') != -1) {
|
||||
pattern = applyPatternFilter(pattern, patternToDetectMembers);
|
||||
}
|
||||
@@ -74,7 +75,7 @@ public class ClassSearchEverywhereContributor extends AbstractGotoSEContributor<
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getElementPriority(Object element, String searchPattern) {
|
||||
public int getElementPriority(@NotNull Object element, @NotNull String searchPattern) {
|
||||
return super.getElementPriority(element, searchPattern) + 5;
|
||||
}
|
||||
|
||||
|
||||
+2
-2
@@ -59,7 +59,7 @@ public class FileSearchEverywhereContributor extends AbstractGotoSEContributor<F
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean processSelectedItem(Object selected, int modifiers, String searchText) {
|
||||
public boolean processSelectedItem(@NotNull Object selected, int modifiers, @NotNull String searchText) {
|
||||
if (selected instanceof PsiFile) {
|
||||
VirtualFile file = ((PsiFile)selected).getVirtualFile();
|
||||
if (file != null) {
|
||||
@@ -77,7 +77,7 @@ public class FileSearchEverywhereContributor extends AbstractGotoSEContributor<F
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object getDataForItem(Object element, String dataId) {
|
||||
public Object getDataForItem(@NotNull Object element, @NotNull String dataId) {
|
||||
if (CommonDataKeys.PSI_FILE.is(dataId) && element instanceof PsiFile) {
|
||||
return element;
|
||||
}
|
||||
|
||||
+4
-3
@@ -14,6 +14,7 @@ import com.intellij.psi.PsiManager;
|
||||
import com.intellij.psi.codeStyle.MinusculeMatcher;
|
||||
import com.intellij.psi.codeStyle.NameUtil;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
@@ -51,13 +52,13 @@ public class RecentFilesSEContributor extends FileSearchEverywhereContributor {
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getElementPriority(Object element, String searchPattern) {
|
||||
public int getElementPriority(@NotNull Object element, @NotNull String searchPattern) {
|
||||
return super.getElementPriority(element, searchPattern) + 1;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void fetchElements(String pattern, boolean everywhere, SearchEverywhereContributorFilter<FileType> filter,
|
||||
ProgressIndicator progressIndicator, Function<Object, Boolean> consumer) {
|
||||
public void fetchElements(@NotNull String pattern, boolean everywhere, @Nullable SearchEverywhereContributorFilter<FileType> filter,
|
||||
@NotNull ProgressIndicator progressIndicator, @NotNull Function<Object, Boolean> consumer) {
|
||||
String searchString = filterControlSymbols(pattern);
|
||||
MinusculeMatcher matcher = NameUtil.buildMatcher("*" + searchString).build();
|
||||
List<VirtualFile> opened = Arrays.asList(FileEditorManager.getInstance(myProject).getSelectedFiles());
|
||||
|
||||
+1
-1
@@ -43,7 +43,7 @@ public class SymbolSearchEverywhereContributor extends AbstractGotoSEContributor
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getElementPriority(Object element, String searchPattern) {
|
||||
public int getElementPriority(@NotNull Object element, @NotNull String searchPattern) {
|
||||
return super.getElementPriority(element, searchPattern) + 3;
|
||||
}
|
||||
|
||||
|
||||
+7
-5
@@ -28,6 +28,7 @@ import com.intellij.util.IconUtil;
|
||||
import com.intellij.util.ui.EmptyIcon;
|
||||
import com.intellij.util.ui.UIUtil;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import javax.accessibility.Accessible;
|
||||
import javax.accessibility.AccessibleContext;
|
||||
@@ -80,18 +81,18 @@ public class TopHitSEContributor implements SearchEverywhereContributor<Void> {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void fetchElements(String pattern, boolean everywhere, SearchEverywhereContributorFilter<Void> filter,
|
||||
ProgressIndicator progressIndicator, Function<Object, Boolean> consumer) {
|
||||
public void fetchElements(@NotNull String pattern, boolean everywhere, @Nullable SearchEverywhereContributorFilter<Void> filter,
|
||||
@NotNull ProgressIndicator progressIndicator, @NotNull Function<Object, Boolean> consumer) {
|
||||
fill(pattern, consumer);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object getDataForItem(Object element, String dataId) {
|
||||
public Object getDataForItem(@NotNull Object element, @NotNull String dataId) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean processSelectedItem(Object selected, int modifiers, String text) {
|
||||
public boolean processSelectedItem(@NotNull Object selected, int modifiers, @NotNull String text) {
|
||||
if (selected instanceof BooleanOptionDescription) {
|
||||
final BooleanOptionDescription option = (BooleanOptionDescription) selected;
|
||||
option.setOptionState(!option.isOptionEnabled());
|
||||
@@ -111,8 +112,9 @@ public class TopHitSEContributor implements SearchEverywhereContributor<Void> {
|
||||
return false;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
public ListCellRenderer getElementsRenderer(JList<?> list) {
|
||||
public ListCellRenderer getElementsRenderer(@NotNull JList<?> list) {
|
||||
return new TopHitRenderer(myProject);
|
||||
}
|
||||
|
||||
|
||||
+12
-10
@@ -7,6 +7,7 @@ import com.intellij.testFramework.fixtures.LightPlatformCodeInsightFixtureTestCa
|
||||
import com.intellij.util.Alarm;
|
||||
import com.intellij.util.containers.ContainerUtil;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import org.junit.Assert;
|
||||
|
||||
import javax.swing.*;
|
||||
@@ -30,7 +31,7 @@ public class MultithreadSearchTest extends LightPlatformCodeInsightFixtureTestCa
|
||||
MultithreadSearcher searcher = new MultithreadSearcher(collector, command -> alarm.addRequest(command, 0));
|
||||
|
||||
scenarios.forEach(scenario -> {
|
||||
searcher.search(scenario.contributorsAndLimits, null, false, ignrd -> null);
|
||||
searcher.search(scenario.contributorsAndLimits, "", false, ignrd -> null);
|
||||
collector.awaitFinish();
|
||||
scenario.results.forEach((contributorId, results) -> {
|
||||
List<String> values = collector.getContributorValues(contributorId);
|
||||
@@ -47,7 +48,7 @@ public class MultithreadSearchTest extends LightPlatformCodeInsightFixtureTestCa
|
||||
SESearcher searcher = new SingleThreadSearcher(collector, command -> alarm.addRequest(command, 0));
|
||||
|
||||
scenarios.forEach(scenario -> {
|
||||
searcher.search(scenario.contributorsAndLimits, null, false, ignrd -> null);
|
||||
searcher.search(scenario.contributorsAndLimits, "", false, ignrd -> null);
|
||||
collector.awaitFinish();
|
||||
scenario.results.forEach((contributorId, results) -> {
|
||||
List<String> values = collector.getContributorValues(contributorId);
|
||||
@@ -344,16 +345,16 @@ public class MultithreadSearchTest extends LightPlatformCodeInsightFixtureTestCa
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getElementPriority(Object element, String searchPattern) {
|
||||
public int getElementPriority(@NotNull Object element, @NotNull String searchPattern) {
|
||||
return fixedPriority;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void fetchElements(String pattern,
|
||||
public void fetchElements(@NotNull String pattern,
|
||||
boolean everywhere,
|
||||
SearchEverywhereContributorFilter<Object> filter,
|
||||
ProgressIndicator progressIndicator,
|
||||
Function<Object, Boolean> consumer) {
|
||||
@Nullable SearchEverywhereContributorFilter<Object> filter,
|
||||
@NotNull ProgressIndicator progressIndicator,
|
||||
@NotNull Function<Object, Boolean> consumer) {
|
||||
boolean flag = true;
|
||||
Iterator<String> iterator = Arrays.asList(items).iterator();
|
||||
while (flag && iterator.hasNext()) {
|
||||
@@ -363,17 +364,18 @@ public class MultithreadSearchTest extends LightPlatformCodeInsightFixtureTestCa
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean processSelectedItem(Object selected, int modifiers, String searchText) {
|
||||
public boolean processSelectedItem(@NotNull Object selected, int modifiers, @NotNull String searchText) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
public ListCellRenderer getElementsRenderer(JList<?> list) {
|
||||
public ListCellRenderer getElementsRenderer(@NotNull JList<?> list) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object getDataForItem(Object element, String dataId) {
|
||||
public Object getDataForItem(@NotNull Object element, @NotNull String dataId) {
|
||||
return null;
|
||||
}
|
||||
};
|
||||
|
||||
+6
-5
@@ -72,8 +72,8 @@ public class YAMLKeysSearchEverywhereContributor implements SearchEverywhereCont
|
||||
}
|
||||
|
||||
@Override
|
||||
public void fetchElements(String pattern, boolean everywhere, SearchEverywhereContributorFilter<Language> filter,
|
||||
ProgressIndicator progressIndicator, Function<Object, Boolean> consumer) {
|
||||
public void fetchElements(@NotNull String pattern, boolean everywhere, @Nullable SearchEverywhereContributorFilter<Language> filter,
|
||||
@NotNull ProgressIndicator progressIndicator, @NotNull Function<Object, Boolean> consumer) {
|
||||
if (myProject == null || DumbService.getInstance(myProject).isDumb() || pattern.isEmpty()) {
|
||||
return;
|
||||
}
|
||||
@@ -82,20 +82,21 @@ public class YAMLKeysSearchEverywhereContributor implements SearchEverywhereCont
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean processSelectedItem(Object selected, int modifiers, String searchText) {
|
||||
public boolean processSelectedItem(@NotNull Object selected, int modifiers, @NotNull String searchText) {
|
||||
if (selected instanceof Navigatable) {
|
||||
((Navigatable)selected).navigate(true);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
public ListCellRenderer getElementsRenderer(JList<?> list) {
|
||||
public ListCellRenderer getElementsRenderer(@NotNull JList<?> list) {
|
||||
return new NavigationItemListCellRenderer();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object getDataForItem(Object element, String dataId) {
|
||||
public Object getDataForItem(@NotNull Object element, @NotNull String dataId) {
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user