Bug 510583 - [region] optimize the ALL filter

Change-Id: Ib0c546f4449b6db05a1aa27749aec43c8bb69a57
Signed-off-by: Thomas Watson <tjwatson@us.ibm.com>
diff --git a/bundles/org.eclipse.equinox.region/META-INF/MANIFEST.MF b/bundles/org.eclipse.equinox.region/META-INF/MANIFEST.MF
index c176438..1ab9dcd 100644
--- a/bundles/org.eclipse.equinox.region/META-INF/MANIFEST.MF
+++ b/bundles/org.eclipse.equinox.region/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: %Bundle-Name
 Bundle-SymbolicName: org.eclipse.equinox.region
-Bundle-Version: 1.3.1.qualifier
+Bundle-Version: 1.3.2.qualifier
 Bundle-RequiredExecutionEnvironment: JavaSE-1.6
 Fragment-Host: system.bundle
 ExtensionBundle-Activator: org.eclipse.equinox.internal.region.RegionManager
diff --git a/bundles/org.eclipse.equinox.region/pom.xml b/bundles/org.eclipse.equinox.region/pom.xml
index 3b5e333..7bb49c5 100644
--- a/bundles/org.eclipse.equinox.region/pom.xml
+++ b/bundles/org.eclipse.equinox.region/pom.xml
@@ -19,6 +19,6 @@
   </parent>
   <groupId>org.eclipse.equinox</groupId>
   <artifactId>org.eclipse.equinox.region</artifactId>
-  <version>1.3.1-SNAPSHOT</version>
+  <version>1.3.2-SNAPSHOT</version>
   <packaging>eclipse-plugin</packaging>
 </project>
diff --git a/bundles/org.eclipse.equinox.region/src/org/eclipse/equinox/internal/region/StandardRegionFilter.java b/bundles/org.eclipse.equinox.region/src/org/eclipse/equinox/internal/region/StandardRegionFilter.java
index ab8a618..46c7865 100644
--- a/bundles/org.eclipse.equinox.region/src/org/eclipse/equinox/internal/region/StandardRegionFilter.java
+++ b/bundles/org.eclipse.equinox.region/src/org/eclipse/equinox/internal/region/StandardRegionFilter.java
@@ -19,6 +19,18 @@
 import org.osgi.framework.wiring.BundleRevision;
 
 public final class StandardRegionFilter implements RegionFilter {
+	final static Filter ALL;
+
+	static {
+		try {
+			ALL = FrameworkUtil.createFilter("(|(!(all=*))(all=*))"); //$NON-NLS-1$
+		} catch (InvalidSyntaxException e) {
+			// should never happen!
+			e.printStackTrace();
+			throw new RuntimeException(e);
+		}
+	}
+
 	private static final String BUNDLE_ID_ATTR = "id"; //$NON-NLS-1$
 	private final Map<String, Collection<Filter>> filters;
 
@@ -75,7 +87,7 @@
 		if (filters == null)
 			return false;
 		for (Filter filter : filters) {
-			if (filter.matches(attrs))
+			if (filter == ALL || filter.matches(attrs))
 				return true;
 		}
 		return false;
@@ -85,7 +97,7 @@
 		if (filters == null)
 			return false;
 		for (Filter filter : filters) {
-			if (filter.match(service))
+			if (filter == ALL || filter.match(service))
 				return true;
 		}
 		return false;
diff --git a/bundles/org.eclipse.equinox.region/src/org/eclipse/equinox/internal/region/StandardRegionFilterBuilder.java b/bundles/org.eclipse.equinox.region/src/org/eclipse/equinox/internal/region/StandardRegionFilterBuilder.java
index d031540..b61ab08 100644
--- a/bundles/org.eclipse.equinox.region/src/org/eclipse/equinox/internal/region/StandardRegionFilterBuilder.java
+++ b/bundles/org.eclipse.equinox.region/src/org/eclipse/equinox/internal/region/StandardRegionFilterBuilder.java
@@ -21,20 +21,6 @@
 
 public final class StandardRegionFilterBuilder implements RegionFilterBuilder {
 
-	private final static String ALL_SPEC = "(|(!(all=*))(all=*))"; //$NON-NLS-1$
-
-	private final static Filter ALL;
-
-	static {
-		try {
-			ALL = FrameworkUtil.createFilter(ALL_SPEC);
-		} catch (InvalidSyntaxException e) {
-			// should never happen!
-			e.printStackTrace();
-			throw new RuntimeException(e);
-		}
-	}
-
 	private final Object monitor = new Object();
 
 	private final Map<String, Collection<Filter>> policy = new HashMap<String, Collection<Filter>>();
@@ -52,8 +38,8 @@
 				namespaceFilters = new LinkedHashSet<Filter>();
 				policy.put(namespace, namespaceFilters);
 			}
-			// TODO need to use BundleContext.createFilter here
-			namespaceFilters.add(FrameworkUtil.createFilter(filter));
+
+			namespaceFilters.add(createFilter(filter));
 		}
 		if (VISIBLE_SERVICE_NAMESPACE.equals(namespace)) {
 			// alias the deprecated namespace to osgi.service
@@ -62,6 +48,12 @@
 		return this;
 	}
 
+	public Filter createFilter(String spec) throws InvalidSyntaxException {
+		// TODO need to use BundleContext.createFilter here
+		Filter filter = FrameworkUtil.createFilter(spec);
+		return (StandardRegionFilter.ALL.equals(filter)) ? StandardRegionFilter.ALL : filter;
+	}
+
 	@SuppressWarnings("deprecation")
 	public RegionFilterBuilder allowAll(String namespace) {
 		if (namespace == null)
@@ -75,7 +67,7 @@
 			}
 			// remove any other filters since this will override them all.
 			namespaceFilters.clear();
-			namespaceFilters.add(ALL);
+			namespaceFilters.add(StandardRegionFilter.ALL);
 		}
 		if (VISIBLE_SERVICE_NAMESPACE.equals(namespace)) {
 			// alias the deprecated namespace to osgi.service