KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > polyglot > types > PackageContextResolver


1 package polyglot.types;
2
3 import polyglot.ast.*;
4 import polyglot.util.*;
5 import polyglot.types.Package;
6
7 /**
8  * A <code>PackageContextResolver</code> is responsible for looking up types
9  * and packages in a package by name.
10  */

11 public class PackageContextResolver implements Resolver
12 {
13     protected Package JavaDoc p;
14     protected TypeSystem ts;
15     protected Resolver cr;
16
17     /**
18      * Create a package context resolver.
19      * @param ts The type system.
20      * @param p The package in whose context to search.
21      * @param cr The resolver to use for looking up types.
22      */

23     public PackageContextResolver(TypeSystem ts, Package JavaDoc p, Resolver cr) {
24     this.ts = ts;
25     this.p = p;
26     this.cr = cr;
27     }
28
29     /**
30      * The package in whose context to search.
31      */

32     public Package JavaDoc package_() {
33         return p;
34     }
35
36     /**
37      * The system resolver.
38      */

39     public Resolver outer() {
40         return cr;
41     }
42
43     /**
44      * Find a type object by name.
45      */

46     public Named find(String JavaDoc 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 JavaDoc toString() {
68         return "(package-context " + p.toString() + ")";
69     }
70 }
71
Popular Tags