Source code: com/puppycrawl/tools/checkstyle/checks/usage/transmogrify/Scope.java
1
2 // Transmogrify License
3 //
4 // Copyright (c) 2001, ThoughtWorks, Inc.
5 // All rights reserved.
6 // Redistribution and use in source and binary forms, with or without
7 // modification, are permitted provided that the following conditions
8 // are met:
9 // - Redistributions of source code must retain the above copyright notice,
10 // this list of conditions and the following disclaimer.
11 // - Redistributions in binary form must reproduce the above copyright
12 // notice, this list of conditions and the following disclaimer in the
13 // documentation and/or other materials provided with the distribution.
14 // Neither the name of the ThoughtWorks, Inc. nor the names of its
15 // contributors may be used to endorse or promote products derived from this
16 // software without specific prior written permission.
17 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
18 // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
19 // TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
20 // PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
21 // CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
22 // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
23 // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
24 // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
25 // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
26 // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
27 // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28
29 package com.puppycrawl.tools.checkstyle.checks.usage.transmogrify;
30
31
32
33 import java.util.Enumeration;
34 import java.util.Hashtable;
35 import java.util.Iterator;
36 import java.util.SortedSet;
37 import java.util.TreeSet;
38 import java.util.Vector;
39
40
41 /**
42 * Represents a scope of Java code.
43 *
44 * @author andrew mccormick, dave wood
45 * @version 1.0
46 * @since 1.0
47 * @see Definition
48 * @see Resolvable
49 */
50 public abstract class Scope extends Definition {
51
52 private Vector unresolvedStuff = new Vector();
53
54 // rename to references?
55 protected SortedSet referencesInScope = new TreeSet();
56
57 protected Hashtable elements = new Hashtable();
58 protected Hashtable labels = new Hashtable();
59 protected Hashtable classes = new Hashtable();
60
61 public Scope( String name, Scope parentScope, SymTabAST node ) {
62 super( name, parentScope, node );
63 }
64
65 public void addDefinition(VariableDef def) {
66 elements.put(def.getName(), def);
67 }
68
69 public void addDefinition(BlockDef def) {
70 elements.put(def.getName(), def);
71 }
72
73 public void addDefinition(ClassDef def) {
74 classes.put(def.getName(), def);
75 }
76
77 public void addDefinition(LabelDef def) {
78 labels.put(def.getName(), def);
79 }
80
81 public abstract void addDefinition(IPackage def);
82
83 protected Enumeration getDefinitions() {
84 Vector allElements = new Vector();
85
86 allElements.addAll(elements.values());
87 allElements.addAll(labels.values());
88 allElements.addAll(classes.values());
89
90 return allElements.elements();
91 }
92
93 protected Iterator getClasses() {
94 return classes.values().iterator();
95 }
96
97 public abstract IMethod getMethodDefinition(String name, ISignature signature);
98 public abstract IVariable getVariableDefinition(String name);
99 public abstract LabelDef getLabelDefinition(String name);
100 public abstract IClass getClassDefinition(String name);
101
102 public Iterator getReferencesIn() {
103 return referencesInScope.iterator();
104 }
105
106 public Reference getSymbol(String name, Occurrence location) {
107 Reference result = null;
108
109 for (Iterator it = getReferencesIn(); it.hasNext(); ) {
110 Reference reference = (Reference)it.next();
111 // if (name.equals(reference.getName())) {
112 if (reference.getLine() == location.getLine() &&
113 reference.getColumn() == location.getColumn()) {
114 result = reference;
115 break;
116 }
117 // }
118 }
119 return result;
120 }
121
122 public void addReferenceInScope( Reference reference ) {
123 referencesInScope.add( reference );
124 }
125
126 }