001 package org.extendj.ast; 002 003 import java.util.HashSet; 004 import java.io.File; 005 import java.util.Set; 006 import java.util.Collections; 007 import java.util.Collection; 008 import java.util.ArrayList; 009 import beaver.*; 010 import java.util.*; 011 import java.io.ByteArrayOutputStream; 012 import java.io.PrintStream; 013 import java.lang.reflect.InvocationTargetException; 014 import java.lang.reflect.Method; 015 import org.jastadd.util.*; 016 import java.util.zip.*; 017 import java.io.*; 018 import org.jastadd.util.PrettyPrintable; 019 import org.jastadd.util.PrettyPrinter; 020 import java.io.FileNotFoundException; 021 import java.io.BufferedInputStream; 022 import java.io.DataInputStream; 023 /** 024 * @ast class 025 * @aspect PathPart 026 * @declaredat /home/jesper/git/extendj/java4/frontend/PathPart.jadd:189 027 */ 028 public abstract class BytecodeClassSource extends ClassSource { 029 030 public BytecodeClassSource(PathPart sourcePath) { 031 super(sourcePath); 032 } 033 034 035 036 @Override 037 public CompilationUnit parseCompilationUnit(Program program) throws IOException { 038 InputStream is = openInputStream(); 039 try { 040 if (program.options().verbose()) { 041 System.out.print("Loading " + sourceName()); 042 } 043 044 long start = System.nanoTime(); 045 CompilationUnit u = program.bytecodeReader.read(is, sourceName(), program); 046 long elapsed = System.nanoTime() - start; 047 program.bytecodeParseTime += elapsed; 048 program.numClassFiles += 1; 049 050 u.setFromSource(false); 051 u.setClassSource(this); 052 053 if (program.options().verbose()) { 054 System.out.println(" in " + (elapsed / 1000000) + " ms"); 055 } 056 return u; 057 } catch (AbstractClassfileParser.ClassfileFormatError e) { 058 throw new AbstractClassfileParser.ClassfileFormatError( 059 String.format("Error loading classfile %s: %s\n", sourceName(), e.getMessage())); 060 } catch (Exception e) { 061 throw new Error("Error loading classfile " + sourceName(), e); 062 } finally { 063 if (is != null) { 064 try { 065 is.close(); 066 } catch (IOException e) { 067 } 068 } 069 } 070 } 071 072 073 }