| Index: editor/tools/plugins/com.google.dart.tools.search/src/com/google/dart/tools/search/internal/core/text/FileNamePatternSearchScope.java
|
| ===================================================================
|
| --- editor/tools/plugins/com.google.dart.tools.search/src/com/google/dart/tools/search/internal/core/text/FileNamePatternSearchScope.java (revision 7355)
|
| +++ editor/tools/plugins/com.google.dart.tools.search/src/com/google/dart/tools/search/internal/core/text/FileNamePatternSearchScope.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
|
| @@ -15,6 +15,11 @@
|
|
|
| import com.google.dart.tools.search.core.text.TextSearchScope;
|
|
|
| +import org.eclipse.core.resources.IResource;
|
| +import org.eclipse.core.resources.IResourceProxy;
|
| +import org.eclipse.core.runtime.Assert;
|
| +import org.eclipse.core.runtime.IPath;
|
| +
|
| import java.io.File;
|
| import java.util.ArrayList;
|
| import java.util.Arrays;
|
| @@ -23,15 +28,10 @@
|
| import java.util.regex.Matcher;
|
| import java.util.regex.Pattern;
|
|
|
| -import org.eclipse.core.runtime.Assert;
|
| -import org.eclipse.core.runtime.IPath;
|
| +public class FileNamePatternSearchScope extends TextSearchScope {
|
|
|
| -import org.eclipse.core.resources.IResource;
|
| -import org.eclipse.core.resources.IResourceProxy;
|
| + private static final boolean IS_CASE_SENSITIVE_FILESYSTEM = !new File("Temp").equals(new File("temp")); //$NON-NLS-1$ //$NON-NLS-2$
|
|
|
| -
|
| -public class FileNamePatternSearchScope extends TextSearchScope {
|
| -
|
| /**
|
| * Returns a scope for the given resources.
|
| *
|
| @@ -46,12 +46,38 @@
|
| includeDerived), includeDerived);
|
| }
|
|
|
| - private static final boolean IS_CASE_SENSITIVE_FILESYSTEM = !new File("Temp").equals(new File("temp")); //$NON-NLS-1$ //$NON-NLS-2$
|
| + private static void addToList(ArrayList<IResource> res, IResource curr, boolean includeDerived) {
|
| + if (!includeDerived && curr.isDerived(IResource.CHECK_ANCESTORS)) {
|
| + return;
|
| + }
|
| + IPath currPath = curr.getFullPath();
|
| + for (int k = res.size() - 1; k >= 0; k--) {
|
| + IResource other = res.get(k);
|
| + IPath otherPath = other.getFullPath();
|
| + if (otherPath.isPrefixOf(currPath)) {
|
| + return;
|
| + }
|
| + if (currPath.isPrefixOf(otherPath)) {
|
| + res.remove(k);
|
| + }
|
| + }
|
| + res.add(curr);
|
| + }
|
|
|
| + private static IResource[] removeRedundantEntries(IResource[] elements, boolean includeDerived) {
|
| + ArrayList<IResource> res = new ArrayList<IResource>();
|
| + for (int i = 0; i < elements.length; i++) {
|
| + IResource curr = elements[i];
|
| + addToList(res, curr, includeDerived);
|
| + }
|
| + return res.toArray(new IResource[res.size()]);
|
| + }
|
| +
|
| private final String fDescription;
|
| private final IResource[] fRootElements;
|
|
|
| private final Set<String> fFileNamePatterns;
|
| +
|
| private Matcher fFileNameMatcher;
|
|
|
| private boolean fVisitDerived;
|
| @@ -66,18 +92,22 @@
|
| }
|
|
|
| /**
|
| - * Returns the description of the scope
|
| + * Adds an file name pattern to the scope.
|
| *
|
| - * @return the description of the scope
|
| + * @param pattern the pattern
|
| */
|
| - public String getDescription() {
|
| - return fDescription;
|
| + public void addFileNamePattern(String pattern) {
|
| + if (fFileNamePatterns.add(pattern)) {
|
| + fFileNameMatcher = null; // clear cache
|
| + }
|
| }
|
|
|
| - public IResource[] getRoots() {
|
| - return fRootElements;
|
| + @Override
|
| + public boolean contains(File file) {
|
| + return file.isFile() && matchesFileName(file.getName());
|
| }
|
|
|
| + @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
|
| @@ -90,25 +120,42 @@
|
| }
|
|
|
| /**
|
| - * Adds an file name pattern to the scope.
|
| + * Returns the description of the scope
|
| *
|
| - * @param pattern the pattern
|
| + * @return the description of the scope
|
| */
|
| - public void addFileNamePattern(String pattern) {
|
| - if (fFileNamePatterns.add(pattern)) {
|
| - fFileNameMatcher = null; // clear cache
|
| - }
|
| + public String getDescription() {
|
| + return fDescription;
|
| }
|
|
|
| - public void setFileNamePattern(Pattern pattern) {
|
| - fFileNameMatcher = pattern.matcher(""); //$NON-NLS-1$
|
| - }
|
| -
|
| public Pattern getFileNamePattern() {
|
| return getFileNameMatcher().pattern();
|
| }
|
|
|
| /**
|
| + * Returns a description for the file name patterns in the scope
|
| + *
|
| + * @return the description of the scope
|
| + */
|
| + public String getFileNamePatternDescription() {
|
| + String[] ext = fFileNamePatterns.toArray(new String[fFileNamePatterns.size()]);
|
| + Arrays.sort(ext);
|
| + StringBuffer buf = new StringBuffer();
|
| + for (int i = 0; i < ext.length; i++) {
|
| + if (i > 0) {
|
| + buf.append(", "); //$NON-NLS-1$
|
| + }
|
| + buf.append(ext[i]);
|
| + }
|
| + return buf.toString();
|
| + }
|
| +
|
| + @Override
|
| + public IResource[] getRoots() {
|
| + return fRootElements;
|
| + }
|
| +
|
| + /**
|
| * Returns if derived resources are included in the scope.
|
| *
|
| * @return if set derived resources are included in the scope.
|
| @@ -117,6 +164,10 @@
|
| return fVisitDerived;
|
| }
|
|
|
| + public void setFileNamePattern(Pattern pattern) {
|
| + fFileNameMatcher = pattern.matcher(""); //$NON-NLS-1$
|
| + }
|
| +
|
| private Matcher getFileNameMatcher() {
|
| if (fFileNameMatcher == null) {
|
| Pattern pattern;
|
| @@ -141,49 +192,4 @@
|
| return getFileNameMatcher().reset(fileName).matches();
|
| }
|
|
|
| - /**
|
| - * Returns a description for the file name patterns in the scope
|
| - *
|
| - * @return the description of the scope
|
| - */
|
| - public String getFileNamePatternDescription() {
|
| - String[] ext = fFileNamePatterns.toArray(new String[fFileNamePatterns.size()]);
|
| - Arrays.sort(ext);
|
| - StringBuffer buf = new StringBuffer();
|
| - for (int i = 0; i < ext.length; i++) {
|
| - if (i > 0) {
|
| - buf.append(", "); //$NON-NLS-1$
|
| - }
|
| - buf.append(ext[i]);
|
| - }
|
| - return buf.toString();
|
| - }
|
| -
|
| - private static IResource[] removeRedundantEntries(IResource[] elements, boolean includeDerived) {
|
| - ArrayList<IResource> res = new ArrayList<IResource>();
|
| - for (int i = 0; i < elements.length; i++) {
|
| - IResource curr = elements[i];
|
| - addToList(res, curr, includeDerived);
|
| - }
|
| - return res.toArray(new IResource[res.size()]);
|
| - }
|
| -
|
| - private static void addToList(ArrayList<IResource> res, IResource curr, boolean includeDerived) {
|
| - if (!includeDerived && curr.isDerived(IResource.CHECK_ANCESTORS)) {
|
| - return;
|
| - }
|
| - IPath currPath = curr.getFullPath();
|
| - for (int k = res.size() - 1; k >= 0; k--) {
|
| - IResource other = res.get(k);
|
| - IPath otherPath = other.getFullPath();
|
| - if (otherPath.isPrefixOf(currPath)) {
|
| - return;
|
| - }
|
| - if (currPath.isPrefixOf(otherPath)) {
|
| - res.remove(k);
|
| - }
|
| - }
|
| - res.add(curr);
|
| - }
|
| -
|
| }
|
|
|