1   package test.net.sourceforge.pmd.ast;
2   
3   import net.sourceforge.pmd.ast.ASTAnnotation;
4   import net.sourceforge.pmd.ast.ASTAnnotationTypeDeclaration;
5   import net.sourceforge.pmd.ast.ASTClassOrInterfaceDeclaration;
6   import net.sourceforge.pmd.ast.ASTCompilationUnit;
7   import net.sourceforge.pmd.ast.ASTEqualityExpression;
8   import net.sourceforge.pmd.ast.ASTInstanceOfExpression;
9   import net.sourceforge.pmd.ast.ASTModifiers;
10  import net.sourceforge.pmd.ast.ASTRelationalExpression;
11  import net.sourceforge.pmd.ast.ASTTypeDeclaration;
12  import net.sourceforge.pmd.ast.DiscardableNodeCleaner;
13  import test.net.sourceforge.pmd.testframework.ParserTst;
14  
15  public class DiscardableNodeCleanerTest extends ParserTst {
16  
17      public void testRemoveDiscardNodes() throws Throwable {
18          ASTCompilationUnit cu = new ASTCompilationUnit(1);
19          ASTEqualityExpression ee = new ASTEqualityExpression(2);
20          ee.jjtSetParent(cu);
21          cu.jjtAddChild(ee, 0);
22          ASTInstanceOfExpression io1 = new ASTInstanceOfExpression(3);
23          io1.setDiscardable();
24          io1.jjtSetParent(ee);
25          ASTRelationalExpression re = new ASTRelationalExpression(4);
26          re.jjtSetParent(ee);
27          ee.jjtAddChild(io1, 0);
28          io1.jjtAddChild(re, 0);
29          assertEquals(cu.findChildrenOfType(ASTInstanceOfExpression.class).size(), 1);
30          DiscardableNodeCleaner c = new DiscardableNodeCleaner();
31          c.clean(cu);
32          assertEquals(cu.findChildrenOfType(ASTInstanceOfExpression.class).size(), 0);
33      }
34  
35      public void testRemoveModifierNodesWithClass() throws Throwable {
36          ASTCompilationUnit cu = new ASTCompilationUnit(1);
37          ASTTypeDeclaration td = new ASTTypeDeclaration(2);
38          td.jjtSetParent(cu);
39          cu.jjtAddChild(td, 0);
40          ASTModifiers m = new ASTModifiers(3);
41          m.setDiscardable();
42          m.jjtSetParent(td);
43          td.jjtAddChild(m, 0);
44          ASTClassOrInterfaceDeclaration cd = new ASTClassOrInterfaceDeclaration(4);
45          cd.jjtSetParent(td);
46          td.jjtAddChild(cd, 1);
47          assertEquals(cu.findChildrenOfType(ASTModifiers.class).size(), 1);
48          DiscardableNodeCleaner c = new DiscardableNodeCleaner();
49          c.clean(cu);
50          assertTrue(cu.findChildrenOfType(ASTModifiers.class).isEmpty());
51      }
52  
53      public void testRemoveModifierNodesWithAnnotation() throws Throwable {
54          ASTCompilationUnit cu = new ASTCompilationUnit(1);
55          ASTTypeDeclaration td = new ASTTypeDeclaration(2);
56          td.jjtSetParent(cu);
57          cu.jjtAddChild(td, 0);
58          ASTAnnotationTypeDeclaration atd = new ASTAnnotationTypeDeclaration(5);
59          atd.jjtSetParent(td);
60          td.jjtAddChild(atd, 0);
61          ASTModifiers m = new ASTModifiers(3);
62          m.setDiscardable();
63          m.jjtSetParent(td);
64          td.jjtAddChild(m, 1);
65          ASTAnnotation ann = new ASTAnnotation(4);
66          ann.jjtSetParent(m);
67          m.jjtAddChild(ann, 0);
68          assertEquals(cu.findChildrenOfType(ASTModifiers.class).size(), 1);
69          DiscardableNodeCleaner c = new DiscardableNodeCleaner();
70          c.clean(cu);
71          assertTrue(cu.findChildrenOfType(ASTModifiers.class).isEmpty());
72         assertFalse(cu.findChildrenOfType(ASTAnnotation.class).isEmpty());
73      }
74  
75  }