From 47f90e745f30718162b3ba17970979d361a2c553 Mon Sep 17 00:00:00 2001 From: Pavel Vojtechovsky Date: Fri, 20 Jan 2017 18:49:33 +0100 Subject: [PATCH] feature CtQuery#filterChildren(null) --- .../reflect/visitor/chain/CtQueryImpl.java | 14 +++++++----- .../java/spoon/test/filters/FilterTest.java | 22 +++++++++++++++++++ 2 files changed, 30 insertions(+), 6 deletions(-) diff --git a/src/main/java/spoon/reflect/visitor/chain/CtQueryImpl.java b/src/main/java/spoon/reflect/visitor/chain/CtQueryImpl.java index a68745a28e0..5afaf904689 100644 --- a/src/main/java/spoon/reflect/visitor/chain/CtQueryImpl.java +++ b/src/main/java/spoon/reflect/visitor/chain/CtQueryImpl.java @@ -434,12 +434,14 @@ private void processFilter(CtElement element) { if (element == null) { return; } - boolean matches = false; - try { - matches = filter.matches(element); - } catch (ClassCastException e) { - onClassCastException(next, e, element); - return; + boolean matches = true; + if (filter != null) { + try { + matches = filter.matches(element); + } catch (ClassCastException e) { + onClassCastException(next, e, element); + return; + } } if (matches) { //send input to output, because Fitler.matches returned true diff --git a/src/test/java/spoon/test/filters/FilterTest.java b/src/test/java/spoon/test/filters/FilterTest.java index e535b5c74ed..cd32ee5f84f 100644 --- a/src/test/java/spoon/test/filters/FilterTest.java +++ b/src/test/java/spoon/test/filters/FilterTest.java @@ -11,6 +11,7 @@ import java.util.ArrayList; import java.util.Arrays; +import java.util.Iterator; import java.util.List; import java.util.TreeSet; @@ -534,6 +535,27 @@ class Context { assertTrue(context.count>0); } + @Test + public void testFilterChildrenWithoutFilterQueryStep() throws Exception { + final Launcher launcher = new Launcher(); + launcher.setArgs(new String[] {"--output-type", "nooutput","--level","info" }); + launcher.addInputResource("./src/test/java/spoon/test/filters/testclasses"); + launcher.run(); + + //Contract: the filterChildren(null) without Filter returns same results like filter which returns true for each input. + List list = launcher.getFactory().Package().getRootPackage().filterChildren(null).list(); + Iterator iter = list.iterator(); + launcher.getFactory().Package().getRootPackage().filterChildren(e->{return true;}).forEach(real->{ + //the elements produced by each query are same + CtElement expected = iter.next(); + if(real!=expected) { + assertEquals(expected, real); + } + }); + assertTrue(list.size()>0); + assertTrue(iter.hasNext()==false); + } + @Test public void testFunctionQueryStep() throws Exception { final Launcher launcher = new Launcher();