code: public ClassSymbol makeFunctionalInterfaceClass(Env<AttrContext> env, Name name, List<Type> targets, long cflags) {
          if (targets.isEmpty()) {
              return null;
          }
          Symbol descSym = findDescriptorSymbol(targets.head.tsym);
          Type descType = findDescriptorType(targets.head);
          ClassSymbol csym = new ClassSymbol(cflags, name, env.enclClass.sym.outermostClass());
          csym.completer = null;
          csym.members_field = new Scope(csym);
          MethodSymbol instDescSym = new MethodSymbol(descSym.flags(), descSym.name, descType, csym);
          csym.members_field.enter(instDescSym);
          Type.ClassType ctype = new Type.ClassType(Type.noType, List.<Type>nil(), csym);
          ctype.supertype_field = syms.objectType;
          ctype.interfaces_field = targets;
          csym.type = ctype;
          csym.sourcefile = ((ClassSymbol)csym.owner).sourcefile;
          return csym;
      }
docs: Create a symbol for a class that implements a given functional interface
  and overrides its functional descriptor. This routine is used for two
  main purposes: (i) checking well-formedness of a functional interface;
  (ii) perform functional interface bridge calculation.