summaryrefslogtreecommitdiff
path: root/platform/lang-impl/src/com/intellij/openapi
diff options
context:
space:
mode:
Diffstat (limited to 'platform/lang-impl/src/com/intellij/openapi')
-rw-r--r--platform/lang-impl/src/com/intellij/openapi/diff/impl/settings/DiffPreviewProvider.java2
-rw-r--r--platform/lang-impl/src/com/intellij/openapi/editor/actions/SelectAllOccurrencesAction.java53
-rw-r--r--platform/lang-impl/src/com/intellij/openapi/editor/actions/SelectNextOccurrenceAction.java30
-rw-r--r--platform/lang-impl/src/com/intellij/openapi/editor/actions/SelectOccurrencesActionHandler.java47
-rw-r--r--platform/lang-impl/src/com/intellij/openapi/editor/actions/UnselectPreviousOccurrenceAction.java10
-rw-r--r--platform/lang-impl/src/com/intellij/openapi/roots/impl/DirectoryIndexImpl.java27
-rw-r--r--platform/lang-impl/src/com/intellij/openapi/roots/impl/PushedFilePropertiesUpdaterImpl.java (renamed from platform/lang-impl/src/com/intellij/openapi/roots/impl/PushedFilePropertiesUpdater.java)33
-rw-r--r--platform/lang-impl/src/com/intellij/openapi/util/registry/RegistryUi.java4
8 files changed, 134 insertions, 72 deletions
diff --git a/platform/lang-impl/src/com/intellij/openapi/diff/impl/settings/DiffPreviewProvider.java b/platform/lang-impl/src/com/intellij/openapi/diff/impl/settings/DiffPreviewProvider.java
index 7aa83adfd275..1de4d4a96357 100644
--- a/platform/lang-impl/src/com/intellij/openapi/diff/impl/settings/DiffPreviewProvider.java
+++ b/platform/lang-impl/src/com/intellij/openapi/diff/impl/settings/DiffPreviewProvider.java
@@ -66,7 +66,7 @@ public abstract class DiffPreviewProvider {
" long value;\n" +
"\n" +
" void foo() {\n" +
- " // Left changes\n" +
+ " // Right changes\n" +
" }\n" +
"\n" +
" void removedFromLeft() {}\n" +
diff --git a/platform/lang-impl/src/com/intellij/openapi/editor/actions/SelectAllOccurrencesAction.java b/platform/lang-impl/src/com/intellij/openapi/editor/actions/SelectAllOccurrencesAction.java
index d135b528f5e2..3e284ff6b2cc 100644
--- a/platform/lang-impl/src/com/intellij/openapi/editor/actions/SelectAllOccurrencesAction.java
+++ b/platform/lang-impl/src/com/intellij/openapi/editor/actions/SelectAllOccurrencesAction.java
@@ -15,9 +15,9 @@
*/
package com.intellij.openapi.editor.actions;
-import com.intellij.find.FindManager;
-import com.intellij.find.FindModel;
-import com.intellij.find.FindResult;
+import com.intellij.find.*;
+import com.intellij.find.editorHeaderActions.EditorHeaderAction;
+import com.intellij.find.editorHeaderActions.SelectAllAction;
import com.intellij.openapi.actionSystem.DataContext;
import com.intellij.openapi.editor.Caret;
import com.intellij.openapi.editor.Editor;
@@ -27,6 +27,8 @@ import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.TextRange;
import org.jetbrains.annotations.Nullable;
+import java.util.Iterator;
+
public class SelectAllOccurrencesAction extends EditorAction {
protected SelectAllOccurrencesAction() {
super(new Handler());
@@ -39,7 +41,9 @@ public class SelectAllOccurrencesAction extends EditorAction {
}
@Override
- public void doExecute(Editor editor, @Nullable Caret c, DataContext dataContext) {
+ public void doExecute(final Editor editor, @Nullable Caret c, DataContext dataContext) {
+ if (executeEquivalentFindPanelAction(editor, dataContext)) return;
+
Caret caret = c == null ? editor.getCaretModel().getPrimaryCaret() : c;
boolean wholeWordsSearch = false;
@@ -58,25 +62,36 @@ public class SelectAllOccurrencesAction extends EditorAction {
}
int caretShiftFromSelectionStart = caret.getOffset() - caret.getSelectionStart();
- FindManager findManager = FindManager.getInstance(project);
+ final FindManager findManager = FindManager.getInstance(project);
+
+ final FindModel model = getFindModel(selectedText, wholeWordsSearch);
- FindModel model = new FindModel();
- model.setStringToFind(selectedText);
- model.setCaseSensitive(true);
- model.setWholeWordsOnly(wholeWordsSearch);
+ FindUtil.selectSearchResultsInEditor(editor, new Iterator<FindResult>() {
+ FindResult findResult = findManager.findString(editor.getDocument().getCharsSequence(), 0, model);
- int searchStartOffset = 0;
- FindResult findResult = findManager.findString(editor.getDocument().getCharsSequence(), searchStartOffset, model);
- while (findResult.isStringFound()) {
- int newCaretOffset = caretShiftFromSelectionStart + findResult.getStartOffset();
- EditorActionUtil.makePositionVisible(editor, newCaretOffset);
- Caret newCaret = editor.getCaretModel().addCaret(editor.offsetToVisualPosition(newCaretOffset));
- if (newCaret != null) {
- setSelection(editor, newCaret, findResult);
+ @Override
+ public boolean hasNext() {
+ return findResult.isStringFound();
}
- findResult = findManager.findString(editor.getDocument().getCharsSequence(), findResult.getEndOffset(), model);
- }
+
+ @Override
+ public FindResult next() {
+ FindResult result = findResult;
+ findResult = findManager.findString(editor.getDocument().getCharsSequence(), findResult.getEndOffset(), model);
+ return result;
+ }
+
+ @Override
+ public void remove() {
+ throw new UnsupportedOperationException();
+ }
+ }, caretShiftFromSelectionStart);
editor.getScrollingModel().scrollToCaret(ScrollType.RELATIVE);
}
+
+ @Override
+ protected EditorHeaderAction getEquivalentFindPanelAction(EditorSearchComponent searchComponent) {
+ return new SelectAllAction(searchComponent);
+ }
}
}
diff --git a/platform/lang-impl/src/com/intellij/openapi/editor/actions/SelectNextOccurrenceAction.java b/platform/lang-impl/src/com/intellij/openapi/editor/actions/SelectNextOccurrenceAction.java
index cc4783b4d4db..7d3c408ee152 100644
--- a/platform/lang-impl/src/com/intellij/openapi/editor/actions/SelectNextOccurrenceAction.java
+++ b/platform/lang-impl/src/com/intellij/openapi/editor/actions/SelectNextOccurrenceAction.java
@@ -15,9 +15,9 @@
*/
package com.intellij.openapi.editor.actions;
-import com.intellij.find.FindManager;
-import com.intellij.find.FindModel;
-import com.intellij.find.FindResult;
+import com.intellij.find.*;
+import com.intellij.find.editorHeaderActions.AddOccurrenceAction;
+import com.intellij.find.editorHeaderActions.EditorHeaderAction;
import com.intellij.openapi.actionSystem.DataContext;
import com.intellij.openapi.editor.Caret;
import com.intellij.openapi.editor.Editor;
@@ -40,6 +40,8 @@ public class SelectNextOccurrenceAction extends EditorAction {
@Override
public void doExecute(Editor editor, @Nullable Caret c, DataContext dataContext) {
+ if (executeEquivalentFindPanelAction(editor, dataContext)) return;
+
Caret caret = c == null ? editor.getCaretModel().getPrimaryCaret() : c;
TextRange wordSelectionRange = getSelectionRange(editor, caret);
boolean notFoundPreviously = getAndResetNotFoundStatus(editor);
@@ -52,26 +54,21 @@ public class SelectNextOccurrenceAction extends EditorAction {
}
FindManager findManager = FindManager.getInstance(project);
- FindModel model = new FindModel();
- model.setStringToFind(selectedText);
- model.setCaseSensitive(true);
- model.setWholeWordsOnly(wholeWordSearch);
+ FindModel model = getFindModel(selectedText, wholeWordSearch);
+
+ findManager.setFindWasPerformed();
+ findManager.setFindNextModel(model);
int searchStartOffset = notFoundPreviously ? 0 : caret.getSelectionEnd();
FindResult findResult = findManager.findString(editor.getDocument().getCharsSequence(), searchStartOffset, model);
if (findResult.isStringFound()) {
- int newCaretOffset = caret.getOffset() - caret.getSelectionStart() + findResult.getStartOffset();
- EditorActionUtil.makePositionVisible(editor, newCaretOffset);
- Caret newCaret = editor.getCaretModel().addCaret(editor.offsetToVisualPosition(newCaretOffset));
- if (newCaret == null) {
+ boolean caretAdded = FindUtil.selectSearchResultInEditor(editor, findResult, caret.getOffset() - caret.getSelectionStart());
+ if (!caretAdded) {
// this means that the found occurence is already selected
if (notFoundPreviously) {
setNotFoundStatus(editor); // to make sure we won't show hint anymore if there are no more occurrences
}
}
- else {
- setSelection(editor, newCaret, findResult);
- }
}
else {
setNotFoundStatus(editor);
@@ -87,5 +84,10 @@ public class SelectNextOccurrenceAction extends EditorAction {
}
editor.getScrollingModel().scrollToCaret(ScrollType.RELATIVE);
}
+
+ @Override
+ protected EditorHeaderAction getEquivalentFindPanelAction(EditorSearchComponent searchComponent) {
+ return new AddOccurrenceAction(searchComponent);
+ }
}
}
diff --git a/platform/lang-impl/src/com/intellij/openapi/editor/actions/SelectOccurrencesActionHandler.java b/platform/lang-impl/src/com/intellij/openapi/editor/actions/SelectOccurrencesActionHandler.java
index c43eae703fd5..7b189281dfd0 100644
--- a/platform/lang-impl/src/com/intellij/openapi/editor/actions/SelectOccurrencesActionHandler.java
+++ b/platform/lang-impl/src/com/intellij/openapi/editor/actions/SelectOccurrencesActionHandler.java
@@ -19,8 +19,11 @@ import com.intellij.codeInsight.editorActions.SelectWordUtil;
import com.intellij.codeInsight.hint.HintManager;
import com.intellij.codeInsight.hint.HintManagerImpl;
import com.intellij.codeInsight.hint.HintUtil;
+import com.intellij.find.EditorSearchComponent;
import com.intellij.find.FindBundle;
-import com.intellij.openapi.actionSystem.IdeActions;
+import com.intellij.find.FindModel;
+import com.intellij.find.editorHeaderActions.EditorHeaderAction;
+import com.intellij.openapi.actionSystem.*;
import com.intellij.openapi.editor.Caret;
import com.intellij.openapi.editor.Editor;
import com.intellij.openapi.editor.EditorLastActionTracker;
@@ -28,13 +31,24 @@ import com.intellij.openapi.editor.actionSystem.EditorActionHandler;
import com.intellij.openapi.util.Key;
import com.intellij.openapi.util.TextRange;
import com.intellij.ui.LightweightHint;
+import com.intellij.util.containers.HashSet;
import org.jetbrains.annotations.Nullable;
+import java.util.Arrays;
+import java.util.Set;
+
abstract public class SelectOccurrencesActionHandler extends EditorActionHandler {
private static final Key<Boolean> NOT_FOUND = Key.create("select.next.occurence.not.found");
private static final Key<Boolean> WHOLE_WORDS = Key.create("select.next.occurence.whole.words");
+ private static final Set<String> SELECT_ACTIONS = new HashSet<String>(Arrays.asList(
+ IdeActions.ACTION_SELECT_NEXT_OCCURENCE,
+ IdeActions.ACTION_UNSELECT_PREVIOUS_OCCURENCE,
+ IdeActions.ACTION_FIND_NEXT,
+ IdeActions.ACTION_FIND_PREVIOUS
+ ));
+
protected static void setSelection(Editor editor, Caret caret, TextRange selectionRange) {
EditorActionUtil.makePositionVisible(editor, selectionRange.getStartOffset());
EditorActionUtil.makePositionVisible(editor, selectionRange.getEndOffset());
@@ -83,6 +97,35 @@ abstract public class SelectOccurrencesActionHandler extends EditorActionHandler
protected static boolean isRepeatedActionInvocation() {
String lastActionId = EditorLastActionTracker.getInstance().getLastActionId();
- return IdeActions.ACTION_SELECT_NEXT_OCCURENCE.equals(lastActionId) || IdeActions.ACTION_UNSELECT_PREVIOUS_OCCURENCE.equals(lastActionId);
+ return SELECT_ACTIONS.contains(lastActionId);
+ }
+
+ protected static FindModel getFindModel(String text, boolean wholeWords) {
+ FindModel model = new FindModel();
+ model.setStringToFind(text);
+ model.setCaseSensitive(true);
+ model.setWholeWordsOnly(wholeWords);
+ return model;
+ }
+
+ protected boolean executeEquivalentFindPanelAction(Editor editor, DataContext context) {
+ if (editor.getHeaderComponent() instanceof EditorSearchComponent) {
+ EditorSearchComponent searchComponent = (EditorSearchComponent)editor.getHeaderComponent();
+ EditorHeaderAction action = getEquivalentFindPanelAction(searchComponent);
+ if (action != null) {
+ Presentation presentation = new Presentation();
+ AnActionEvent event = new AnActionEvent(null, context, ActionPlaces.MAIN_MENU, presentation, ActionManager.getInstance(), 0);
+ action.update(event);
+ if (presentation.isEnabled()) {
+ action.actionPerformed(event);
+ return true;
+ }
+ }
+ }
+ return false;
+ }
+
+ protected EditorHeaderAction getEquivalentFindPanelAction(EditorSearchComponent searchComponent) {
+ return null;
}
}
diff --git a/platform/lang-impl/src/com/intellij/openapi/editor/actions/UnselectPreviousOccurrenceAction.java b/platform/lang-impl/src/com/intellij/openapi/editor/actions/UnselectPreviousOccurrenceAction.java
index a5657ff89b27..fffff56b12dc 100644
--- a/platform/lang-impl/src/com/intellij/openapi/editor/actions/UnselectPreviousOccurrenceAction.java
+++ b/platform/lang-impl/src/com/intellij/openapi/editor/actions/UnselectPreviousOccurrenceAction.java
@@ -15,6 +15,9 @@
*/
package com.intellij.openapi.editor.actions;
+import com.intellij.find.EditorSearchComponent;
+import com.intellij.find.editorHeaderActions.EditorHeaderAction;
+import com.intellij.find.editorHeaderActions.RemoveOccurrenceAction;
import com.intellij.openapi.actionSystem.DataContext;
import com.intellij.openapi.editor.Caret;
import com.intellij.openapi.editor.Editor;
@@ -35,6 +38,8 @@ public class UnselectPreviousOccurrenceAction extends EditorAction {
@Override
public void doExecute(Editor editor, @Nullable Caret caret, DataContext dataContext) {
+ if (executeEquivalentFindPanelAction(editor, dataContext)) return;
+
if (editor.getCaretModel().getCaretCount() > 1) {
editor.getCaretModel().removeCaret(editor.getCaretModel().getPrimaryCaret());
}
@@ -44,5 +49,10 @@ public class UnselectPreviousOccurrenceAction extends EditorAction {
getAndResetNotFoundStatus(editor);
editor.getScrollingModel().scrollToCaret(ScrollType.RELATIVE);
}
+
+ @Override
+ protected EditorHeaderAction getEquivalentFindPanelAction(EditorSearchComponent searchComponent) {
+ return new RemoveOccurrenceAction(searchComponent);
+ }
}
}
diff --git a/platform/lang-impl/src/com/intellij/openapi/roots/impl/DirectoryIndexImpl.java b/platform/lang-impl/src/com/intellij/openapi/roots/impl/DirectoryIndexImpl.java
index 2f5485d6deae..b1385686bc3a 100644
--- a/platform/lang-impl/src/com/intellij/openapi/roots/impl/DirectoryIndexImpl.java
+++ b/platform/lang-impl/src/com/intellij/openapi/roots/impl/DirectoryIndexImpl.java
@@ -149,12 +149,19 @@ public class DirectoryIndexImpl extends DirectoryIndex {
@Override
public DirectoryInfo getInfoForDirectory(@NotNull VirtualFile dir) {
+ DirectoryInfo info = getInfoForFile(dir);
+ return info.isInProject() ? info : null;
+ }
+
+ @NotNull
+ @Override
+ public DirectoryInfo getInfoForFile(@NotNull VirtualFile file) {
checkAvailability();
dispatchPendingEvents();
- if (!(dir instanceof NewVirtualFile)) return null;
+ if (!(file instanceof NewVirtualFile)) return NonProjectDirectoryInfo.NOT_SUPPORTED_VIRTUAL_FILE_IMPLEMENTATION;
- return getRootIndex().getInfoForDirectory(dir);
+ return getRootIndex().getInfoForFile(file);
}
@Override
@@ -167,22 +174,6 @@ public class DirectoryIndexImpl extends DirectoryIndex {
}
@Override
- public boolean isProjectExcludeRoot(@NotNull VirtualFile dir) {
- checkAvailability();
- if (!(dir instanceof NewVirtualFile)) return false;
-
- return getRootIndex().isProjectExcludeRoot(dir);
- }
-
- @Override
- public boolean isModuleExcludeRoot(@NotNull VirtualFile dir) {
- checkAvailability();
- if (!(dir instanceof NewVirtualFile)) return false;
-
- return getRootIndex().isModuleExcludeRoot(dir);
- }
-
- @Override
public String getPackageName(@NotNull VirtualFile dir) {
checkAvailability();
if (!(dir instanceof NewVirtualFile)) return null;
diff --git a/platform/lang-impl/src/com/intellij/openapi/roots/impl/PushedFilePropertiesUpdater.java b/platform/lang-impl/src/com/intellij/openapi/roots/impl/PushedFilePropertiesUpdaterImpl.java
index cb4b94016611..a96432e2b64c 100644
--- a/platform/lang-impl/src/com/intellij/openapi/roots/impl/PushedFilePropertiesUpdater.java
+++ b/platform/lang-impl/src/com/intellij/openapi/roots/impl/PushedFilePropertiesUpdaterImpl.java
@@ -53,7 +53,7 @@ import java.io.IOException;
import java.util.Queue;
import java.util.concurrent.ConcurrentLinkedQueue;
-public class PushedFilePropertiesUpdater {
+public class PushedFilePropertiesUpdaterImpl extends PushedFilePropertiesUpdater {
private static final Logger LOG = Logger.getInstance("#com.intellij.openapi.roots.impl.PushedFilePropertiesUpdater");
private final Project myProject;
@@ -62,12 +62,7 @@ public class PushedFilePropertiesUpdater {
private final Queue<Runnable> myTasks = new ConcurrentLinkedQueue<Runnable>();
private final MessageBusConnection myConnection;
- @NotNull
- public static PushedFilePropertiesUpdater getInstance(Project project) {
- return project.getComponent(PushedFilePropertiesUpdater.class);
- }
-
- public PushedFilePropertiesUpdater(final Project project) {
+ public PushedFilePropertiesUpdaterImpl(final Project project) {
myProject = project;
myPushers = Extensions.getExtensions(FilePropertyPusher.EP_NAME);
myFilePushers = ContainerUtil.findAllAsArray(myPushers, new Condition<FilePropertyPusher>() {
@@ -122,22 +117,24 @@ public class PushedFilePropertiesUpdater {
});
}
+ @Override
public void initializeProperties() {
for (final FilePropertyPusher pusher : myPushers) {
pusher.initExtra(myProject, myProject.getMessageBus(), new FilePropertyPusher.Engine() {
@Override
public void pushAll() {
- PushedFilePropertiesUpdater.this.pushAll(pusher);
+ PushedFilePropertiesUpdaterImpl.this.pushAll(pusher);
}
@Override
public void pushRecursively(VirtualFile file, Project project) {
- PushedFilePropertiesUpdater.this.schedulePushRecursively(file, pusher);
+ PushedFilePropertiesUpdaterImpl.this.schedulePushRecursively(file, pusher);
}
});
}
}
+ @Override
public void pushAllPropertiesNow() {
performPushTasks();
doPushAll(myPushers);
@@ -222,6 +219,7 @@ public class PushedFilePropertiesUpdater {
return projectValue != null ? projectValue : pusher.getDefaultValue();
}
+ @Override
public void pushAll(final FilePropertyPusher... pushers) {
queueTask(new Runnable() {
@Override
@@ -289,7 +287,7 @@ public class PushedFilePropertiesUpdater {
pusher = pushers[i];
if (!isDir && (pusher.pushDirectoriesOnly() || !pusher.acceptsFile(fileOrDir))) continue;
else if (isDir && !pusher.acceptsDirectory(fileOrDir, myProject)) continue;
- findAndUpdateValue(myProject, fileOrDir, pusher, moduleValues != null ? moduleValues[i]:null);
+ findAndUpdateValue(fileOrDir, pusher, moduleValues != null ? moduleValues[i]:null);
}
}
catch (AbstractMethodError ame) { // acceptsDirectory is missed
@@ -298,17 +296,18 @@ public class PushedFilePropertiesUpdater {
}
}
- public static <T> void findAndUpdateValue(final Project project, final VirtualFile fileOrDir, final FilePropertyPusher<T> pusher, final T moduleValue) {
- final T value = findPusherValuesUpwards(project, fileOrDir, pusher, moduleValue);
- updateValue(fileOrDir, value, pusher);
+ @Override
+ public <T> void findAndUpdateValue(final VirtualFile fileOrDir, final FilePropertyPusher<T> pusher, final T moduleValue) {
+ final T value = findPusherValuesUpwards(myProject, fileOrDir, pusher, moduleValue);
+ updateValue(myProject, fileOrDir, value, pusher);
}
- private static <T> void updateValue(final VirtualFile fileOrDir, final T value, final FilePropertyPusher<T> pusher) {
+ private static <T> void updateValue(final Project project, final VirtualFile fileOrDir, final T value, final FilePropertyPusher<T> pusher) {
final T oldValue = fileOrDir.getUserData(pusher.getFileDataKey());
if (value != oldValue) {
fileOrDir.putUserData(pusher.getFileDataKey(), value);
try {
- pusher.persistAttribute(fileOrDir, value);
+ pusher.persistAttribute(project, fileOrDir, value);
}
catch (IOException e) {
LOG.error(e);
@@ -316,7 +315,8 @@ public class PushedFilePropertiesUpdater {
}
}
- public static void filePropertiesChanged(@NotNull final VirtualFile file) {
+ @Override
+ public void filePropertiesChanged(@NotNull final VirtualFile file) {
ApplicationManager.getApplication().assertReadAccessAllowed();
FileBasedIndex.getInstance().requestReindex(file);
for (final Project project : ProjectManager.getInstance().getOpenProjects()) {
@@ -344,6 +344,7 @@ public class PushedFilePropertiesUpdater {
}
}
+ @Override
public void processPendingEvents() {
myConnection.deliverImmediately();
}
diff --git a/platform/lang-impl/src/com/intellij/openapi/util/registry/RegistryUi.java b/platform/lang-impl/src/com/intellij/openapi/util/registry/RegistryUi.java
index 5937af147648..0978f8f09ec7 100644
--- a/platform/lang-impl/src/com/intellij/openapi/util/registry/RegistryUi.java
+++ b/platform/lang-impl/src/com/intellij/openapi/util/registry/RegistryUi.java
@@ -109,11 +109,11 @@ public class RegistryUi implements Disposable {
final RegistryValue value = myModel.getRegistryValue(selected);
String desc = value.getDescription();
if (value.isRestartRequired()) {
- String required = "Requires IDE restart.";
+ String required = " Requires IDE restart.";
if (desc.endsWith(".")) {
desc += required;
} else {
- desc += ". " + required;
+ desc += "." + required;
}
}
myDescriptionLabel.setText(desc);