/* * This file is part of the X10 project (http://x10-lang.org). * * This file is licensed to You under the Eclipse Public License (EPL); * You may not use this file except in compliance with the License. * You may obtain a copy of the License at * http://www.opensource.org/licenses/eclipse-1.0.php * * This file was originally derived from the Polyglot extensible compiler framework. * * (C) Copyright 2000-2007 Polyglot project group, Cornell University * (C) Copyright IBM Corporation 2007-2012. */ package polyglot.visit; import polyglot.ast.*; import polyglot.frontend.Job; import polyglot.types.*; /** Visitor which traverses the AST constructing type objects. */ public class InitImportsVisitor extends ErrorHandlingVisitor { protected ImportTable importTable; public InitImportsVisitor(Job job, TypeSystem ts, NodeFactory nf) { super(job, ts, nf); } public NodeVisitor enterCall(Node n) throws SemanticException { if (n instanceof SourceFile) { SourceFile sf = (SourceFile) n; PackageNode pn = sf.package_(); ImportTable it; if (pn != null) { it = ts.importTable(sf.source().name(), pn.package_()); } else { it = ts.importTable(sf.source().name(), null); } InitImportsVisitor v = (InitImportsVisitor) shallowCopy(); v.importTable = it; return v; } return this; } public Node leaveCall(Node old, Node n, NodeVisitor v) throws SemanticException { if (n instanceof SourceFile) { SourceFile sf = (SourceFile) n; InitImportsVisitor v_ = (InitImportsVisitor) v; ImportTable it = v_.importTable; return sf.importTable(it); } if (n instanceof Import) { Import im = (Import) n; if (im.kind() == Import.CLASS) { this.importTable.addExplicitImport(im.name(), im.position()); } else if (im.kind() == Import.PACKAGE) { this.importTable.addOnDemandImport(im.name(), im.position()); } } return n; } }