code: public Type externalType(Types types) {
          Type t = erasure(types);
          if (name == name.table.names.init && owner.hasOuterInstance()) {
              Type outerThisType = types.erasure(owner.type.getEnclosingType());
              return new MethodType(t.getParameterTypes().prepend(outerThisType),
                                    t.getReturnType(),
                                    t.getThrownTypes(),
                                    t.tsym);
          } else {
              return t;
          }
      }
docs: The external type of a symbol. This is the symbol's erased type
  except for constructors of inner classes which get the enclosing
  instance class added as first argument.