You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@karaf.apache.org by gn...@apache.org on 2017/09/29 07:25:32 UTC
[1/9] karaf git commit: Reuse empty SimpleFilter
Repository: karaf
Updated Branches:
refs/heads/master a3cb3a099 -> 69695c8bc
Reuse empty SimpleFilter
Rather than instantiating a new filter, use a precomputed constant.
This eliminates constructor calls from outside of the package, allowing
it be be hidden.
Signed-off-by: Robert Varga <ni...@hq.sk>
Project: http://git-wip-us.apache.org/repos/asf/karaf/repo
Commit: http://git-wip-us.apache.org/repos/asf/karaf/commit/36f7c472
Tree: http://git-wip-us.apache.org/repos/asf/karaf/tree/36f7c472
Diff: http://git-wip-us.apache.org/repos/asf/karaf/diff/36f7c472
Branch: refs/heads/master
Commit: 36f7c4728eb66f95fff1c1b8a54e8616f160e380
Parents: c68e8c6
Author: Robert Varga <ni...@hq.sk>
Authored: Tue Sep 26 18:36:33 2017 +0200
Committer: Robert Varga <ni...@hq.sk>
Committed: Wed Sep 27 09:55:03 2017 +0200
----------------------------------------------------------------------
.../internal/region/SubsystemResolver.java | 33 ++++++++++----------
.../internal/repository/BaseRepository.java | 2 +-
.../internal/resolver/SimpleFilter.java | 21 ++++++-------
.../internal/service/RequirementSort.java | 2 +-
4 files changed, 29 insertions(+), 29 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/karaf/blob/36f7c472/features/core/src/main/java/org/apache/karaf/features/internal/region/SubsystemResolver.java
----------------------------------------------------------------------
diff --git a/features/core/src/main/java/org/apache/karaf/features/internal/region/SubsystemResolver.java b/features/core/src/main/java/org/apache/karaf/features/internal/region/SubsystemResolver.java
index b39c965..d9ec573 100644
--- a/features/core/src/main/java/org/apache/karaf/features/internal/region/SubsystemResolver.java
+++ b/features/core/src/main/java/org/apache/karaf/features/internal/region/SubsystemResolver.java
@@ -232,7 +232,7 @@ public class SubsystemResolver {
return wiring;
}
- private Object toJson(Map<Resource, List<Wire>> wiring) {
+ private static Object toJson(Map<Resource, List<Wire>> wiring) {
Map<String, List<Map<String, Object>>> wires = new HashMap<>();
for (Map.Entry<Resource, List<Wire>> reswiring : wiring.entrySet()) {
Resource resource = reswiring.getKey();
@@ -251,25 +251,25 @@ public class SubsystemResolver {
return wires;
}
- private String toString(Resource r) {
+ private static String toString(Resource r) {
return toString(r.getCapabilities(IDENTITY_NAMESPACE).get(0));
}
- private String toString(Requirement r) {
+ private static String toString(Requirement r) {
return BaseClause.toString(null, r.getNamespace(), r.getAttributes(), r.getDirectives());
}
- private String toString(Capability c) {
+ private static String toString(Capability c) {
return BaseClause.toString(null, c.getNamespace(), c.getAttributes(), c.getDirectives());
}
- private Object toJson(Repository repository) {
+ private static Object toJson(Repository repository) {
Requirement req = new RequirementImpl(
null,
IDENTITY_NAMESPACE,
Collections.emptyMap(),
Collections.emptyMap(),
- new SimpleFilter(null, null, SimpleFilter.MATCH_ALL));
+ SimpleFilter.MATCH_ALL_FILTER);
Collection<Capability> identities = repository.findProviders(Collections.singleton(req)).get(req);
List<Object> resources = new ArrayList<>();
for (Capability identity : identities) {
@@ -279,7 +279,7 @@ public class SubsystemResolver {
return resources;
}
- private Object toJson(Resource resource) {
+ private static Object toJson(Resource resource) {
Map<String, Object> obj = new HashMap<>();
List<Object> caps = new ArrayList<>();
List<Object> reqs = new ArrayList<>();
@@ -371,7 +371,7 @@ public class SubsystemResolver {
}
/**
- *
+ *
* @return map of bundles and the region they are deployed in
*/
public Map<Resource, String> getBundles() {
@@ -403,7 +403,7 @@ public class SubsystemResolver {
}
/**
- *
+ *
* @param resourceFilter
* @return map from resource to region name
*/
@@ -475,7 +475,7 @@ public class SubsystemResolver {
return null;
}
- private Capability findMatchingCapability(SimpleFilter filter, Collection<Capability> caps) {
+ private static Capability findMatchingCapability(SimpleFilter filter, Collection<Capability> caps) {
for (Capability cap : caps) {
if (CapabilitySet.matches(cap, filter)) {
return cap;
@@ -484,7 +484,7 @@ public class SubsystemResolver {
return null;
}
- private Wire findMatchingWire(SimpleFilter filter, Collection<Wire> wires) {
+ private static Wire findMatchingWire(SimpleFilter filter, Collection<Wire> wires) {
for (Wire wire : wires) {
Capability cap = wire.getCapability();
if (CapabilitySet.matches(cap, filter)) {
@@ -494,7 +494,7 @@ public class SubsystemResolver {
return null;
}
- private SimpleFilter createFilter(String... s) {
+ private static SimpleFilter createFilter(String... s) {
Map<String, Object> attrs = new HashMap<>();
for (int i = 0; i < s.length - 1; i += 2) {
attrs.put(s[i], s[i + 1]);
@@ -516,13 +516,14 @@ public class SubsystemResolver {
}
}
- private boolean isFlat(Subsystem subsystem) {
- if (subsystem == null || subsystem.getFeature() == null)
+ private static boolean isFlat(Subsystem subsystem) {
+ if (subsystem == null || subsystem.getFeature() == null) {
return false;
+ }
return subsystem.getFeature() != null && subsystem.getFeature().getScoping() == null;
}
- private Subsystem getOrCreateChild(Subsystem ss, String name) {
+ private static Subsystem getOrCreateChild(Subsystem ss, String name) {
Subsystem child = ss.getChild(name);
return child != null ? child : ss.createSubsystem(name, true);
}
@@ -539,7 +540,7 @@ public class SubsystemResolver {
}
}
- private RegionFilterBuilder createRegionFilterBuilder(RegionDigraph digraph, Map<String, Set<String>> sharingPolicy) throws InvalidSyntaxException {
+ private static RegionFilterBuilder createRegionFilterBuilder(RegionDigraph digraph, Map<String, Set<String>> sharingPolicy) throws InvalidSyntaxException {
RegionFilterBuilder result = digraph.createRegionFilterBuilder();
for (Map.Entry<String, Set<String>> entry : sharingPolicy.entrySet()) {
for (String filter : entry.getValue()) {
http://git-wip-us.apache.org/repos/asf/karaf/blob/36f7c472/features/core/src/main/java/org/apache/karaf/features/internal/repository/BaseRepository.java
----------------------------------------------------------------------
diff --git a/features/core/src/main/java/org/apache/karaf/features/internal/repository/BaseRepository.java b/features/core/src/main/java/org/apache/karaf/features/internal/repository/BaseRepository.java
index 5b81a12..b8bfc62 100644
--- a/features/core/src/main/java/org/apache/karaf/features/internal/repository/BaseRepository.java
+++ b/features/core/src/main/java/org/apache/karaf/features/internal/repository/BaseRepository.java
@@ -79,7 +79,7 @@ public class BaseRepository implements Repository {
String filter = requirement.getDirectives().get(Constants.FILTER_DIRECTIVE);
sf = (filter != null)
? SimpleFilter.parse(filter)
- : new SimpleFilter(null, null, SimpleFilter.MATCH_ALL);
+ : SimpleFilter.MATCH_ALL_FILTER;
}
result.put(requirement, set.match(sf, true));
} else {
http://git-wip-us.apache.org/repos/asf/karaf/blob/36f7c472/features/core/src/main/java/org/apache/karaf/features/internal/resolver/SimpleFilter.java
----------------------------------------------------------------------
diff --git a/features/core/src/main/java/org/apache/karaf/features/internal/resolver/SimpleFilter.java b/features/core/src/main/java/org/apache/karaf/features/internal/resolver/SimpleFilter.java
index 117734e..02635d4 100644
--- a/features/core/src/main/java/org/apache/karaf/features/internal/resolver/SimpleFilter.java
+++ b/features/core/src/main/java/org/apache/karaf/features/internal/resolver/SimpleFilter.java
@@ -55,11 +55,13 @@ public class SimpleFilter {
COMMON_STRINGS = s;
}
+ public static final SimpleFilter MATCH_ALL_FILTER = new SimpleFilter(null, null, MATCH_ALL);
+
private final String name;
private final Object value;
private final int op;
- public SimpleFilter(String name, Object value, int op) {
+ SimpleFilter(String name, Object value, int op) {
this.name = internIfCommon(name);
this.value = value;
this.op = op;
@@ -572,16 +574,13 @@ public class SimpleFilter {
}
}
- SimpleFilter sf = null;
-
- if (filters.size() == 1) {
- sf = filters.get(0);
- } else if (attrs.size() > 1) {
- sf = new SimpleFilter(null, filters, SimpleFilter.AND);
- } else if (filters.isEmpty()) {
- sf = new SimpleFilter(null, null, SimpleFilter.MATCH_ALL);
+ switch (filters.size()) {
+ case 0:
+ return MATCH_ALL_FILTER;
+ case 1:
+ return filters.get(0);
+ default:
+ return new SimpleFilter(null, filters, SimpleFilter.AND);
}
-
- return sf;
}
}
http://git-wip-us.apache.org/repos/asf/karaf/blob/36f7c472/features/core/src/main/java/org/apache/karaf/features/internal/service/RequirementSort.java
----------------------------------------------------------------------
diff --git a/features/core/src/main/java/org/apache/karaf/features/internal/service/RequirementSort.java b/features/core/src/main/java/org/apache/karaf/features/internal/service/RequirementSort.java
index 1bfe070..921fda8 100644
--- a/features/core/src/main/java/org/apache/karaf/features/internal/service/RequirementSort.java
+++ b/features/core/src/main/java/org/apache/karaf/features/internal/service/RequirementSort.java
@@ -79,7 +79,7 @@ public final class RequirementSort<T extends Resource> {
String filter = requirement.getDirectives().get(Constants.FILTER_DIRECTIVE);
SimpleFilter sf = (filter != null)
? SimpleFilter.parse(filter)
- : new SimpleFilter(null, null, SimpleFilter.MATCH_ALL);
+ : SimpleFilter.MATCH_ALL_FILTER;
for (Capability cap : capSet.match(sf, true)) {
result.add((T) cap.getResource());
}
[7/9] karaf git commit: Merge remote-tracking branch
'rovarga/feature-version-char' into master2
Posted by gn...@apache.org.
Merge remote-tracking branch 'rovarga/feature-version-char' into master2
Project: http://git-wip-us.apache.org/repos/asf/karaf/repo
Commit: http://git-wip-us.apache.org/repos/asf/karaf/commit/1411e3c1
Tree: http://git-wip-us.apache.org/repos/asf/karaf/tree/1411e3c1
Diff: http://git-wip-us.apache.org/repos/asf/karaf/diff/1411e3c1
Branch: refs/heads/master
Commit: 1411e3c1972833647fb3c9dcc11bf3c89bf3bb85
Parents: b47bdae 826cf5c
Author: Guillaume Nodet <gn...@gmail.com>
Authored: Fri Sep 29 09:08:35 2017 +0200
Committer: Guillaume Nodet <gn...@gmail.com>
Committed: Fri Sep 29 09:08:35 2017 +0200
----------------------------------------------------------------------
.../java/org/apache/karaf/features/internal/model/Feature.java | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
----------------------------------------------------------------------
[9/9] karaf git commit: Use List.sort
Posted by gn...@apache.org.
Use List.sort
Project: http://git-wip-us.apache.org/repos/asf/karaf/repo
Commit: http://git-wip-us.apache.org/repos/asf/karaf/commit/69695c8b
Tree: http://git-wip-us.apache.org/repos/asf/karaf/tree/69695c8b
Diff: http://git-wip-us.apache.org/repos/asf/karaf/diff/69695c8b
Branch: refs/heads/master
Commit: 69695c8bc48b862c916736b18d4755a727197f88
Parents: 1614ea7
Author: Guillaume Nodet <gn...@gmail.com>
Authored: Fri Sep 29 09:06:53 2017 +0200
Committer: Guillaume Nodet <gn...@gmail.com>
Committed: Fri Sep 29 09:08:59 2017 +0200
----------------------------------------------------------------------
.../java/org/apache/karaf/features/internal/service/Deployer.java | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/karaf/blob/69695c8b/features/core/src/main/java/org/apache/karaf/features/internal/service/Deployer.java
----------------------------------------------------------------------
diff --git a/features/core/src/main/java/org/apache/karaf/features/internal/service/Deployer.java b/features/core/src/main/java/org/apache/karaf/features/internal/service/Deployer.java
index e2c3522..6e2f729 100644
--- a/features/core/src/main/java/org/apache/karaf/features/internal/service/Deployer.java
+++ b/features/core/src/main/java/org/apache/karaf/features/internal/service/Deployer.java
@@ -1297,7 +1297,7 @@ public class Deployer {
deployment.toInstall.add(resource);
}
}
- Collections.sort(deployment.toInstall, new ResourceComparator());
+ deployment.toInstall.sort(new ResourceComparator());
// Add this region if there is something to do
if (!deployment.toDelete.isEmpty()
[6/9] karaf git commit: Merge remote-tracking branch
'rovarga/dup-objects' into master2
Posted by gn...@apache.org.
Merge remote-tracking branch 'rovarga/dup-objects' into master2
Project: http://git-wip-us.apache.org/repos/asf/karaf/repo
Commit: http://git-wip-us.apache.org/repos/asf/karaf/commit/b47bdaea
Tree: http://git-wip-us.apache.org/repos/asf/karaf/tree/b47bdaea
Diff: http://git-wip-us.apache.org/repos/asf/karaf/diff/b47bdaea
Branch: refs/heads/master
Commit: b47bdaead292209eae63f8f321d38aa9185ac950
Parents: a3cb3a0 36f7c47
Author: Guillaume Nodet <gn...@gmail.com>
Authored: Fri Sep 29 09:08:29 2017 +0200
Committer: Guillaume Nodet <gn...@gmail.com>
Committed: Fri Sep 29 09:08:29 2017 +0200
----------------------------------------------------------------------
.../internal/region/SubsystemResolver.java | 33 +++---
.../internal/repository/BaseRepository.java | 2 +-
.../internal/resolver/ResourceBuilder.java | 31 +++---
.../internal/resolver/SimpleFilter.java | 103 ++++++++++---------
.../internal/service/RequirementSort.java | 2 +-
5 files changed, 92 insertions(+), 79 deletions(-)
----------------------------------------------------------------------
[8/9] karaf git commit: Minimize memory used by capabilities /
requirements in LinkedHashMap
Posted by gn...@apache.org.
Minimize memory used by capabilities / requirements in LinkedHashMap
Project: http://git-wip-us.apache.org/repos/asf/karaf/repo
Commit: http://git-wip-us.apache.org/repos/asf/karaf/commit/1614ea78
Tree: http://git-wip-us.apache.org/repos/asf/karaf/tree/1614ea78
Diff: http://git-wip-us.apache.org/repos/asf/karaf/diff/1614ea78
Branch: refs/heads/master
Commit: 1614ea780d71eb6d0e6870c2a1a3d117c4466cc8
Parents: 1411e3c
Author: Guillaume Nodet <gn...@gmail.com>
Authored: Fri Sep 29 09:06:15 2017 +0200
Committer: Guillaume Nodet <gn...@gmail.com>
Committed: Fri Sep 29 09:08:52 2017 +0200
----------------------------------------------------------------------
.../karaf/features/internal/resolver/ResourceBuilder.java | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/karaf/blob/1614ea78/features/core/src/main/java/org/apache/karaf/features/internal/resolver/ResourceBuilder.java
----------------------------------------------------------------------
diff --git a/features/core/src/main/java/org/apache/karaf/features/internal/resolver/ResourceBuilder.java b/features/core/src/main/java/org/apache/karaf/features/internal/resolver/ResourceBuilder.java
index b502b4e..afb05a1 100644
--- a/features/core/src/main/java/org/apache/karaf/features/internal/resolver/ResourceBuilder.java
+++ b/features/core/src/main/java/org/apache/karaf/features/internal/resolver/ResourceBuilder.java
@@ -355,7 +355,7 @@ public final class ResourceBuilder {
String multiple = clause.dirs.get("multiple");
String avail = clause.dirs.get("availability");
String filter = (String) clause.attrs.get("filter");
- Map<String, String> dirs = new LinkedHashMap<>();
+ Map<String, String> dirs = new LinkedHashMap<>(2);
dirs.put(ServiceNamespace.REQUIREMENT_EFFECTIVE_DIRECTIVE, ServiceNamespace.EFFECTIVE_ACTIVE);
if ("optional".equals(avail)) {
dirs.put(ServiceNamespace.REQUIREMENT_RESOLUTION_DIRECTIVE, ServiceNamespace.RESOLUTION_OPTIONAL);
@@ -1197,8 +1197,8 @@ public final class ResourceBuilder {
static class ParsedHeaderClause {
public final List<String> paths = new ArrayList<>();
- public final Map<String, String> dirs = new LinkedHashMap<>();
- public final Map<String, Object> attrs = new LinkedHashMap<>();
- public final Map<String, String> types = new LinkedHashMap<>();
+ public final Map<String, String> dirs = new LinkedHashMap<>(1);
+ public final Map<String, Object> attrs = new LinkedHashMap<>(1);
+ public final Map<String, String> types = new LinkedHashMap<>(1);
}
}
[5/9] karaf git commit: Turn Feature.VERSION_SEPARATOR into a char
Posted by gn...@apache.org.
Turn Feature.VERSION_SEPARATOR into a char
String.indexOf(char) is faster than String.indexOf(String), so use
char for VERSION_SEPARATOR.
Signed-off-by: Robert Varga <ni...@hq.sk>
Project: http://git-wip-us.apache.org/repos/asf/karaf/repo
Commit: http://git-wip-us.apache.org/repos/asf/karaf/commit/826cf5c2
Tree: http://git-wip-us.apache.org/repos/asf/karaf/tree/826cf5c2
Diff: http://git-wip-us.apache.org/repos/asf/karaf/diff/826cf5c2
Branch: refs/heads/master
Commit: 826cf5c205009a8e2b88fba9b43ea67623bdb802
Parents: 8228021
Author: Robert Varga <ni...@hq.sk>
Authored: Mon Sep 25 11:54:31 2017 +0200
Committer: Robert Varga <ni...@hq.sk>
Committed: Wed Sep 27 10:43:57 2017 +0200
----------------------------------------------------------------------
.../java/org/apache/karaf/features/internal/model/Feature.java | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/karaf/blob/826cf5c2/features/core/src/main/java/org/apache/karaf/features/internal/model/Feature.java
----------------------------------------------------------------------
diff --git a/features/core/src/main/java/org/apache/karaf/features/internal/model/Feature.java b/features/core/src/main/java/org/apache/karaf/features/internal/model/Feature.java
index 9e838e6..54a739b 100644
--- a/features/core/src/main/java/org/apache/karaf/features/internal/model/Feature.java
+++ b/features/core/src/main/java/org/apache/karaf/features/internal/model/Feature.java
@@ -78,7 +78,7 @@ import org.apache.felix.utils.version.VersionCleaner;
})
public class Feature extends Content implements org.apache.karaf.features.Feature {
- public static final String VERSION_SEPARATOR = "/";
+ public static final char VERSION_SEPARATOR = '/';
public static final String DEFAULT_VERSION = "0.0.0";
@XmlElement(name = "details", namespace=org.apache.karaf.features.FeaturesNamespaces.URI_CURRENT)
@@ -130,7 +130,7 @@ public class Feature extends Content implements org.apache.karaf.features.Featur
int idx = str.indexOf(VERSION_SEPARATOR);
if (idx >= 0) {
String strName = str.substring(0, idx);
- String strVersion = str.substring(idx + VERSION_SEPARATOR.length(), str.length());
+ String strVersion = str.substring(idx + 1, str.length());
return new Feature(strName, strVersion);
} else {
return new Feature(str);
[2/9] karaf git commit: Deduplicate common OSGi filter strings
Posted by gn...@apache.org.
Deduplicate common OSGi filter strings
Based on a heap dump with a large number of features/bundles,
5 strings have a large number of duplicates -- ~48K duplicate strings,
wasting ~1.9MiB of memory.
Create a small interning Map, which can normalize these, squashing
a number of these duplicates.
Signed-off-by: Robert Varga <ni...@hq.sk>
Project: http://git-wip-us.apache.org/repos/asf/karaf/repo
Commit: http://git-wip-us.apache.org/repos/asf/karaf/commit/c68e8c6e
Tree: http://git-wip-us.apache.org/repos/asf/karaf/tree/c68e8c6e
Diff: http://git-wip-us.apache.org/repos/asf/karaf/diff/c68e8c6e
Branch: refs/heads/master
Commit: c68e8c6e022d38b2d9fe293a4cb365eb6ffc96ca
Parents: 8fc4d28
Author: Robert Varga <ni...@hq.sk>
Authored: Tue Sep 26 17:20:10 2017 +0200
Committer: Robert Varga <ni...@hq.sk>
Committed: Wed Sep 27 09:55:03 2017 +0200
----------------------------------------------------------------------
.../internal/resolver/SimpleFilter.java | 23 +++++++++++++++++++-
1 file changed, 22 insertions(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/karaf/blob/c68e8c6e/features/core/src/main/java/org/apache/karaf/features/internal/resolver/SimpleFilter.java
----------------------------------------------------------------------
diff --git a/features/core/src/main/java/org/apache/karaf/features/internal/resolver/SimpleFilter.java b/features/core/src/main/java/org/apache/karaf/features/internal/resolver/SimpleFilter.java
index 3464a4e..117734e 100644
--- a/features/core/src/main/java/org/apache/karaf/features/internal/resolver/SimpleFilter.java
+++ b/features/core/src/main/java/org/apache/karaf/features/internal/resolver/SimpleFilter.java
@@ -19,10 +19,12 @@ package org.apache.karaf.features.internal.resolver;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Deque;
+import java.util.HashSet;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
+import java.util.Set;
import org.apache.felix.utils.version.VersionRange;
@@ -38,12 +40,27 @@ public class SimpleFilter {
public static final int PRESENT = 8;
public static final int APPROX = 9;
+ /**
+ * Strings which are commonly found in filter specification. We use this map as an interner.
+ */
+ private static final Set<String> COMMON_STRINGS;
+
+ static {
+ Set<String> s = new HashSet<>(8);
+ s.add("optional");
+ s.add("osgi.ee");
+ s.add("resolution");
+ s.add("uses");
+ s.add("version");
+ COMMON_STRINGS = s;
+ }
+
private final String name;
private final Object value;
private final int op;
public SimpleFilter(String name, Object value, int op) {
- this.name = name;
+ this.name = internIfCommon(name);
this.value = value;
this.op = op;
}
@@ -125,6 +142,10 @@ public class SimpleFilter {
}
}
+ private static String internIfCommon(String str) {
+ return str != null && COMMON_STRINGS.contains(str) ? str.intern() : str;
+ }
+
private static void toString(StringBuilder sb, List<?> list) {
for (Object o : list) {
SimpleFilter sf = (SimpleFilter) o;
[3/9] karaf git commit: Clean SimpleFilter up
Posted by gn...@apache.org.
Clean SimpleFilter up
Profiling OpenDaylight SFT has turned up large memory usage when
a lot of features are created. Some of the memory wasted is in
over-allocated ArrayLists, which are using default pre-allocation
size.
This patch uses Collections.singletonList() to hold NOT operation
arguments and reduces pre-allocation for other compound operations
to 2.
Signed-off-by: Robert Varga <ni...@hq.sk>
Project: http://git-wip-us.apache.org/repos/asf/karaf/repo
Commit: http://git-wip-us.apache.org/repos/asf/karaf/commit/8fc4d282
Tree: http://git-wip-us.apache.org/repos/asf/karaf/tree/8fc4d282
Diff: http://git-wip-us.apache.org/repos/asf/karaf/diff/8fc4d282
Branch: refs/heads/master
Commit: 8fc4d28219c729e09d295313a270c9e34330ee0b
Parents: 2a67918
Author: Robert Varga <ni...@hq.sk>
Authored: Tue Sep 26 16:40:38 2017 +0200
Committer: Robert Varga <ni...@hq.sk>
Committed: Wed Sep 27 09:55:03 2017 +0200
----------------------------------------------------------------------
.../internal/resolver/SimpleFilter.java | 59 +++++++++-----------
1 file changed, 25 insertions(+), 34 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/karaf/blob/8fc4d282/features/core/src/main/java/org/apache/karaf/features/internal/resolver/SimpleFilter.java
----------------------------------------------------------------------
diff --git a/features/core/src/main/java/org/apache/karaf/features/internal/resolver/SimpleFilter.java b/features/core/src/main/java/org/apache/karaf/features/internal/resolver/SimpleFilter.java
index 70084ab..3464a4e 100644
--- a/features/core/src/main/java/org/apache/karaf/features/internal/resolver/SimpleFilter.java
+++ b/features/core/src/main/java/org/apache/karaf/features/internal/resolver/SimpleFilter.java
@@ -17,6 +17,7 @@
package org.apache.karaf.features.internal.resolver;
import java.util.ArrayList;
+import java.util.Collections;
import java.util.Deque;
import java.util.LinkedList;
import java.util.List;
@@ -25,7 +26,6 @@ import java.util.Map.Entry;
import org.apache.felix.utils.version.VersionRange;
-@SuppressWarnings("rawtypes")
public class SimpleFilter {
public static final int MATCH_ALL = 0;
public static final int AND = 1;
@@ -60,30 +60,29 @@ public class SimpleFilter {
return op;
}
+ @Override
public String toString() {
StringBuilder sb = new StringBuilder();
toString(sb);
return sb.toString();
}
- @SuppressWarnings("unchecked")
- private void toString(StringBuilder sb)
- {
+ private void toString(StringBuilder sb) {
switch (op)
{
case AND:
sb.append("(&");
- toString(sb, (List) value);
+ toString(sb, (List<?>) value);
sb.append(")");
break;
case OR:
sb.append("(|");
- toString(sb, (List) value);
+ toString(sb, (List<?>) value);
sb.append(")");
break;
case NOT:
sb.append("(!");
- toString(sb, (List) value);
+ toString(sb, (List<?>) value);
sb.append(")");
break;
case EQ:
@@ -109,7 +108,7 @@ public class SimpleFilter {
break;
case SUBSTRING:
sb.append("(").append(name).append("=");
- unparseSubstring(sb, (List) value);
+ unparseSubstring(sb, (List<?>) value);
sb.append(")");
break;
case PRESENT:
@@ -126,7 +125,7 @@ public class SimpleFilter {
}
}
- private static void toString(StringBuilder sb, List list) {
+ private static void toString(StringBuilder sb, List<?> list) {
for (Object o : list) {
SimpleFilter sf = (SimpleFilter) o;
sf.toString(sb);
@@ -195,7 +194,7 @@ public class SimpleFilter {
int peek = skipWhitespace(filter, idx + 1);
if (filter.charAt(peek) == '(') {
idx = peek - 1;
- stack.addFirst(new SimpleFilter(null, new ArrayList(), SimpleFilter.AND));
+ stack.addFirst(new SimpleFilter(null, new ArrayList<>(2), SimpleFilter.AND));
} else {
stack.addFirst(idx);
}
@@ -203,7 +202,7 @@ public class SimpleFilter {
int peek = skipWhitespace(filter, idx + 1);
if (filter.charAt(peek) == '(') {
idx = peek - 1;
- stack.addFirst(new SimpleFilter(null, new ArrayList(), SimpleFilter.OR));
+ stack.addFirst(new SimpleFilter(null, new ArrayList<>(2), SimpleFilter.OR));
} else {
stack.addFirst(idx);
}
@@ -211,7 +210,7 @@ public class SimpleFilter {
int peek = skipWhitespace(filter, idx + 1);
if (filter.charAt(peek) == '(') {
idx = peek - 1;
- stack.addFirst(new SimpleFilter(null, new ArrayList(), SimpleFilter.NOT));
+ stack.addFirst(new SimpleFilter(null, new ArrayList<>(1), SimpleFilter.NOT));
} else {
stack.addFirst(idx);
}
@@ -248,13 +247,11 @@ public class SimpleFilter {
}
private static SimpleFilter subfilter(String filter, int startIdx, int endIdx) {
- final String opChars = "=<>~";
-
// Determine the ending index of the attribute name.
int attrEndIdx = startIdx;
for (int i = 0; i < (endIdx - startIdx); i++) {
char c = filter.charAt(startIdx + i);
- if (opChars.indexOf(c) >= 0) {
+ if ("=<>~".indexOf(c) >= 0) {
break;
} else if (!Character.isWhitespace(c)) {
attrEndIdx = startIdx + i + 1;
@@ -327,7 +324,6 @@ public class SimpleFilter {
}
public static List<String> parseSubstring(String value) {
- List<String> pieces = new ArrayList<>();
int length = value.length();
boolean isSimple = true;
@@ -339,8 +335,7 @@ public class SimpleFilter {
}
}
if (isSimple) {
- pieces.add(value);
- return pieces;
+ return Collections.singletonList(value);
}
StringBuilder ss = new StringBuilder();
@@ -352,6 +347,7 @@ public class SimpleFilter {
int idx = 0;
// We assume (sub)strings can contain leading and trailing blanks
+ List<String> pieces = new ArrayList<>(2);
boolean escaped = false;
for (;;) {
if (idx >= length) {
@@ -406,7 +402,7 @@ public class SimpleFilter {
return pieces;
}
- public static void unparseSubstring(StringBuilder sb, List<String> pieces) {
+ public static void unparseSubstring(StringBuilder sb, List<?> pieces) {
for (int i = 0; i < pieces.size(); i++) {
if (i > 0) {
sb.append("*");
@@ -491,7 +487,6 @@ public class SimpleFilter {
* @param attrs Map of attributes to convert to a filter.
* @return A filter corresponding to the attributes.
*/
- @SuppressWarnings("unchecked")
public static SimpleFilter convert(Map<String, Object> attrs) {
// Rather than building a filter string to be parsed into a SimpleFilter,
// we will just create the parsed SimpleFilter directly.
@@ -509,14 +504,12 @@ public class SimpleFilter {
SimpleFilter.GTE)
);
} else {
+ SimpleFilter val = new SimpleFilter(
+ entry.getKey(),
+ vr.getFloor().toString(),
+ SimpleFilter.LTE);
SimpleFilter not =
- new SimpleFilter(null, new ArrayList(), SimpleFilter.NOT);
- ((List<Object>) not.getValue()).add(
- new SimpleFilter(
- entry.getKey(),
- vr.getFloor().toString(),
- SimpleFilter.LTE)
- );
+ new SimpleFilter(null, Collections.singletonList(val), SimpleFilter.NOT);
filters.add(not);
}
@@ -529,14 +522,12 @@ public class SimpleFilter {
SimpleFilter.LTE)
);
} else if (!vr.getCeiling().equals(VersionRange.INFINITE_VERSION)) {
+ SimpleFilter val = new SimpleFilter(
+ entry.getKey(),
+ vr.getCeiling().toString(),
+ SimpleFilter.GTE);
SimpleFilter not =
- new SimpleFilter(null, new ArrayList(), SimpleFilter.NOT);
- ((List<Object>) not.getValue()).add(
- new SimpleFilter(
- entry.getKey(),
- vr.getCeiling().toString(),
- SimpleFilter.GTE)
- );
+ new SimpleFilter(null, Collections.singletonList(val), SimpleFilter.NOT);
filters.add(not);
}
}
[4/9] karaf git commit: Improve ResourceBuilder's use of maps
Posted by gn...@apache.org.
Improve ResourceBuilder's use of maps
Do not instatiate an empty HashMap where Collections.emptyMap()
does the same. Also reuse default directives map, now backed by
a Collections.singletonMap().
Signed-off-by: Robert Varga <ni...@hq.sk>
Project: http://git-wip-us.apache.org/repos/asf/karaf/repo
Commit: http://git-wip-us.apache.org/repos/asf/karaf/commit/2a679182
Tree: http://git-wip-us.apache.org/repos/asf/karaf/tree/2a679182
Diff: http://git-wip-us.apache.org/repos/asf/karaf/diff/2a679182
Branch: refs/heads/master
Commit: 2a679182e6e3ef1bad2b953c8aa5c82d905331a2
Parents: 8228021
Author: Robert Varga <ni...@hq.sk>
Authored: Tue Sep 26 17:54:02 2017 +0200
Committer: Robert Varga <ni...@hq.sk>
Committed: Wed Sep 27 09:55:03 2017 +0200
----------------------------------------------------------------------
.../internal/resolver/ResourceBuilder.java | 31 ++++++++++----------
1 file changed, 16 insertions(+), 15 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/karaf/blob/2a679182/features/core/src/main/java/org/apache/karaf/features/internal/resolver/ResourceBuilder.java
----------------------------------------------------------------------
diff --git a/features/core/src/main/java/org/apache/karaf/features/internal/resolver/ResourceBuilder.java b/features/core/src/main/java/org/apache/karaf/features/internal/resolver/ResourceBuilder.java
index c524009..b502b4e 100644
--- a/features/core/src/main/java/org/apache/karaf/features/internal/resolver/ResourceBuilder.java
+++ b/features/core/src/main/java/org/apache/karaf/features/internal/resolver/ResourceBuilder.java
@@ -58,6 +58,8 @@ public final class ResourceBuilder {
private static final int STARTQUOTE = 4;
private static final int ENDQUOTE = 8;
+ private static final Map<String, String> DEFAULT_DIRECTIVES = Collections.singletonMap(ServiceNamespace.CAPABILITY_EFFECTIVE_DIRECTIVE, ServiceNamespace.EFFECTIVE_ACTIVE);
+
private ResourceBuilder() {
}
@@ -111,18 +113,16 @@ public final class ResourceBuilder {
// Now that we have symbolic name and version, create the resource
String type = headerMap.get(Constants.FRAGMENT_HOST) == null ? IdentityNamespace.TYPE_BUNDLE : IdentityNamespace.TYPE_FRAGMENT;
{
- Map<String, String> dirs = new HashMap<>();
- Map<String, Object> attrs = new HashMap<>();
+ Map<String, Object> attrs = new HashMap<>(4);
attrs.put(IdentityNamespace.IDENTITY_NAMESPACE, bundleSymbolicName);
attrs.put(IdentityNamespace.CAPABILITY_TYPE_ATTRIBUTE, type);
attrs.put(IdentityNamespace.CAPABILITY_VERSION_ATTRIBUTE, bundleVersion);
- CapabilityImpl identity = new CapabilityImpl(resource, IdentityNamespace.IDENTITY_NAMESPACE, dirs, attrs);
+ CapabilityImpl identity = new CapabilityImpl(resource, IdentityNamespace.IDENTITY_NAMESPACE, Collections.emptyMap(), attrs);
resource.addCapability(identity);
}
if (uri != null) {
- Map<String, Object> attrs = new HashMap<>();
- attrs.put(ContentNamespace.CAPABILITY_URL_ATTRIBUTE, uri);
- resource.addCapability(new CapabilityImpl(resource, ContentNamespace.CONTENT_NAMESPACE, Collections.emptyMap(), attrs));
+ resource.addCapability(new CapabilityImpl(resource, ContentNamespace.CONTENT_NAMESPACE, Collections.emptyMap(),
+ Collections.singletonMap(ContentNamespace.CAPABILITY_URL_ATTRIBUTE, uri)));
}
// Add a bundle and host capability to all
@@ -244,7 +244,7 @@ public final class ResourceBuilder {
}
}
}
-
+
// Combine all capabilities.
resource.addCapabilities(exportCaps);
resource.addCapabilities(provideCaps);
@@ -334,15 +334,13 @@ public final class ResourceBuilder {
List<Capability> capList = new ArrayList<>();
for (ParsedHeaderClause clause : clauses) {
for (String path : clause.paths) {
- Map<String, String> dirs = new LinkedHashMap<>();
- dirs.put(ServiceNamespace.CAPABILITY_EFFECTIVE_DIRECTIVE, ServiceNamespace.EFFECTIVE_ACTIVE);
Map<String, Object> attrs = new LinkedHashMap<>();
attrs.put(Constants.OBJECTCLASS, path);
attrs.putAll(clause.attrs);
capList.add(new CapabilityImpl(
resource,
ServiceNamespace.SERVICE_NAMESPACE,
- dirs,
+ DEFAULT_DIRECTIVES,
attrs));
}
}
@@ -899,16 +897,18 @@ public final class ResourceBuilder {
}
String nameClause;
- if (rName != null)
+ if (rName != null) {
nameClause = "(" + ExecutionEnvironmentNamespace.EXECUTION_ENVIRONMENT_NAMESPACE + "=" + lName + "/" + rName + ")";
- else
+ } else {
nameClause = "(" + ExecutionEnvironmentNamespace.EXECUTION_ENVIRONMENT_NAMESPACE + "=" + lName + ")";
+ }
String filter;
- if (versionClause != null)
+ if (versionClause != null) {
filter = "(&" + nameClause + versionClause + ")";
- else
+ } else {
filter = nameClause;
+ }
filters.add(filter);
}
@@ -940,8 +940,9 @@ public final class ResourceBuilder {
}
private static String getBreeVersionClause(Version ver) {
- if (ver == null)
+ if (ver == null) {
return null;
+ }
return "(" + ExecutionEnvironmentNamespace.CAPABILITY_VERSION_ATTRIBUTE + "=" + ver + ")";
}