code: public ClassSymbol enterClass(Name flatName, JavaFileObject classFile) {
          ClassSymbol cs = classes.get(flatName);
          if (cs != null) {
              String msg = Log.format("%s: completer = %s; class file = %s; source file = %s",
                                      cs.fullname,
                                      cs.completer,
                                      cs.classfile,
                                      cs.sourcefile);
              throw new AssertionError(msg);
          }
          Name packageName = Convert.packagePart(flatName);
          PackageSymbol owner = packageName.isEmpty()
                                  ? syms.unnamedPackage
                                  : enterPackage(packageName);
          cs = defineClass(Convert.shortName(flatName), owner);
          cs.classfile = classFile;
          classes.put(flatName, cs);
          return cs;
      }
docs: Creates a new toplevel class symbol with given flat name and
  given class (or source) file.
  
  @param flatName a fully qualified binary class name
  @param classFile the class file or compilation unit defining
  the class (may be {@code null})
  @return a newly created class symbol
  @throws AssertionError if the class symbol already exists