diff options
Diffstat (limited to 'platform/lang-impl/src/com/intellij/openapi')
-rw-r--r-- | platform/lang-impl/src/com/intellij/openapi/diff/impl/settings/DiffPreviewProvider.java | 2 | ||||
-rw-r--r-- | platform/lang-impl/src/com/intellij/openapi/editor/actions/SelectAllOccurrencesAction.java | 53 | ||||
-rw-r--r-- | platform/lang-impl/src/com/intellij/openapi/editor/actions/SelectNextOccurrenceAction.java | 30 | ||||
-rw-r--r-- | platform/lang-impl/src/com/intellij/openapi/editor/actions/SelectOccurrencesActionHandler.java | 47 | ||||
-rw-r--r-- | platform/lang-impl/src/com/intellij/openapi/editor/actions/UnselectPreviousOccurrenceAction.java | 10 | ||||
-rw-r--r-- | platform/lang-impl/src/com/intellij/openapi/roots/impl/DirectoryIndexImpl.java | 27 | ||||
-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.java | 4 |
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); |