Clover coverage report - PMD - 3.7 Coverage timestamp: Wed May 31 2006 09:25:59 EDT FRAMES NO FRAMES |
file stats: | LOC: | 73 |  | Methods: | 8
| NCLOC: | 58 |  | Classes: | 1
Source file | Conditionals | Statements | Methods | TOTAL
MethodScope.java | 70% | 87.5% | 87.5% | 83.3% |

1 |  | /**
2 |  | * BSD-style license; for more info see http://pmd.sourceforge.net/license.html
3 |  | */
4 |  | package net.sourceforge.pmd.symboltable;
5 |  |
6 |  | import net.sourceforge.pmd.ast.ASTConstructorDeclaration;
7 |  | import net.sourceforge.pmd.ast.ASTName;
8 |  | import net.sourceforge.pmd.ast.SimpleNode;
9 |  | import net.sourceforge.pmd.util.Applier;
10 |  |
11 |  | import java.util.ArrayList;
12 |  | import java.util.HashMap;
13 |  | import java.util.List;
14 |  | import java.util.Map;
15 |  |
16 |  | public class MethodScope extends AbstractScope {
17 |  |
18 |  | protected Map variableNames = new HashMap();
19 |  | private SimpleNode node;
20 |  |
21 | 1044 | public MethodScope(SimpleNode node) {
22 | 1044 | this.node = node;
23 |  | }
24 |  |
25 | 315 | public MethodScope getEnclosingMethodScope() {
26 | 315 | return this;
27 |  | }
28 |  |
29 | 109 | public Map getVariableDeclarations() {
30 | 109 | VariableUsageFinderFunction f = new VariableUsageFinderFunction(variableNames);
31 | 109 | Applier.apply(f, variableNames.keySet().iterator());
32 | 109 | return f.getUsed();
33 |  | }
34 |  |
35 | 186 | public NameDeclaration addVariableNameOccurrence(NameOccurrence occurrence) {
36 | 186 | NameDeclaration decl = findVariableHere(occurrence);
37 | 186 | if (decl != null && !occurrence.isThisOrSuper()) {
38 | 186 | ((List) variableNames.get(decl)).add(occurrence);
39 | 186 | SimpleNode n = occurrence.getLocation();
40 | 186 | if (n instanceof ASTName) {
41 | 185 | ((ASTName) n).setNameDeclaration(decl);
42 |  | } // TODO what to do with PrimarySuffix case?
43 |  | }
44 | 186 | return decl;
45 |  | }
46 |  |
47 | 314 | public void addDeclaration(VariableNameDeclaration variableDecl) {
48 | 314 | if (variableNames.containsKey(variableDecl)) {
49 | 0 | throw new RuntimeException("Variable " + variableDecl + " is already in the symbol table");
50 |  | }
51 | 314 | variableNames.put(variableDecl, new ArrayList());
52 |  | }
53 |  |
54 | 1195 | public NameDeclaration findVariableHere(NameOccurrence occurrence) {
55 | 1195 | if (occurrence.isThisOrSuper() || occurrence.isMethodOrConstructorInvocation()) {
56 | 317 | return null;
57 |  | }
58 | 878 | ImageFinderFunction finder = new ImageFinderFunction(occurrence.getImage());
59 | 878 | Applier.apply(finder, variableNames.keySet().iterator());
60 | 878 | return finder.getDecl();
61 |  | }
62 |  |
63 | 315 | public String getName() {
64 | 315 | if (node instanceof ASTConstructorDeclaration) {
65 | 0 | return this.getEnclosingClassScope().getClassName();
66 |  | }
67 | 315 | return ((SimpleNode) node.jjtGetChild(1)).getImage();
68 |  | }
69 |  |
70 | 0 | public String toString() {
71 | 0 | return "MethodScope:" + glomNames(variableNames.keySet().iterator());
72 |  | }
73 |  | }