1 4 package test.net.sourceforge.pmd.symboltable; 5 6 import net.sourceforge.pmd.PMD; 7 import net.sourceforge.pmd.ast.ASTFormalParameter; 8 import net.sourceforge.pmd.ast.ASTLocalVariableDeclaration; 9 import net.sourceforge.pmd.ast.ASTName; 10 import net.sourceforge.pmd.ast.ASTPrimaryPrefix; 11 import net.sourceforge.pmd.ast.ASTVariableDeclaratorId; 12 import net.sourceforge.pmd.symboltable.LocalScope; 13 import net.sourceforge.pmd.symboltable.MethodScope; 14 import net.sourceforge.pmd.symboltable.NameDeclaration; 15 import net.sourceforge.pmd.symboltable.NameOccurrence; 16 import net.sourceforge.pmd.symboltable.VariableNameDeclaration; 17 18 import java.util.List ; 19 import java.util.Map ; 20 21 public class LocalScopeTest extends STBBaseTst { 22 23 public void testNameWithThisOrSuperIsNotFlaggedAsUnused() { 24 LocalScope scope = new LocalScope(); 25 ASTName name = new ASTName(1); 26 name.setImage("foo"); 27 ASTPrimaryPrefix prefix = new ASTPrimaryPrefix(2); 28 prefix.setUsesThisModifier(); 29 name.jjtAddChild(prefix, 1); 30 NameOccurrence occ = new NameOccurrence(name, "foo"); 31 scope.addVariableNameOccurrence(occ); 32 assertFalse(scope.getVariableDeclarations().keySet().iterator().hasNext()); 33 } 34 35 public void testNameWithSuperIsNotFlaggedAsUnused() { 36 LocalScope scope = new LocalScope(); 37 ASTName name = new ASTName(1); 38 name.setImage("foo"); 39 ASTPrimaryPrefix prefix = new ASTPrimaryPrefix(2); 40 prefix.setUsesSuperModifier(); 41 name.jjtAddChild(prefix, 1); 42 NameOccurrence occ = new NameOccurrence(name, "foo"); 43 scope.addVariableNameOccurrence(occ); 44 assertFalse(scope.getVariableDeclarations().keySet().iterator().hasNext()); 45 } 46 47 public void testLocalVariableDeclarationFound() { 48 parseCode(TEST1); 49 List nodes = acu.findChildrenOfType(ASTVariableDeclaratorId.class); 50 ASTVariableDeclaratorId node = (ASTVariableDeclaratorId) nodes.get(0); 51 Map vars = node.getScope().getVariableDeclarations(); 52 assertEquals(1, vars.size()); 53 NameDeclaration decl = (NameDeclaration) vars.keySet().iterator().next(); 54 assertEquals("b", decl.getImage()); 55 } 56 57 public void testQualifiedNameOccurrence() { 58 parseCode(TEST2); 59 List nodes = acu.findChildrenOfType(ASTVariableDeclaratorId.class); 60 ASTVariableDeclaratorId node = (ASTVariableDeclaratorId) nodes.get(0); 61 Map vars = node.getScope().getVariableDeclarations(); 62 NameDeclaration decl = (NameDeclaration) vars.keySet().iterator().next(); 63 NameOccurrence occ = (NameOccurrence) ((List ) vars.get(decl)).get(0); 64 assertEquals("b", occ.getImage()); 65 } 66 67 public void testPostfixUsageIsRecorded() { 68 parseCode(TEST3); 69 List nodes = acu.findChildrenOfType(ASTVariableDeclaratorId.class); 70 ASTVariableDeclaratorId node = (ASTVariableDeclaratorId) nodes.get(0); 71 Map vars = node.getScope().getVariableDeclarations(); 72 NameDeclaration decl = (NameDeclaration) vars.keySet().iterator().next(); 73 List usages = (List ) vars.get(decl); 74 NameOccurrence occ = (NameOccurrence) usages.get(0); 75 assertEquals(4, occ.getLocation().getBeginLine()); 76 } 77 78 public void testLocalVariableTypesAreRecorded() { 79 parseCode(TEST1); 80 List nodes = acu.findChildrenOfType(ASTVariableDeclaratorId.class); 81 Map vars = ((ASTVariableDeclaratorId) nodes.get(0)).getScope().getVariableDeclarations(); 82 VariableNameDeclaration decl = (VariableNameDeclaration) vars.keySet().iterator().next(); 83 assertEquals("Bar", decl.getTypeImage()); 84 } 85 86 public void testMethodArgumentTypesAreRecorded() { 87 parseCode(TEST5); 88 List nodes = acu.findChildrenOfType(ASTFormalParameter.class); 89 Map vars = ((ASTFormalParameter) nodes.get(0)).getScope().getVariableDeclarations(); 90 VariableNameDeclaration decl = (VariableNameDeclaration) vars.keySet().iterator().next(); 91 assertEquals("String", decl.getTypeImage()); 92 } 93 94 public void testgetEnclosingMethodScope() { 95 parseCode(TEST4); 96 ASTLocalVariableDeclaration node = (ASTLocalVariableDeclaration) acu.findChildrenOfType(ASTLocalVariableDeclaration.class).get(0); 97 LocalScope scope = (LocalScope) node.getScope(); 98 MethodScope ms = scope.getEnclosingMethodScope(); 99 assertEquals(2, ms.getVariableDeclarations().size()); 100 } 101 102 103 public static final String TEST1 = 104 "public class Foo {" + PMD.EOL + 105 " void foo() {" + PMD.EOL + 106 " Bar b = new Bar();" + PMD.EOL + 107 " }" + PMD.EOL + 108 "}"; 109 110 public static final String TEST2 = 111 "public class Foo {" + PMD.EOL + 112 " void foo() {" + PMD.EOL + 113 " Bar b = new Bar();" + PMD.EOL + 114 " b.buz = 2;" + PMD.EOL + 115 " }" + PMD.EOL + 116 "}"; 117 118 public static final String TEST3 = 119 "public class Foo {" + PMD.EOL + 120 " void foo() {" + PMD.EOL + 121 " int x = 2;" + PMD.EOL + 122 " x++;" + PMD.EOL + 123 " }" + PMD.EOL + 124 "}"; 125 126 public static final String TEST4 = 127 "public class Foo {" + PMD.EOL + 128 " void foo(String x, String z) { int y; }" + PMD.EOL + 129 "}"; 130 131 public static final String TEST5 = 132 "public class Foo {" + PMD.EOL + 133 " void foo(String x);" + PMD.EOL + 134 "}"; 135 136 } 137 | Popular Tags |