home *** CD-ROM | disk | FTP | other *** search
- package sun.tools.java;
-
- import java.io.IOException;
- import java.util.Enumeration;
- import java.util.Hashtable;
- import java.util.Vector;
-
- public class Imports implements Constants {
- Identifier currentPackage;
- Hashtable classes = new Hashtable();
- Vector packages = new Vector();
- Vector singles = new Vector();
- protected int checked;
-
- public Imports(Environment var1) {
- this.addPackage(Constants.idJavaLang);
- }
-
- public synchronized void resolve(Environment var1) {
- if (this.checked == 0) {
- this.checked = -1;
- if (this.currentPackage == null) {
- this.currentPackage = Constants.idNull;
- }
-
- this.packages.addElement(new IdentifierToken(this.currentPackage));
- Vector var2 = new Vector();
- Enumeration var3 = this.packages.elements();
-
- while(var3.hasMoreElements()) {
- IdentifierToken var4 = (IdentifierToken)var3.nextElement();
- Identifier var5 = var4.getName();
- int var6 = var4.getWhere();
- if (var6 == 0) {
- var2.addElement(var4);
- } else {
- try {
- Identifier var7 = var1.resolvePackageQualifiedName(var5);
- if (var1.innerClasses() && this.importable(var7, var1)) {
- if (var1.getPackage(var7.getTopName()).exists()) {
- var1.error(var6, "class.and.package", var7.getTopName());
- }
-
- if (!var7.isInner()) {
- var7 = Identifier.lookupInner(var7, Constants.idNull);
- }
-
- var5 = var7;
- } else if (!var1.getPackage(var5).exists()) {
- var1.error(var6, "package.not.found", var5, "import");
- } else if (var7.isInner()) {
- var1.error(var6, "class.and.package", var7.getTopName());
- }
-
- var2.addElement(new IdentifierToken(var6, var5));
- } catch (IOException var15) {
- var1.error(var6, "io.exception", "import");
- }
- }
- }
-
- this.packages = var2;
- Enumeration var16 = this.singles.elements();
-
- while(var16.hasMoreElements()) {
- IdentifierToken var17 = (IdentifierToken)var16.nextElement();
- Identifier var18 = var17.getName();
- int var20 = var17.getWhere();
- Identifier var8 = var18.getQualifier();
- var18 = var1.resolvePackageQualifiedName(var18);
- if (!var1.classExists(var18.getTopName())) {
- var1.error(var20, "class.not.found", var18, "import");
- }
-
- Identifier var9 = var18.getFlatName().getName();
- Identifier var10 = (Identifier)this.classes.get(var9);
- if (var10 != null) {
- Identifier var11 = Identifier.lookup(var10.getQualifier(), var10.getFlatName());
- Identifier var12 = Identifier.lookup(var18.getQualifier(), var18.getFlatName());
- if (!var11.equals(var12)) {
- var1.error(var20, "ambig.class", var18, var10);
- }
- }
-
- this.classes.put(var9, var18);
-
- try {
- for(ClassDefinition var21 = var1.getClassDefinition(var18); var21 != null; var21 = var21.getOuterClass()) {
- if (var21.isPrivate() || !var21.isPublic() && !var8.equals(this.currentPackage)) {
- var1.error(var20, "cant.access.class", var21);
- break;
- }
- }
- } catch (AmbiguousClass var13) {
- var1.error(var20, "ambig.class", var13.name1, var13.name2);
- } catch (ClassNotFound var14) {
- var1.error(var20, "class.not.found", var14.name, "import");
- }
- }
-
- this.checked = 1;
- }
- }
-
- public synchronized Identifier resolve(Environment var1, Identifier var2) throws ClassNotFound {
- if (var2.isQualified()) {
- return var2;
- } else {
- if (this.checked <= 0) {
- this.checked = 0;
- this.resolve(var1);
- }
-
- Identifier var3 = (Identifier)this.classes.get(var2);
- if (var3 != null) {
- return var3;
- } else {
- Enumeration var4 = this.packages.elements();
-
- while(var4.hasMoreElements()) {
- IdentifierToken var5 = (IdentifierToken)var4.nextElement();
- Identifier var6 = Identifier.lookup(var5.getName(), var2);
- if (this.importable(var6, var1)) {
- if (var6.getQualifier().equals(this.currentPackage)) {
- var3 = var6;
- break;
- }
-
- if (var3 != null && !var3.equals(var6)) {
- throw new AmbiguousClass(var6, var3);
- }
-
- var3 = var6;
- }
- }
-
- if (var3 == null) {
- throw new ClassNotFound(var2);
- } else {
- this.classes.put(var2, var3);
- return var3;
- }
- }
- }
- }
-
- private boolean importable(Identifier var1, Environment var2) {
- if (!var1.isInner()) {
- return var2.classExists(var1);
- } else if (!var2.classExists(var1.getTopName())) {
- return false;
- } else {
- try {
- ClassDefinition var3 = var2.getClassDefinition(var1.getTopName());
- return var3.innerClassExists(var1.getFlatName().getTail());
- } catch (ClassNotFound var4) {
- return false;
- }
- }
- }
-
- public synchronized Identifier forceResolve(Environment var1, Identifier var2) {
- if (var2.isQualified()) {
- return var2;
- } else {
- Identifier var3 = (Identifier)this.classes.get(var2);
- if (var3 != null) {
- return var3;
- } else {
- var3 = Identifier.lookup(this.currentPackage, var2);
- this.classes.put(var2, var3);
- return var3;
- }
- }
- }
-
- public synchronized void addClass(IdentifierToken var1) {
- this.singles.addElement(var1);
- }
-
- public void addClass(Identifier var1) throws AmbiguousClass {
- this.addClass(new IdentifierToken(var1));
- }
-
- public synchronized void addPackage(IdentifierToken var1) {
- this.packages.addElement(var1);
- }
-
- public void addPackage(Identifier var1) {
- this.addPackage(new IdentifierToken(var1));
- }
-
- public synchronized void setCurrentPackage(Identifier var1) {
- this.currentPackage = var1;
- }
-
- public Identifier getCurrentPackage() {
- return this.currentPackage;
- }
-
- public Environment newEnvironment(Environment var1) {
- return new ImportEnvironment(var1, this);
- }
- }
-