langtools/src/share/classes/com/sun/tools/javac/jvm/ClassReader.java
changeset 8032 e1aa25ccdabb
parent 8031 d5fe2c1cecfc
child 8042 d534dd80da9f
equal deleted inserted replaced
8031:d5fe2c1cecfc 8032:e1aa25ccdabb
   240      */
   240      */
   241     private void init(Symtab syms, boolean definitive) {
   241     private void init(Symtab syms, boolean definitive) {
   242         if (classes != null) return;
   242         if (classes != null) return;
   243 
   243 
   244         if (definitive) {
   244         if (definitive) {
   245             assert packages == null || packages == syms.packages;
   245             Assert.check(packages == null || packages == syms.packages);
   246             packages = syms.packages;
   246             packages = syms.packages;
   247             assert classes == null || classes == syms.classes;
   247             Assert.check(classes == null || classes == syms.classes);
   248             classes = syms.classes;
   248             classes = syms.classes;
   249         } else {
   249         } else {
   250             packages = new HashMap<Name, PackageSymbol>();
   250             packages = new HashMap<Name, PackageSymbol>();
   251             classes = new HashMap<Name, ClassSymbol>();
   251             classes = new HashMap<Name, ClassSymbol>();
   252         }
   252         }
   528      */
   528      */
   529     Object readClassOrType(int i) {
   529     Object readClassOrType(int i) {
   530         int index =  poolIdx[i];
   530         int index =  poolIdx[i];
   531         int len = getChar(index + 1);
   531         int len = getChar(index + 1);
   532         int start = index + 3;
   532         int start = index + 3;
   533         assert buf[start] == '[' || buf[start + len - 1] != ';';
   533         Assert.check(buf[start] == '[' || buf[start + len - 1] != ';');
   534         // by the above assertion, the following test can be
   534         // by the above assertion, the following test can be
   535         // simplified to (buf[start] == '[')
   535         // simplified to (buf[start] == '[')
   536         return (buf[start] == '[' || buf[start + len - 1] == ';')
   536         return (buf[start] == '[' || buf[start + len - 1] == ';')
   537             ? (Object)sigToType(buf, start, len)
   537             ? (Object)sigToType(buf, start, len)
   538             : (Object)enterClass(names.fromUtf(internalize(buf, start,
   538             : (Object)enterClass(names.fromUtf(internalize(buf, start,
  1039                     if (sym.kind == TYP) {
  1039                     if (sym.kind == TYP) {
  1040                         ClassSymbol c = (ClassSymbol) sym;
  1040                         ClassSymbol c = (ClassSymbol) sym;
  1041                         readingClassAttr = true;
  1041                         readingClassAttr = true;
  1042                         try {
  1042                         try {
  1043                             ClassType ct1 = (ClassType)c.type;
  1043                             ClassType ct1 = (ClassType)c.type;
  1044                             assert c == currentOwner;
  1044                             Assert.check(c == currentOwner);
  1045                             ct1.typarams_field = readTypeParams(nextChar());
  1045                             ct1.typarams_field = readTypeParams(nextChar());
  1046                             ct1.supertype_field = sigToType();
  1046                             ct1.supertype_field = sigToType();
  1047                             ListBuffer<Type> is = new ListBuffer<Type>();
  1047                             ListBuffer<Type> is = new ListBuffer<Type>();
  1048                             while (sigp != siglimit) is.append(sigToType());
  1048                             while (sigp != siglimit) is.append(sigToType());
  1049                             ct1.interfaces_field = is.toList();
  1049                             ct1.interfaces_field = is.toList();
  1906             is = is.prepend(_inter);
  1906             is = is.prepend(_inter);
  1907         }
  1907         }
  1908         if (ct.interfaces_field == null)
  1908         if (ct.interfaces_field == null)
  1909             ct.interfaces_field = is.reverse();
  1909             ct.interfaces_field = is.reverse();
  1910 
  1910 
  1911         if (fieldCount != nextChar()) assert false;
  1911         Assert.check(fieldCount == nextChar());
  1912         for (int i = 0; i < fieldCount; i++) enterMember(c, readField());
  1912         for (int i = 0; i < fieldCount; i++) enterMember(c, readField());
  1913         if (methodCount != nextChar()) assert false;
  1913         Assert.check(methodCount == nextChar());
  1914         for (int i = 0; i < methodCount; i++) enterMember(c, readMethod());
  1914         for (int i = 0; i < methodCount; i++) enterMember(c, readMethod());
  1915 
  1915 
  1916         typevars = typevars.leave();
  1916         typevars = typevars.leave();
  1917     }
  1917     }
  1918 
  1918 
  2017     /** Define a new class given its name and owner.
  2017     /** Define a new class given its name and owner.
  2018      */
  2018      */
  2019     public ClassSymbol defineClass(Name name, Symbol owner) {
  2019     public ClassSymbol defineClass(Name name, Symbol owner) {
  2020         ClassSymbol c = new ClassSymbol(0, name, owner);
  2020         ClassSymbol c = new ClassSymbol(0, name, owner);
  2021         if (owner.kind == PCK)
  2021         if (owner.kind == PCK)
  2022             assert classes.get(c.flatname) == null : c;
  2022             Assert.checkNull(classes.get(c.flatname), c);
  2023         c.completer = this;
  2023         c.completer = this;
  2024         return c;
  2024         return c;
  2025     }
  2025     }
  2026 
  2026 
  2027     /** Create a new toplevel or member class symbol with given name
  2027     /** Create a new toplevel or member class symbol with given name
  2157         warnedAttrs.clear();
  2157         warnedAttrs.clear();
  2158         JavaFileObject classfile = c.classfile;
  2158         JavaFileObject classfile = c.classfile;
  2159         if (classfile != null) {
  2159         if (classfile != null) {
  2160             JavaFileObject previousClassFile = currentClassFile;
  2160             JavaFileObject previousClassFile = currentClassFile;
  2161             try {
  2161             try {
  2162                 assert !filling :
  2162                 if (filling) {
  2163                     "Filling " + classfile.toUri() +
  2163                     Assert.error("Filling " + classfile.toUri() + " during " + previousClassFile);
  2164                     " during " + previousClassFile;
  2164                 }
  2165                 currentClassFile = classfile;
  2165                 currentClassFile = classfile;
  2166                 if (verbose) {
  2166                 if (verbose) {
  2167                     printVerbose("loading", currentClassFile.toString());
  2167                     printVerbose("loading", currentClassFile.toString());
  2168                 }
  2168                 }
  2169                 if (classfile.getKind() == JavaFileObject.Kind.CLASS) {
  2169                 if (classfile.getKind() == JavaFileObject.Kind.CLASS) {
  2305     /** Make a package, given its fully qualified name.
  2305     /** Make a package, given its fully qualified name.
  2306      */
  2306      */
  2307     public PackageSymbol enterPackage(Name fullname) {
  2307     public PackageSymbol enterPackage(Name fullname) {
  2308         PackageSymbol p = packages.get(fullname);
  2308         PackageSymbol p = packages.get(fullname);
  2309         if (p == null) {
  2309         if (p == null) {
  2310             assert !fullname.isEmpty() : "rootPackage missing!";
  2310             Assert.check(!fullname.isEmpty(), "rootPackage missing!");
  2311             p = new PackageSymbol(
  2311             p = new PackageSymbol(
  2312                 Convert.shortName(fullname),
  2312                 Convert.shortName(fullname),
  2313                 enterPackage(Convert.packagePart(fullname)));
  2313                 enterPackage(Convert.packagePart(fullname)));
  2314             p.completer = this;
  2314             p.completer = this;
  2315             packages.put(fullname, p);
  2315             packages.put(fullname, p);