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();