diff options
Diffstat (limited to 'sources/scalac/symtab/SourceCompleter.java')
-rw-r--r-- | sources/scalac/symtab/SourceCompleter.java | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/sources/scalac/symtab/SourceCompleter.java b/sources/scalac/symtab/SourceCompleter.java new file mode 100644 index 0000000000..1656f2029f --- /dev/null +++ b/sources/scalac/symtab/SourceCompleter.java @@ -0,0 +1,53 @@ +/* ____ ____ ____ ____ ______ *\ +** / __// __ \/ __// __ \/ ____/ SOcos COmpiles Scala ** +** __\_ \/ /_/ / /__/ /_/ /\_ \ (c) 2002, LAMP/EPFL ** +** /_____/\____/\___/\____/____/ ** +** ** +** $Id$ +\* */ + +package scalac.symtab; + +import scalac.*; +import scalac.ast.parser.*; +import scalac.typechecker.Analyzer; +import java.io.*; + + +public class SourceCompleter extends Type.LazyType { + + /** the global compilation environment + */ + protected Global global; + protected String filename; + private boolean completed = false; + + public SourceCompleter(Global global, String filename) { + this.global = global; + this.filename = filename; + } + + /** complete class symbol c by loading the class + */ + public void complete(Symbol c) { + if (completed) { + c.setInfo(Type.ErrorType); + } else if (filename != null) { + try { + String fname = filename; + long msec = System.currentTimeMillis(); + Unit unit = new Unit(global, new Sourcefile(filename, false)); + filename = null; + global.PHASE.PARSER.createPhase(global).apply(unit); + ((Analyzer)global.PHASE.ANALYZER.createPhase(global)).lateEnter(unit, c); + global.operation("added " + fname + " in " + + (System.currentTimeMillis() - msec) + "ms"); + } catch (IOException e) { + e.printStackTrace(); + global.error("i/o error while loading " + c); + c.setInfo(Type.ErrorType); + } + completed = true; + } + } +} |