< prev index next >

src/jdk.compiler/share/classes/com/sun/tools/javac/jvm/ClassReader.java

Print this page




  38 
  39 import javax.lang.model.element.Modifier;
  40 import javax.lang.model.element.NestingKind;
  41 import javax.tools.JavaFileManager;
  42 import javax.tools.JavaFileObject;
  43 
  44 import com.sun.tools.javac.comp.Annotate;
  45 import com.sun.tools.javac.comp.Annotate.AnnotationTypeCompleter;
  46 import com.sun.tools.javac.code.*;
  47 import com.sun.tools.javac.code.Directive.*;
  48 import com.sun.tools.javac.code.Lint.LintCategory;
  49 import com.sun.tools.javac.code.Scope.WriteableScope;
  50 import com.sun.tools.javac.code.Symbol.*;
  51 import com.sun.tools.javac.code.Symtab;
  52 import com.sun.tools.javac.code.Type.*;
  53 import com.sun.tools.javac.comp.Annotate.AnnotationTypeMetadata;
  54 import com.sun.tools.javac.file.BaseFileManager;
  55 import com.sun.tools.javac.file.PathFileObject;
  56 import com.sun.tools.javac.jvm.ClassFile.NameAndType;
  57 import com.sun.tools.javac.jvm.ClassFile.Version;

  58 import com.sun.tools.javac.util.*;
  59 import com.sun.tools.javac.util.DefinedBy.Api;
  60 import com.sun.tools.javac.util.JCDiagnostic.DiagnosticPosition;
  61 
  62 import static com.sun.tools.javac.code.Flags.*;
  63 import static com.sun.tools.javac.code.Kinds.Kind.*;
  64 import static com.sun.tools.javac.code.TypeTag.ARRAY;
  65 import static com.sun.tools.javac.code.TypeTag.CLASS;
  66 import static com.sun.tools.javac.code.TypeTag.TYPEVAR;
  67 import static com.sun.tools.javac.jvm.ClassFile.*;
  68 import static com.sun.tools.javac.jvm.ClassFile.Version.*;
  69 
  70 import static com.sun.tools.javac.main.Option.*;
  71 
  72 /** This class provides operations to read a classfile into an internal
  73  *  representation. The internal representation is anchored in a
  74  *  ClassSymbol which contains in its scope symbol representations
  75  *  for all other definitions in the classfile. Top-level Classes themselves
  76  *  appear as members of the scopes of PackageSymbols.
  77  *
  78  *  <p><b>This is NOT part of any supported API.
  79  *  If you write code that depends on this, you do so at your own risk.
  80  *  This code and its internal interfaces are subject to change or
  81  *  deletion without notice.</b>
  82  */
  83 public class ClassReader {
  84     /** The context key for the class reader. */
  85     protected static final Context.Key<ClassReader> classReaderKey = new Context.Key<>();
  86 
  87     public static final int INITIAL_BUFFER_SIZE = 0x0fff0;
  88 
  89     private final Annotate annotate;
  90 


 219         if (instance == null)
 220             instance = new ClassReader(context);
 221         return instance;
 222     }
 223 
 224     /** Construct a new class reader. */
 225     protected ClassReader(Context context) {
 226         context.put(classReaderKey, this);
 227         annotate = Annotate.instance(context);
 228         names = Names.instance(context);
 229         syms = Symtab.instance(context);
 230         types = Types.instance(context);
 231         fileManager = context.get(JavaFileManager.class);
 232         if (fileManager == null)
 233             throw new AssertionError("FileManager initialization error");
 234         diagFactory = JCDiagnostic.Factory.instance(context);
 235 
 236         log = Log.instance(context);
 237 
 238         Options options = Options.instance(context);
 239         verbose         = options.isSet(VERBOSE);
 240 
 241         Source source = Source.instance(context);
 242         allowSimplifiedVarargs = source.allowSimplifiedVarargs();
 243         allowModules     = source.allowModules();
 244 
 245         saveParameterNames = options.isSet(PARAMETERS);
 246 
 247         profile = Profile.instance(context);
 248 
 249         typevars = WriteableScope.create(syms.noSymbol);
 250 
 251         lintClassfile = Lint.instance(context).isEnabled(LintCategory.CLASSFILE);
 252 
 253         initAttributeReaders();
 254     }
 255 
 256     /** Add member to class unless it is synthetic.
 257      */
 258     private void enterMember(ClassSymbol c, Symbol sym) {
 259         // Synthetic members are not entered -- reason lost to history (optimization?).




  38 
  39 import javax.lang.model.element.Modifier;
  40 import javax.lang.model.element.NestingKind;
  41 import javax.tools.JavaFileManager;
  42 import javax.tools.JavaFileObject;
  43 
  44 import com.sun.tools.javac.comp.Annotate;
  45 import com.sun.tools.javac.comp.Annotate.AnnotationTypeCompleter;
  46 import com.sun.tools.javac.code.*;
  47 import com.sun.tools.javac.code.Directive.*;
  48 import com.sun.tools.javac.code.Lint.LintCategory;
  49 import com.sun.tools.javac.code.Scope.WriteableScope;
  50 import com.sun.tools.javac.code.Symbol.*;
  51 import com.sun.tools.javac.code.Symtab;
  52 import com.sun.tools.javac.code.Type.*;
  53 import com.sun.tools.javac.comp.Annotate.AnnotationTypeMetadata;
  54 import com.sun.tools.javac.file.BaseFileManager;
  55 import com.sun.tools.javac.file.PathFileObject;
  56 import com.sun.tools.javac.jvm.ClassFile.NameAndType;
  57 import com.sun.tools.javac.jvm.ClassFile.Version;
  58 import com.sun.tools.javac.main.Option;
  59 import com.sun.tools.javac.util.*;
  60 import com.sun.tools.javac.util.DefinedBy.Api;
  61 import com.sun.tools.javac.util.JCDiagnostic.DiagnosticPosition;
  62 
  63 import static com.sun.tools.javac.code.Flags.*;
  64 import static com.sun.tools.javac.code.Kinds.Kind.*;
  65 import static com.sun.tools.javac.code.TypeTag.ARRAY;
  66 import static com.sun.tools.javac.code.TypeTag.CLASS;
  67 import static com.sun.tools.javac.code.TypeTag.TYPEVAR;
  68 import static com.sun.tools.javac.jvm.ClassFile.*;
  69 import static com.sun.tools.javac.jvm.ClassFile.Version.*;
  70 
  71 import static com.sun.tools.javac.main.Option.PARAMETERS;
  72 
  73 /** This class provides operations to read a classfile into an internal
  74  *  representation. The internal representation is anchored in a
  75  *  ClassSymbol which contains in its scope symbol representations
  76  *  for all other definitions in the classfile. Top-level Classes themselves
  77  *  appear as members of the scopes of PackageSymbols.
  78  *
  79  *  <p><b>This is NOT part of any supported API.
  80  *  If you write code that depends on this, you do so at your own risk.
  81  *  This code and its internal interfaces are subject to change or
  82  *  deletion without notice.</b>
  83  */
  84 public class ClassReader {
  85     /** The context key for the class reader. */
  86     protected static final Context.Key<ClassReader> classReaderKey = new Context.Key<>();
  87 
  88     public static final int INITIAL_BUFFER_SIZE = 0x0fff0;
  89 
  90     private final Annotate annotate;
  91 


 220         if (instance == null)
 221             instance = new ClassReader(context);
 222         return instance;
 223     }
 224 
 225     /** Construct a new class reader. */
 226     protected ClassReader(Context context) {
 227         context.put(classReaderKey, this);
 228         annotate = Annotate.instance(context);
 229         names = Names.instance(context);
 230         syms = Symtab.instance(context);
 231         types = Types.instance(context);
 232         fileManager = context.get(JavaFileManager.class);
 233         if (fileManager == null)
 234             throw new AssertionError("FileManager initialization error");
 235         diagFactory = JCDiagnostic.Factory.instance(context);
 236 
 237         log = Log.instance(context);
 238 
 239         Options options = Options.instance(context);
 240         verbose         = options.isSet(Option.VERBOSE);
 241 
 242         Source source = Source.instance(context);
 243         allowSimplifiedVarargs = source.allowSimplifiedVarargs();
 244         allowModules     = source.allowModules();
 245 
 246         saveParameterNames = options.isSet(PARAMETERS);
 247 
 248         profile = Profile.instance(context);
 249 
 250         typevars = WriteableScope.create(syms.noSymbol);
 251 
 252         lintClassfile = Lint.instance(context).isEnabled(LintCategory.CLASSFILE);
 253 
 254         initAttributeReaders();
 255     }
 256 
 257     /** Add member to class unless it is synthetic.
 258      */
 259     private void enterMember(ClassSymbol c, Symbol sym) {
 260         // Synthetic members are not entered -- reason lost to history (optimization?).


< prev index next >