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;