docs: public static String getIDL(final Class<?> cls, final Set<Class<?>> cachedTypes, 
              final Set<Class<?>> cachedEnumTypes, boolean ignoreJava) {
          Set<Class<?>> types = cachedTypes;
          if (types == null) {
              types = new HashSet<Class<?>>();
          }
  
          Set<Class<?>> enumTypes = cachedEnumTypes;
          if (enumTypes == null) {
              enumTypes = new HashSet<Class<?>>();
          }
          
          if (types.contains(cls)) {
              return null;
          }
  
          StringBuilder code = new StringBuilder();
          
          if (!ignoreJava) {
              // define package
              code.append("package ").append(cls.getPackage().getName()).append(";\n");
              code.append("option java_outer_classname = \"").append(cls.getSimpleName()).append("$$ByJProtobuf\";\n");
          }
  
          // define outer name class
  
          types.add(cls);
  
          generateIDL(code, cls, types, enumTypes);
  
          return code.toString();
      }