1 package polyglot.types; 2 3 import polyglot.ast.*; 4 import polyglot.util.*; 5 import polyglot.types.Package; 6 7 11 public class PackageContextResolver implements Resolver 12 { 13 protected Package p; 14 protected TypeSystem ts; 15 protected Resolver cr; 16 17 23 public PackageContextResolver(TypeSystem ts, Package p, Resolver cr) { 24 this.ts = ts; 25 this.p = p; 26 this.cr = cr; 27 } 28 29 32 public Package package_() { 33 return p; 34 } 35 36 39 public Resolver outer() { 40 return cr; 41 } 42 43 46 public Named find(String name) throws SemanticException { 47 if (! StringUtil.isNameShort(name)) { 48 throw new InternalCompilerError( 49 "Cannot lookup qualified name " + name); 50 } 51 52 if (cr == null) { 53 return ts.createPackage(p, name); 54 } 55 56 try { 57 return cr.find(p.fullName() + "." + name); 58 } 59 catch (NoClassException e) { 60 if (!e.getClassName().equals(p.fullName() + "." + name)) { 61 throw e; 62 } 63 return ts.createPackage(p, name); 64 } 65 } 66 67 public String toString() { 68 return "(package-context " + p.toString() + ")"; 69 } 70 } 71 | Popular Tags |