code: void enterInner(ClassSymbol c) {
          if (c.type.isCompound()) {
              throw new AssertionError("Unexpected intersection type: " + c.type);
          }
          try {
              c.complete();
          } catch (CompletionFailure ex) {
              System.err.println("error: " + c + ": " + ex.getMessage());
              throw ex;
          }
          if (!c.type.hasTag(CLASS)) return; // arrays
          if (pool != null && // pool might be null if called from xClassName
              c.owner.enclClass() != null &&
              (innerClasses == null || !innerClasses.contains(c))) {
  //          log.errWriter.println("enter inner " + c);//DEBUG
              enterInner(c.owner.enclClass());
              pool.put(c);
              if (c.name != names.empty)
                  pool.put(c.name);
              if (innerClasses == null) {
                  innerClasses = new HashSet<ClassSymbol>();
                  innerClassesQueue = new ListBuffer<ClassSymbol>();
                  pool.put(names.InnerClasses);
              }
              innerClasses.add(c);
              innerClassesQueue.append(c);
          }
      }
docs: Enter an inner class into the `innerClasses' set/queue.