Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(50)

Unified Diff: editor/tools/plugins/com.google.dart.tools.search/src/com/google/dart/tools/search/internal/ui/text/FileSearchQuery.java

Issue 10387008: External file text search engine support. (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: Created 8 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: editor/tools/plugins/com.google.dart.tools.search/src/com/google/dart/tools/search/internal/ui/text/FileSearchQuery.java
===================================================================
--- editor/tools/plugins/com.google.dart.tools.search/src/com/google/dart/tools/search/internal/ui/text/FileSearchQuery.java (revision 7355)
+++ editor/tools/plugins/com.google.dart.tools.search/src/com/google/dart/tools/search/internal/ui/text/FileSearchQuery.java (working copy)
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2011, the Dart project authors.
+ * Copyright (c) 2012, the Dart project authors.
*
* Licensed under the Eclipse Public License v1.0 (the "License"); you may not use this file except
* in compliance with the License. You may obtain a copy of the License at
@@ -25,26 +25,38 @@
import com.google.dart.tools.search.ui.text.FileTextSearchScope;
import com.google.dart.tools.search.ui.text.Match;
-import java.util.ArrayList;
-import java.util.regex.Pattern;
-
+import org.eclipse.core.resources.IFile;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.resources.IFile;
-import org.eclipse.core.resources.IResource;
+import java.io.File;
+import java.util.ArrayList;
+import java.util.regex.Pattern;
-
public class FileSearchQuery implements ISearchQuery {
private final static class TextSearchResultCollector extends TextSearchRequestor {
+ private static String getContents(TextSearchMatchAccess matchRequestor, int start, int end) {
+ StringBuffer buf = new StringBuffer();
+ for (int i = start; i < end; i++) {
+ char ch = matchRequestor.getFileContentChar(i);
+ if (Character.isWhitespace(ch) || Character.isISOControl(ch)) {
+ buf.append(' ');
+ } else {
+ buf.append(ch);
+ }
+ }
+ return buf.toString();
+ }
+
private final AbstractTextSearchResult fResult;
private final boolean fIsFileSearchOnly;
private final boolean fSearchInBinaries;
- private ArrayList<FileMatch> fCachedMatches;
+ private ArrayList<FileResourceMatch> fCachedMatches;
+
private TextSearchResultCollector(AbstractTextSearchResult result, boolean isFileSearchOnly,
boolean searchInBinaries) {
fResult = result;
@@ -53,6 +65,16 @@
}
+ @Override
+ public boolean acceptExternalFile(File file) throws CoreException {
+ if (fIsFileSearchOnly) {
+ fResult.addMatch(new ExternalFileMatch(file));
+ }
+ flushMatches();
+ return true;
+ }
+
+ @Override
public boolean acceptFile(IFile file) throws CoreException {
if (fIsFileSearchOnly) {
fResult.addMatch(new FileMatch(file));
@@ -61,28 +83,47 @@
return true;
}
- public boolean reportBinaryFile(IFile file) {
- return fSearchInBinaries;
- }
-
+ @Override
public boolean acceptPatternMatch(TextSearchMatchAccess matchRequestor) throws CoreException {
int matchOffset = matchRequestor.getMatchOffset();
LineElement lineElement = getLineElement(matchOffset, matchRequestor);
if (lineElement != null) {
- FileMatch fileMatch = new FileMatch(matchRequestor.getFile(), matchOffset,
- matchRequestor.getMatchLength(), lineElement);
+ FileResourceMatch fileMatch = matchRequestor.createMatch(lineElement);
fCachedMatches.add(fileMatch);
}
return true;
}
+ @Override
+ public void beginReporting() {
+ fCachedMatches = new ArrayList<FileResourceMatch>();
+ }
+
+ @Override
+ public void endReporting() {
+ flushMatches();
+ fCachedMatches = null;
+ }
+
+ @Override
+ public boolean reportBinaryFile(IFile file) {
+ return fSearchInBinaries;
+ }
+
+ private void flushMatches() {
+ if (!fCachedMatches.isEmpty()) {
+ fResult.addMatches(fCachedMatches.toArray(new Match[fCachedMatches.size()]));
+ fCachedMatches.clear();
+ }
+ }
+
private LineElement getLineElement(int offset, TextSearchMatchAccess matchRequestor) {
int lineNumber = 1;
int lineStart = 0;
if (!fCachedMatches.isEmpty()) {
// match on same line as last?
- FileMatch last = fCachedMatches.get(fCachedMatches.size() - 1);
+ FileResourceMatch last = fCachedMatches.get(fCachedMatches.size() - 1);
LineElement lineElement = last.getLineElement();
if (lineElement.contains(offset)) {
return lineElement;
@@ -117,35 +158,6 @@
}
return null; // offset outside of range
}
-
- private static String getContents(TextSearchMatchAccess matchRequestor, int start, int end) {
- StringBuffer buf = new StringBuffer();
- for (int i = start; i < end; i++) {
- char ch = matchRequestor.getFileContentChar(i);
- if (Character.isWhitespace(ch) || Character.isISOControl(ch)) {
- buf.append(' ');
- } else {
- buf.append(ch);
- }
- }
- return buf.toString();
- }
-
- public void beginReporting() {
- fCachedMatches = new ArrayList<FileMatch>();
- }
-
- public void endReporting() {
- flushMatches();
- fCachedMatches = null;
- }
-
- private void flushMatches() {
- if (!fCachedMatches.isEmpty()) {
- fResult.addMatches(fCachedMatches.toArray(new Match[fCachedMatches.size()]));
- fCachedMatches.clear();
- }
- }
}
private final FileTextSearchScope fScope;
@@ -163,46 +175,21 @@
fScope = scope;
}
- public FileTextSearchScope getSearchScope() {
- return fScope;
+ @Override
+ public boolean canRerun() {
+ return true;
}
+ @Override
public boolean canRunInBackground() {
return true;
}
- public IStatus run(final IProgressMonitor monitor) {
- AbstractTextSearchResult textResult = (AbstractTextSearchResult) getSearchResult();
- textResult.removeAll();
-
- Pattern searchPattern = getSearchPattern();
- boolean searchInBinaries = !isScopeAllFileTypes();
-
- TextSearchResultCollector collector = new TextSearchResultCollector(textResult,
- isFileNameSearch(), searchInBinaries);
- return TextSearchEngine.create().search(fScope, collector, searchPattern, monitor);
- }
-
- private boolean isScopeAllFileTypes() {
- String[] fileNamePatterns = fScope.getFileNamePatterns();
- if (fileNamePatterns == null)
- return true;
- for (int i = 0; i < fileNamePatterns.length; i++) {
- if ("*".equals(fileNamePatterns[i])) { //$NON-NLS-1$
- return true;
- }
- }
- return false;
- }
-
+ @Override
public String getLabel() {
return SearchMessages.FileSearchQuery_label;
}
- public String getSearchString() {
- return fSearchText;
- }
-
public String getResultLabel(int nMatches) {
String searchString = getSearchString();
if (searchString.length() > 0) {
@@ -235,26 +222,25 @@
return Messages.format(SearchMessages.FileSearchQuery_pluralPattern_fileNameSearch, args);
}
- /**
- * @param result all result are added to this search result
- * @param monitor the progress monitor to use
- * @param file the file to search in
- * @return returns the status of the operation
- */
- public IStatus searchInFile(final AbstractTextSearchResult result,
- final IProgressMonitor monitor, IFile file) {
- FileTextSearchScope scope = FileTextSearchScope.newSearchScope(new IResource[] {file},
- new String[] {"*"}, true); //$NON-NLS-1$
+ @Override
+ public ISearchResult getSearchResult() {
+ if (fResult == null) {
+ fResult = new FileSearchResult(this);
+ new SearchResultUpdater(fResult);
+ }
+ return fResult;
+ }
- Pattern searchPattern = getSearchPattern();
- TextSearchResultCollector collector = new TextSearchResultCollector(result, isFileNameSearch(),
- true);
+ public FileTextSearchScope getSearchScope() {
+ return fScope;
+ }
- return TextSearchEngine.create().search(scope, collector, searchPattern, monitor);
+ public String getSearchString() {
+ return fSearchText;
}
- protected Pattern getSearchPattern() {
- return PatternConstructor.createPattern(fSearchText, fIsCaseSensitive, fIsRegEx);
+ public boolean isCaseSensitive() {
+ return fIsCaseSensitive;
}
public boolean isFileNameSearch() {
@@ -265,19 +251,51 @@
return fIsRegEx;
}
- public boolean isCaseSensitive() {
- return fIsCaseSensitive;
+ @Override
+ public IStatus run(final IProgressMonitor monitor) {
+ AbstractTextSearchResult textResult = (AbstractTextSearchResult) getSearchResult();
+ textResult.removeAll();
+
+ Pattern searchPattern = getSearchPattern();
+ boolean searchInBinaries = !isScopeAllFileTypes();
+
+ TextSearchResultCollector collector = new TextSearchResultCollector(textResult,
+ isFileNameSearch(), searchInBinaries);
+ return TextSearchEngine.create().search(fScope, collector, searchPattern, monitor);
}
- public boolean canRerun() {
- return true;
+// /**
+// * @param result all result are added to this search result
+// * @param monitor the progress monitor to use
+// * @param file the file to search in
+// * @return returns the status of the operation
+// */
+// public IStatus searchInFile(final AbstractTextSearchResult result,
+// final IProgressMonitor monitor, IFile file) {
+// FileTextSearchScope scope = FileTextSearchScope.newSearchScope(new IResource[] {file},
+// new String[] {"*"}, true); //$NON-NLS-1$
+//
+// Pattern searchPattern = getSearchPattern();
+// TextSearchResultCollector collector = new TextSearchResultCollector(result, isFileNameSearch(),
+// true);
+//
+// return TextSearchEngine.create().search(scope, collector, searchPattern, monitor);
+// }
+
+ protected Pattern getSearchPattern() {
+ return PatternConstructor.createPattern(fSearchText, fIsCaseSensitive, fIsRegEx);
}
- public ISearchResult getSearchResult() {
- if (fResult == null) {
- fResult = new FileSearchResult(this);
- new SearchResultUpdater(fResult);
+ private boolean isScopeAllFileTypes() {
+ String[] fileNamePatterns = fScope.getFileNamePatterns();
+ if (fileNamePatterns == null) {
+ return true;
}
- return fResult;
+ for (int i = 0; i < fileNamePatterns.length; i++) {
+ if ("*".equals(fileNamePatterns[i])) { //$NON-NLS-1$
+ return true;
+ }
+ }
+ return false;
}
}

Powered by Google App Engine
This is Rietveld 408576698