Index: editor/tools/plugins/com.google.dart.tools.search/src/com/google/dart/tools/search/ui/text/FileTextSearchScope.java |
=================================================================== |
--- editor/tools/plugins/com.google.dart.tools.search/src/com/google/dart/tools/search/ui/text/FileTextSearchScope.java (revision 7355) |
+++ editor/tools/plugins/com.google.dart.tools.search/src/com/google/dart/tools/search/ui/text/FileTextSearchScope.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 |
@@ -55,6 +55,7 @@ |
* of the scope or not. |
* |
* @param roots the roots resources defining the scope. |
+ * @param externalFileRoots the external file roots defining the scope. |
* @param fileNamePatterns file name pattern that all files have to match <code>null</code> to |
* include all file names. |
* @param includeDerived defines if derived files and files inside derived containers are included |
@@ -62,8 +63,8 @@ |
* @return a scope containing the resources and its children if they match the given file name |
* patterns. |
*/ |
- public static FileTextSearchScope newSearchScope(IResource[] roots, String[] fileNamePatterns, |
- boolean includeDerived) { |
+ public static FileTextSearchScope newSearchScope(IResource[] roots, File[] externalFileRoots, |
+ String[] fileNamePatterns, boolean includeDerived) { |
roots = removeRedundantEntries(roots, includeDerived); |
String description; |
@@ -79,10 +80,31 @@ |
String label = SearchMessages.FileTextSearchScope_scope_multiple; |
description = Messages.format(label, new String[] {roots[0].getName(), roots[1].getName()}); |
} |
- return new FileTextSearchScope(description, roots, null, fileNamePatterns, includeDerived); |
+ return new FileTextSearchScope(description, roots, null, externalFileRoots, fileNamePatterns, |
+ includeDerived); |
} |
/** |
+ * Returns a scope for the given root resources. The created scope contains all root resources and |
+ * their children that match the given file name patterns. Depending on |
+ * <code>includeDerived</code>, derived resources or resources inside a derived container are part |
+ * of the scope or not. |
+ * |
+ * @param roots the roots resources defining the scope. |
+ * @param fileNamePatterns file name pattern that all files have to match <code>null</code> to |
+ * include all file names. |
+ * @param includeDerived defines if derived files and files inside derived containers are included |
+ * in the scope. |
+ * @return a scope containing the resources and its children if they match the given file name |
+ * patterns. |
+ */ |
+ public static FileTextSearchScope newSearchScope(IResource[] roots, String[] fileNamePatterns, |
+ boolean includeDerived) { |
+ return newSearchScope(roots, ExternalRootSearchScopeHelper.calculateExternalRoots(roots), |
+ fileNamePatterns, includeDerived); |
+ } |
+ |
+ /** |
* Returns a scope for the given working sets. The created scope contains all resources in the |
* working sets that match the given file name patterns. Depending on <code>includeDerived</code>, |
* derived resources or resources inside a derived container are part of the scope or not. |
@@ -114,8 +136,10 @@ |
description = Messages.format(label, |
new String[] {workingSets[0].getLabel(), workingSets[1].getLabel()}); |
} |
- FileTextSearchScope scope = new FileTextSearchScope(description, convertToResources( |
- workingSets, includeDerived), workingSets, fileNamePatterns, includeDerived); |
+ IResource[] resources = convertToResources(workingSets, includeDerived); |
+ FileTextSearchScope scope = new FileTextSearchScope(description, resources, workingSets, |
+ ExternalRootSearchScopeHelper.calculateExternalRoots(resources), fileNamePatterns, |
+ includeDerived); |
return scope; |
} |
@@ -132,8 +156,9 @@ |
*/ |
public static FileTextSearchScope newWorkspaceScope(String[] fileNamePatterns, |
boolean includeDerived) { |
- return new FileTextSearchScope(SearchMessages.WorkspaceScope, |
- new IResource[] {ResourcesPlugin.getWorkspace().getRoot()}, null, fileNamePatterns, |
+ IResource[] workspace = new IResource[] {ResourcesPlugin.getWorkspace().getRoot()}; |
+ return new FileTextSearchScope(SearchMessages.WorkspaceScope, workspace, null, |
+ ExternalRootSearchScopeHelper.calculateExternalRoots(workspace), fileNamePatterns, |
includeDerived); |
} |
@@ -193,11 +218,13 @@ |
private boolean fVisitDerived; |
private IWorkingSet[] fWorkingSets; |
+ private final File[] externalRoots; |
private FileTextSearchScope(String description, IResource[] resources, IWorkingSet[] workingSets, |
- String[] fileNamePatterns, boolean visitDerived) { |
+ File[] externalFiles, String[] fileNamePatterns, boolean visitDerived) { |
fDescription = description; |
fRootElements = resources; |
+ this.externalRoots = externalFiles; |
fFileNamePatterns = fileNamePatterns; |
fVisitDerived = visitDerived; |
fWorkingSets = workingSets; |
@@ -206,6 +233,22 @@ |
} |
@Override |
+ public boolean contains(File file) { |
+ |
+ String name = file.getName(); |
+ //ignore .files (and avoid traversing into folders prefixed with a '.') |
+ if (name.startsWith(".")) { |
+ return false; |
+ } |
+ |
+ if (file.isFile()) { |
+ return matchesFileName(name); |
+ } |
+ |
+ return true; |
+ } |
+ |
+ @Override |
public boolean contains(IResourceProxy proxy) { |
if (!fVisitDerived && proxy.isDerived()) { |
return false; // all resources in a derived folder are considered to be derived, see bug 103576 |
@@ -242,6 +285,11 @@ |
return fDescription; |
} |
+ @Override |
+ public File[] getExternalRoots() { |
+ return externalRoots; |
+ } |
+ |
/** |
* Returns the file name pattern configured for this scope or <code>null</code> to match all file |
* names. |