001 package javafe.ast; 002 003 import java.util.HashMap; 004 import java.util.Map; 005 006 import javafe.util.Location; 007 008 /** This class is not actually ever an element of an AST. 009 * It derives from ASTNode so that it can use the decoration 010 * capability, hence the abstract methods of ASTNode are 011 * simply implemented with stubs. 012 * 013 * @author David R. Cok 014 */ 015 public class IdentifierNode extends ASTNode { 016 017 //@ non_null 018 final static private Map map = new HashMap(); 019 020 /** The wrapped Identifier */ 021 public Identifier id; 022 023 /** 024 * Creates a IdentifierNode object given an Identifier 025 * @param id The Identifier being wrapped 026 * @return The fresh IdentifierNode 027 */ 028 //@ requires id != null; 029 //@ ensures \result.id == id; 030 //@ ensures \fresh(\result); 031 static public IdentifierNode make(Identifier id) { 032 IdentifierNode t = (IdentifierNode)map.get(id); 033 if (t != null) return t; 034 t = new IdentifierNode(); 035 t.id = id; 036 map.put(id,t); 037 return t; 038 } 039 040 public int getStartLoc() { return Location.NULL; } 041 public int childCount(){ return 0; } 042 public Object childAt(int i) { return null; } 043 public int getTag() { return 0; } 044 public String toString() { return id.toString(); } 045 public void accept(Visitor v) { } 046 public Object accept(VisitorArgResult v, Object o) 047 { return this; } 048 049 }