Skip to content

Commit

Permalink
feature CtQuery#filterChildren(null)
Browse files Browse the repository at this point in the history
  • Loading branch information
pvojtechovsky committed Jan 20, 2017
1 parent 892e129 commit 47f90e7
Show file tree
Hide file tree
Showing 2 changed files with 30 additions and 6 deletions.
14 changes: 8 additions & 6 deletions src/main/java/spoon/reflect/visitor/chain/CtQueryImpl.java
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
22 changes: 22 additions & 0 deletions src/test/java/spoon/test/filters/FilterTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Iterator;
import java.util.List;
import java.util.TreeSet;

Expand Down Expand Up @@ -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<CtElement> list = launcher.getFactory().Package().getRootPackage().filterChildren(null).list();
Iterator<CtElement> 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();
Expand Down

0 comments on commit 47f90e7

Please sign in to comment.