diff --git a/platform/analysis-impl/src/com/intellij/psi/search/PredefinedSearchScopeProvider.java b/platform/analysis-impl/src/com/intellij/psi/search/PredefinedSearchScopeProvider.java index b6f45874e084..b0a8e6e50446 100644 --- a/platform/analysis-impl/src/com/intellij/psi/search/PredefinedSearchScopeProvider.java +++ b/platform/analysis-impl/src/com/intellij/psi/search/PredefinedSearchScopeProvider.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2014 JetBrains s.r.o. + * Copyright 2000-2016 JetBrains s.r.o. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -28,6 +28,13 @@ public abstract class PredefinedSearchScopeProvider { return ServiceManager.getService(PredefinedSearchScopeProvider.class); } + /** + * @param suggestSearchInLibs add Project and Libraries scope + * @param prevSearchFiles add Files in Previous Search Result instead of Previous Search Result (only if {@code usageView == true}) + * @param currentSelection add Selection scope if text is selected in the editor + * @param usageView add Previous Search Result and Hierarchy 'X' (visible nodes only) scopes if there are search results or hierarchies open + * @param showEmptyScopes add Current File and Open Files scopes even if there are no files open + */ public abstract List getPredefinedScopes(@NotNull final Project project, @Nullable final DataContext dataContext, boolean suggestSearchInLibs, diff --git a/platform/lang-api/src/com/intellij/psi/search/GlobalSearchScopes.java b/platform/lang-api/src/com/intellij/psi/search/GlobalSearchScopes.java index 85b7a63ea19f..a94f53ac31f5 100644 --- a/platform/lang-api/src/com/intellij/psi/search/GlobalSearchScopes.java +++ b/platform/lang-api/src/com/intellij/psi/search/GlobalSearchScopes.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2011 JetBrains s.r.o. + * Copyright 2000-2016 JetBrains s.r.o. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -15,10 +15,10 @@ */ package com.intellij.psi.search; +import com.intellij.ide.IdeBundle; import com.intellij.openapi.fileEditor.FileEditorManager; import com.intellij.openapi.project.Project; import com.intellij.openapi.vfs.VirtualFile; -import com.intellij.util.ArrayUtil; import org.jetbrains.annotations.NotNull; import java.util.Arrays; @@ -28,18 +28,11 @@ import java.util.Arrays; */ public class GlobalSearchScopes extends GlobalSearchScopesCore { - public static final String OPEN_FILES_SCOPE_NAME = "Open Files"; - - private GlobalSearchScopes() { - } + private GlobalSearchScopes() {} @NotNull public static GlobalSearchScope openFilesScope(@NotNull Project project) { final VirtualFile[] files = FileEditorManager.getInstance(project).getOpenFiles(); - if (ArrayUtil.isEmpty(files)) { - // prefer a scope with meaningful getDisplayName(), avoid GlobalSearchScope.EMPTY_SCOPE - return GlobalSearchScope.fileScope(project, null, OPEN_FILES_SCOPE_NAME); - } - return GlobalSearchScope.filesScope(project, Arrays.asList(files), OPEN_FILES_SCOPE_NAME); + return GlobalSearchScope.filesScope(project, Arrays.asList(files), IdeBundle.message("scope.open.files")); } } diff --git a/platform/lang-impl/src/com/intellij/psi/search/PredefinedSearchScopeProviderImpl.java b/platform/lang-impl/src/com/intellij/psi/search/PredefinedSearchScopeProviderImpl.java index fc3f6deeed22..b24c0649dfa1 100644 --- a/platform/lang-impl/src/com/intellij/psi/search/PredefinedSearchScopeProviderImpl.java +++ b/platform/lang-impl/src/com/intellij/psi/search/PredefinedSearchScopeProviderImpl.java @@ -59,6 +59,7 @@ import javax.swing.*; import java.util.*; public class PredefinedSearchScopeProviderImpl extends PredefinedSearchScopeProvider { + @NotNull @Override public List getPredefinedScopes(@NotNull final Project project, @@ -79,7 +80,13 @@ public class PredefinedSearchScopeProviderImpl extends PredefinedSearchScopeProv result.add(GlobalSearchScopesCore.projectTestScope(project)); } - result.add(GlobalSearchScopes.openFilesScope(project)); + final GlobalSearchScope openFilesScope = GlobalSearchScopes.openFilesScope(project); + if (openFilesScope != GlobalSearchScope.EMPTY_SCOPE) { + result.add(openFilesScope); + } + else if (showEmptyScopes) { + result.add(new LocalSearchScope(PsiElement.EMPTY_ARRAY, IdeBundle.message("scope.open.files"))); + } final Editor selectedTextEditor = ApplicationManager.getApplication().isDispatchThread() ? FileEditorManager.getInstance(project).getSelectedTextEditor() diff --git a/platform/platform-resources-en/src/messages/IdeBundle.properties b/platform/platform-resources-en/src/messages/IdeBundle.properties index b496bc500d62..17fecbc68fcf 100644 --- a/platform/platform-resources-en/src/messages/IdeBundle.properties +++ b/platform/platform-resources-en/src/messages/IdeBundle.properties @@ -805,6 +805,7 @@ action.group.by.scope.type=Group by Scope Type action.description.group.by.scope=Group by Scope Type (production, test, libraries) action.show.included.only=Show Included Only action.description.show.included.only=Show only files included to the current scope selected +scope.open.files=Open Files scope.current.file=Current File scope.selection=Selection scope.files.in.previous.search.result=Files in Previous Search Result