Docjar: A Java Source and Docuemnt Enginecom.*    java.*    javax.*    org.*    all    new    plug-in

Quick Search    Search Deep

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 }