Mercurial > hg > heapstats
changeset 128:f2da2ff49cbc
Bug 2772: IllegalStateException occurred when exclude filter was set in CLI.
reviewed-by: ykubota
author | Yasumasa Suenaga <yasuenag@gmail.com> |
---|---|
date | Sun, 03 Jan 2016 11:59:37 +0900 |
parents | bb26d5759e96 |
children | 0a9f7bbe5859 |
files | ChangeLog analyzer/cli/src/main/java/jp/co/ntt/oss/heapstats/cli/Options.java |
diffstat | 2 files changed, 15 insertions(+), 9 deletions(-) [+] |
line wrap: on
line diff
--- a/ChangeLog Tue Dec 15 17:43:59 2015 +0900 +++ b/ChangeLog Sun Jan 03 11:59:37 2016 +0900 @@ -1,3 +1,7 @@ +2016-01-03 Yasumasa Suenaga <yasuenag@gmail.com> + + * Bug 2772: IllegalStateException occurred when exclude filter was set in CLI. + 2015-12-14 KUBOTA Yuji <kubota.yuji@lab.ntt.co.jp> * Bug 2771: Fix spec to copy heapstats-cli.jar correctly.
--- a/analyzer/cli/src/main/java/jp/co/ntt/oss/heapstats/cli/Options.java Tue Dec 15 17:43:59 2015 +0900 +++ b/analyzer/cli/src/main/java/jp/co/ntt/oss/heapstats/cli/Options.java Sun Jan 03 11:59:37 2016 +0900 @@ -31,6 +31,7 @@ import java.util.OptionalLong; import java.util.function.Predicate; import java.util.regex.Pattern; +import java.util.stream.Collectors; import javax.management.remote.JMXServiceURL; import javax.xml.bind.JAXB; import jp.co.ntt.oss.heapstats.container.snapshot.ObjectData; @@ -563,20 +564,21 @@ */ public Predicate<? super ObjectData> getFilterPredicate(){ Optional<Predicate<ObjectData>> includePredicate = filter.map(p -> (o -> p.asPredicate().test(o.getName()))); - Optional<Predicate<ObjectData>> excludePredicate = excludeFilterFile.map(f -> ((Filters)JAXB.unmarshal(f.toFile(), Filters.class)).getFilter().stream() - .filter(l -> l != null) - .flatMap(l -> l.getClasses().getName().stream()) - .map(s -> ".*" + s + ".*")) - .map(l -> (o -> l.noneMatch(s -> o.getName().matches(s)))); + List<String> excludeFilterList = excludeFilterFile.map(f -> ((Filters)JAXB.unmarshal(f.toFile(), Filters.class)).getFilter().stream() + .filter(l -> l != null) + .flatMap(l -> l.getClasses().getName().stream()) + .map(s -> ".*" + s + ".*") + .collect(Collectors.toList())) + .orElse(new ArrayList<>()); + Predicate<ObjectData> excludePredicate = o -> excludeFilterList.stream().noneMatch(s -> o.getName().matches(s)); Predicate<? super ObjectData> pred = null; if(includePredicate.isPresent()){ - pred = excludePredicate.map(p -> p.and(includePredicate.get())) - .orElse(includePredicate.get()); + pred = excludeFilterList.isEmpty() ? includePredicate.get() : includePredicate.get().and(excludePredicate); } - else if(excludePredicate.isPresent()){ - pred = excludePredicate.get(); + else if(!excludeFilterList.isEmpty()){ + pred = excludePredicate; } return pred;