diff env/lib/python3.7/site-packages/schema_salad/java_codegen.py @ 5:9b1c78e6ba9c draft default tip

"planemo upload commit 6c0a8142489327ece472c84e558c47da711a9142"
author shellac
date Mon, 01 Jun 2020 08:59:25 -0400
parents 79f47841a781
children
line wrap: on
line diff
--- a/env/lib/python3.7/site-packages/schema_salad/java_codegen.py	Thu May 14 16:47:39 2020 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,788 +0,0 @@
-"""Work-in-progress Java code generator for a given schema salad definition."""
-import os
-import pkg_resources
-import string
-import shutil
-from io import open as io_open
-from typing import Any, Dict, List, MutableMapping, MutableSequence, Optional, Union
-
-from six import iteritems, itervalues
-from six.moves import cStringIO, urllib
-from typing_extensions import Text  # pylint: disable=unused-import
-
-from . import schema
-from .codegen_base import CodeGenBase, TypeDef
-from .exceptions import SchemaException
-from .schema import shortname
-
-# move to a regular typing import when Python 3.3-3.6 is no longer supported
-
-# experiment at providing more typed objects building a optional type that allows
-# referencing one or a list of objects. It is useful for improving the RootLoader
-# for simple schema with a single root loader - but doesn't help with CWL at all and
-# may even confuse things a bit so turning these off be default.
-USE_ONE_OR_LIST_OF_TYPES = False
-
-
-def _ensure_directory_and_write(path, contents):
-    # type: (Text, Text) -> None
-    dirname = os.path.dirname(path)
-    _safe_makedirs(dirname)
-    with io_open(path, mode="w", encoding="utf-8") as f:
-        f.write(contents)
-
-
-def doc_to_doc_string(doc, indent_level=0):
-    # type: (Text, int) -> Text
-    lead = " " + "  " * indent_level + "* " * indent_level
-    if doc:
-        doc_str = "{}<BLOCKQUOTE>\n".format(lead)
-        doc_str += "\n".join(["{}{}".format(lead, l) for l in doc.split("\n")])
-        doc_str += "{}</BLOCKQUOTE>".format(lead)
-    else:
-        doc_str = ""
-    return doc_str
-
-
-def _safe_makedirs(path):
-    # type: (Text) -> None
-    if not os.path.exists(path):
-        os.makedirs(path)
-
-
-class JavaCodeGen(CodeGenBase):
-    def __init__(self, base, target, examples):
-        # type: (Text, Optional[str], Optional[str]) -> None
-        super(JavaCodeGen, self).__init__()
-        self.base_uri = base
-        sp = urllib.parse.urlsplit(base)
-        self.examples = examples
-        self.package = ".".join(
-            list(reversed(sp.netloc.split("."))) + sp.path.strip("/").split("/")
-        )
-        self.artifact = self.package.split(".")[-1]
-        target = target or "."
-        self.target_dir = target
-        rel_package_dir = self.package.replace(".", "/")
-        self.rel_package_dir = rel_package_dir
-        self.main_src_dir = os.path.join(
-            self.target_dir, "src", "main", "java", rel_package_dir
-        )
-        self.test_src_dir = os.path.join(
-            self.target_dir, "src", "test", "java", rel_package_dir
-        )
-        self.test_resources_dir = os.path.join(
-            self.target_dir, "src", "test", "resources", rel_package_dir
-        )
-
-    def prologue(self):  # type: () -> None
-        for src_dir in [self.main_src_dir, self.test_src_dir]:
-            _safe_makedirs(src_dir)
-
-        for primitive in itervalues(self.prims):
-            self.declare_type(primitive)
-
-    @staticmethod
-    def property_name(name):  # type: (Text) -> Text
-        avn = schema.avro_name(name)
-        return avn
-
-    @staticmethod
-    def safe_name(name):  # type: (Text) -> Text
-        avn = JavaCodeGen.property_name(name)
-        if avn in ("class", "extends", "abstract", "default", "package"):
-            # reserved words
-            avn = avn + "_"
-        return avn
-
-    def interface_name(self, n):
-        # type: (Text) -> Text
-        return self.safe_name(n)
-
-    def begin_class(
-        self,
-        classname,  # type: Text
-        extends,  # type: MutableSequence[Text]
-        doc,  # type: Text
-        abstract,  # type: bool
-        field_names,  # type: MutableSequence[Text]
-        idfield,  # type: Text
-    ):  # type: (...) -> None
-        cls = self.interface_name(classname)
-        self.current_class = cls
-        self.current_class_is_abstract = abstract
-        self.current_loader = cStringIO()
-        self.current_fieldtypes = {}  # type: Dict[Text, TypeDef]
-        self.current_fields = cStringIO()
-        interface_doc_str = u"* Auto-generated interface for <I>%s</I><BR>" % classname
-        if not abstract:
-            implemented_by = u"This interface is implemented by {{@link {}Impl}}<BR>"
-            interface_doc_str += implemented_by.format(cls)
-        interface_doc_str += doc_to_doc_string(doc)
-        class_doc_str = u"* Auto-generated class implementation for <I>{}</I><BR>".format(
-            classname
-        )
-        class_doc_str += doc_to_doc_string(doc)
-        with open(os.path.join(self.main_src_dir, "{}.java".format(cls)), "w") as f:
-
-            if extends:
-                ext = (
-                    "extends "
-                    + ", ".join(self.interface_name(e) for e in extends)
-                    + ", Savable"
-                )
-            else:
-                ext = "extends Savable"
-            f.write(
-                """package {package};
-
-import {package}.utils.Savable;
-
-/**
-{interface_doc_str}
- */
-public interface {cls} {ext} {{""".format(
-                    package=self.package,
-                    cls=cls,
-                    ext=ext,
-                    interface_doc_str=interface_doc_str,
-                )
-            )
-
-        if self.current_class_is_abstract:
-            return
-
-        with open(os.path.join(self.main_src_dir, "{}Impl.java".format(cls)), "w") as f:
-            f.write(
-                """package {package};
-
-import {package}.utils.LoaderInstances;
-import {package}.utils.LoadingOptions;
-import {package}.utils.LoadingOptionsBuilder;
-import {package}.utils.SavableImpl;
-import {package}.utils.ValidationException;
-
-/**
-{class_doc_str}
- */
-public class {cls}Impl extends SavableImpl implements {cls} {{
-  private LoadingOptions loadingOptions_ = new LoadingOptionsBuilder().build();
-  private java.util.Map<String, Object> extensionFields_ =
-      new java.util.HashMap<String, Object>();
-""".format(
-                    package=self.package, cls=cls, class_doc_str=class_doc_str
-                )
-            )
-        self.current_loader.write(
-            """
-  /**
-   * Used by {{@link {package}.utils.RootLoader}} to construct instances of {cls}Impl.
-   *
-   * @param __doc_            Document fragment to load this record object from (presumably a
-                              {{@link java.util.Map}}).
-   * @param __baseUri_        Base URI to generate child document IDs against.
-   * @param __loadingOptions  Context for loading URIs and populating objects.
-   * @param __docRoot_        ID at this position in the document (if available) (maybe?)
-   * @throws ValidationException If the document fragment is not a {{@link java.util.Map}}
-   *                             or validation of fields fails.
-   */
-  public {cls}Impl(
-      final Object __doc_,
-      final String __baseUri_,
-      LoadingOptions __loadingOptions,
-      final String __docRoot_) {{
-    super(__doc_, __baseUri_, __loadingOptions, __docRoot_);
-    // Prefix plumbing variables with '__' to reduce likelihood of collision with
-    // generated names.
-    String __baseUri = __baseUri_;
-    String __docRoot = __docRoot_;
-    if (!(__doc_ instanceof java.util.Map)) {{
-      throw new ValidationException("{cls}Impl called on non-map");
-    }}
-    final java.util.Map<String, Object> __doc = (java.util.Map<String, Object>) __doc_;
-    final java.util.List<ValidationException> __errors =
-        new java.util.ArrayList<ValidationException>();
-    if (__loadingOptions != null) {{
-      this.loadingOptions_ = __loadingOptions;
-    }}
-""".format(
-                cls=cls, package=self.package
-            )
-        )
-
-    def end_class(self, classname, field_names):
-        # type: (Text, List[Text]) -> None
-        with open(
-            os.path.join(self.main_src_dir, "{}.java".format(self.current_class)), "a"
-        ) as f:
-            f.write(
-                """
-}
-"""
-            )
-        if self.current_class_is_abstract:
-            return
-
-        self.current_loader.write(
-            """    if (!__errors.isEmpty()) {
-      throw new ValidationException("Trying 'RecordField'", __errors);
-    }
-"""
-        )
-        for fieldname in field_names:
-            fieldtype = self.current_fieldtypes.get(fieldname)
-            if fieldtype is None:
-                continue
-            self.current_loader.write(
-                """    this.{safename} = ({type}) {safename};
-""".format(
-                    safename=self.safe_name(fieldname), type=fieldtype.instance_type
-                )
-            )
-
-        self.current_loader.write("""  }""")
-
-        with open(
-            os.path.join(self.main_src_dir, "{}Impl.java".format(self.current_class)),
-            "a",
-        ) as f:
-            f.write(self.current_fields.getvalue())
-            f.write(self.current_loader.getvalue())
-            f.write(
-                """
-}
-"""
-            )
-
-    prims = {
-        u"http://www.w3.org/2001/XMLSchema#string": TypeDef(
-            instance_type="String",
-            init="new PrimitiveLoader<String>(String.class)",
-            name="StringInstance",
-            loader_type="Loader<String>",
-        ),
-        u"http://www.w3.org/2001/XMLSchema#int": TypeDef(
-            instance_type="Integer",
-            init="new PrimitiveLoader<Integer>(Integer.class)",
-            name="IntegerInstance",
-            loader_type="Loader<Integer>",
-        ),
-        u"http://www.w3.org/2001/XMLSchema#long": TypeDef(
-            instance_type="Long",
-            name="LongInstance",
-            loader_type="Loader<Long>",
-            init="new PrimitiveLoader<Long>(Long.class)",
-        ),
-        u"http://www.w3.org/2001/XMLSchema#float": TypeDef(
-            instance_type="Float",
-            name="FloatInstance",
-            loader_type="Loader<Float>",
-            init="new PrimitiveLoader<Float>(Float.class)",
-        ),
-        u"http://www.w3.org/2001/XMLSchema#double": TypeDef(
-            instance_type="Double",
-            name="DoubleInstance",
-            loader_type="Loader<Double>",
-            init="new PrimitiveLoader<Double>(Double.class)",
-        ),
-        u"http://www.w3.org/2001/XMLSchema#boolean": TypeDef(
-            instance_type="Boolean",
-            name="BooleanInstance",
-            loader_type="Loader<Boolean>",
-            init="new PrimitiveLoader<Boolean>(Boolean.class)",
-        ),
-        u"https://w3id.org/cwl/salad#null": TypeDef(
-            instance_type="Object",
-            name="NullInstance",
-            loader_type="Loader<Object>",
-            init="new NullLoader()",
-        ),
-        u"https://w3id.org/cwl/salad#Any": TypeDef(
-            instance_type="Object",
-            name="AnyInstance",
-            init="new AnyLoader()",
-            loader_type="Loader<Object>",
-        ),
-    }
-
-    def type_loader(self, type_declaration):
-        # type: (Union[List[Any], Dict[Text, Any], Text]) -> TypeDef
-        if isinstance(type_declaration, MutableSequence):
-            sub = [self.type_loader(i) for i in type_declaration]
-            if len(sub) < 2:
-                return sub[0]
-
-            if len(sub) == 2:
-                type_1 = sub[0]
-                type_2 = sub[1]
-                type_1_name = type_1.name
-                type_2_name = type_2.name
-                if type_1_name == "NullInstance" or type_2_name == "NullInstance":
-                    non_null_type = type_1 if type_1.name != "NullInstance" else type_2
-                    return self.declare_type(
-                        TypeDef(
-                            instance_type="java.util.Optional<{}>".format(
-                                non_null_type.instance_type
-                            ),
-                            init="new OptionalLoader({})".format(non_null_type.name),
-                            name="optional_{}".format(non_null_type.name),
-                            loader_type="Loader<java.util.Optional<{}>>".format(
-                                non_null_type.instance_type
-                            ),
-                        )
-                    )
-                if (
-                    type_1_name == "array_of_{}".format(type_2_name)
-                    or type_2_name == "array_of_{}".format(type_1_name)
-                ) and USE_ONE_OR_LIST_OF_TYPES:
-                    if type_1_name == "array_of_{}".format(type_2_name):
-                        single_type = type_2
-                        array_type = type_1
-                    else:
-                        single_type = type_1
-                        array_type = type_2
-                    fqclass = "{}.{}".format(self.package, single_type.instance_type)
-                    return self.declare_type(
-                        TypeDef(
-                            instance_type="{}.utils.OneOrListOf<{}>".format(
-                                self.package, fqclass
-                            ),
-                            init="new OneOrListOfLoader<{}>({}, {})".format(
-                                fqclass, single_type.name, array_type.name
-                            ),
-                            name="one_or_array_of_{}".format(single_type.name),
-                            loader_type="Loader<{}.utils.OneOrListOf<{}>>".format(
-                                self.package, fqclass
-                            ),
-                        )
-                    )
-            return self.declare_type(
-                TypeDef(
-                    instance_type="Object",
-                    init="new UnionLoader(new Loader[] {{ {} }})".format(
-                        ", ".join(s.name for s in sub)
-                    ),
-                    name="union_of_{}".format("_or_".join(s.name for s in sub)),
-                    loader_type="Loader<Object>",
-                )
-            )
-        if isinstance(type_declaration, MutableMapping):
-            if type_declaration["type"] in (
-                "array",
-                "https://w3id.org/cwl/salad#array",
-            ):
-                i = self.type_loader(type_declaration["items"])
-                return self.declare_type(
-                    TypeDef(
-                        # special doesn't work out with subclassing, gotta be more clever
-                        # instance_type="List<{}>".format(i.instance_type),
-                        instance_type="java.util.List<Object>",
-                        name="array_of_{}".format(i.name),
-                        init="new ArrayLoader({})".format(i.name),
-                        loader_type="Loader<java.util.List<{}>>".format(
-                            i.instance_type
-                        ),
-                    )
-                )
-            if type_declaration["type"] in ("enum", "https://w3id.org/cwl/salad#enum"):
-                return self.type_loader_enum(type_declaration)
-            if type_declaration["type"] in (
-                "record",
-                "https://w3id.org/cwl/salad#record",
-            ):
-                is_abstract = type_declaration.get("abstract", False)
-                fqclass = "{}.{}".format(
-                    self.package, self.safe_name(type_declaration["name"])
-                )
-                return self.declare_type(
-                    TypeDef(
-                        instance_type=self.safe_name(type_declaration["name"]),
-                        name=self.safe_name(type_declaration["name"]),
-                        init="new RecordLoader<{clazz}>({clazz}{ext}.class)".format(
-                            clazz=fqclass, ext="Impl" if not is_abstract else "",
-                        ),
-                        loader_type="Loader<{}>".format(fqclass),
-                    )
-                )
-            raise SchemaException("wft {}".format(type_declaration["type"]))
-        if type_declaration in self.prims:
-            return self.prims[type_declaration]
-        return self.collected_types[self.safe_name(type_declaration)]
-
-    def type_loader_enum(self, type_declaration):
-        # type: (Dict[Text, Any]) -> TypeDef
-        symbols = [self.property_name(sym) for sym in type_declaration["symbols"]]
-        for sym in symbols:
-            self.add_vocab(shortname(sym), sym)
-        clazz = self.safe_name(type_declaration["name"])
-        symbols_decl = 'new String[] {{"{}"}}'.format(
-            '", "'.join(sym for sym in symbols)
-        )
-        enum_path = os.path.join(self.main_src_dir, "{}.java".format(clazz))
-        with open(enum_path, "w") as f:
-            f.write(
-                """package {package};
-
-import {package}.utils.ValidationException;
-
-public enum {clazz} {{
-""".format(
-                    package=self.package, clazz=clazz
-                )
-            )
-            for i, sym in enumerate(symbols):
-                suffix = "," if i < (len(symbols) - 1) else ";"
-                const = self.safe_name(sym).replace("-", "_").replace(".", "_").upper()
-                f.write(
-                    """  {const}("{val}"){suffix}\n""".format(
-                        const=const, val=sym, suffix=suffix
-                    )
-                )
-            f.write(
-                """
-  private static String[] symbols = {symbols_decl};
-  private String docVal;
-
-  private {clazz}(final String docVal) {{
-    this.docVal = docVal;
-  }}
-
-  public static {clazz} fromDocumentVal(final String docVal) {{
-    for(final {clazz} val : {clazz}.values()) {{
-      if(val.docVal.equals(docVal)) {{
-        return val;
-      }}
-    }}
-    throw new ValidationException(String.format("Expected one of %s", {clazz}.symbols, docVal));
-  }}
-}}
-""".format(
-                    clazz=clazz, symbols_decl=symbols_decl
-                )
-            )
-        return self.declare_type(
-            TypeDef(
-                instance_type=clazz,
-                name=self.safe_name(type_declaration["name"]),
-                loader_type="Loader<{clazz}>".format(clazz=clazz),
-                init="new EnumLoader({clazz}.class)".format(clazz=clazz),
-            )
-        )
-
-    def declare_field(self, name, fieldtype, doc, optional):
-        # type: (Text, TypeDef, Text, bool) -> None
-        fieldname = name
-        property_name = self.property_name(fieldname)
-        cap_case_property_name = property_name[0].upper() + property_name[1:]
-        if cap_case_property_name == "Class":
-            cap_case_property_name = "Class_"
-
-        safename = self.safe_name(fieldname)
-        self.current_fieldtypes[property_name] = fieldtype
-        getter_doc_str = """  /**
-   * Getter for property <I>{fieldname}</I><BR>
-{field_doc_str}
-   */
-""".format(
-            fieldname=fieldname, field_doc_str=doc_to_doc_string(doc, indent_level=1)
-        )
-        with open(
-            os.path.join(self.main_src_dir, "{}.java".format(self.current_class)), "a"
-        ) as f:
-            f.write(
-                """
-{getter_doc_str}
-  {type} get{capfieldname}();""".format(
-                    getter_doc_str=getter_doc_str,
-                    capfieldname=cap_case_property_name,
-                    type=fieldtype.instance_type,
-                )
-            )
-
-        if self.current_class_is_abstract:
-            return
-
-        self.current_fields.write(
-            """
-  private {type} {safename};
-
-{getter_doc_str}
-  public {type} get{capfieldname}() {{
-    return this.{safename};
-  }}
-""".format(
-                safename=safename,
-                capfieldname=cap_case_property_name,
-                getter_doc_str=getter_doc_str,
-                type=fieldtype.instance_type,
-            )
-        )
-
-        self.current_loader.write(
-            """    {type} {safename};
-""".format(
-                type=fieldtype.instance_type, safename=safename
-            )
-        )
-        if optional:
-            self.current_loader.write(
-                """
-    if (__doc.containsKey("{fieldname}")) {{
-""".format(
-                    fieldname=property_name
-                )
-            )
-            spc = "  "
-        else:
-            spc = ""
-
-        self.current_loader.write(
-            """{spc}    try {{
-{spc}      {safename} =
-{spc}          LoaderInstances
-{spc}              .{fieldtype}
-{spc}              .loadField(__doc.get("{fieldname}"), __baseUri, __loadingOptions);
-{spc}    }} catch (ValidationException e) {{
-{spc}      {safename} = null; // won't be used but prevents compiler from complaining.
-{spc}      final String __message = "the `{fieldname}` field is not valid because:";
-{spc}      __errors.add(new ValidationException(__message, e));
-{spc}    }}
-""".format(
-                fieldtype=fieldtype.name,
-                safename=safename,
-                fieldname=property_name,
-                spc=spc,
-            )
-        )
-
-        if optional:
-            self.current_loader.write(
-                """
-    }} else {{
-      {safename} = null;
-    }}
-""".format(
-                    safename=safename
-                )
-            )
-
-    def declare_id_field(self, name, fieldtype, doc, optional):
-        # type: (Text, TypeDef, Text, bool) -> None
-        if self.current_class_is_abstract:
-            return
-
-        self.declare_field(name, fieldtype, doc, True)
-        if optional:
-            set_uri = """
-    if ({safename} == null) {{
-      if (__docRoot != null) {{
-        {safename} = java.util.Optional.of(__docRoot);
-      }} else {{
-        {safename} = java.util.Optional.of("_:" + java.util.UUID.randomUUID().toString());
-      }}
-    }}
-    __baseUri = (String) {safename}.orElse(null);
-"""
-        else:
-            set_uri = """
-    if ({safename} == null) {{
-      if (__docRoot != null) {{
-        {safename} = __docRoot;
-      }} else {{
-        throw new ValidationException("Missing {fieldname}");
-      }}
-    }}
-    __baseUri = (String) {safename};
-"""
-        self.current_loader.write(
-            set_uri.format(safename=self.safe_name(name), fieldname=shortname(name))
-        )
-
-    def uri_loader(self, inner, scoped_id, vocab_term, ref_scope):
-        # type: (TypeDef, bool, bool, Union[int, None]) -> TypeDef
-        assert inner is not None
-        instance_type = inner.instance_type or "Object"
-        return self.declare_type(
-            TypeDef(
-                instance_type=instance_type,  # ?
-                name="uri_{}_{}_{}_{}".format(
-                    inner.name, scoped_id, vocab_term, ref_scope
-                ),
-                init="new UriLoader({}, {}, {}, {})".format(
-                    inner.name,
-                    self.to_java(scoped_id),
-                    self.to_java(vocab_term),
-                    self.to_java(ref_scope),
-                ),
-                is_uri=True,
-                scoped_id=scoped_id,
-                ref_scope=ref_scope,
-                loader_type="Loader<{}>".format(instance_type),
-            )
-        )
-
-    def idmap_loader(self, field, inner, map_subject, map_predicate):
-        # type: (Text, TypeDef, Text, Union[Text, None]) -> TypeDef
-        assert inner is not None
-        instance_type = inner.instance_type or "Object"
-        return self.declare_type(
-            TypeDef(
-                instance_type=instance_type,
-                name="idmap_{}_{}".format(self.safe_name(field), inner.name),
-                init='new IdMapLoader({}, "{}", "{}")'.format(
-                    inner.name, map_subject, map_predicate
-                ),
-                loader_type="Loader<{}>".format(instance_type),
-            )
-        )
-
-    def typedsl_loader(self, inner, ref_scope):
-        # type: (TypeDef, Union[int, None]) -> TypeDef
-        assert inner is not None
-        instance_type = inner.instance_type or "Object"
-        return self.declare_type(
-            TypeDef(
-                instance_type=instance_type,
-                name="typedsl_{}_{}".format(inner.name, ref_scope),
-                init="new TypeDslLoader({}, {})".format(inner.name, ref_scope),
-                loader_type="Loader<{}>".format(instance_type),
-            )
-        )
-
-        return inner
-
-    def to_java(self, val):  # type: (Any) -> Any
-        if val is True:
-            return "true"
-        elif val is None:
-            return "null"
-        elif val is False:
-            return "false"
-        return val
-
-    def epilogue(self, root_loader):  # type: (TypeDef) -> None
-        pd = u"This project contains Java objects and utilities "
-        pd = pd + ' auto-generated by <a href="https://github.com/'
-        pd = pd + 'common-workflow-language/schema_salad">Schema Salad</a>'
-        pd = pd + " for parsing documents corresponding to the "
-        pd = pd + str(self.base_uri) + " schema."
-
-        template_vars = dict(
-            base_uri=self.base_uri,
-            package=self.package,
-            group_id=self.package,
-            artifact_id=self.artifact,
-            version="0.0.1-SNAPSHOT",
-            project_name=self.package,
-            project_description=pd,
-            license_name="Apache License, Version 2.0",
-            license_url="https://www.apache.org/licenses/LICENSE-2.0.txt",
-        )  # type: MutableMapping[Text, Text]
-
-        def template_from_resource(resource):
-            # type: (str) -> string.Template
-            template_str = pkg_resources.resource_string(
-                __name__, "java/%s" % resource
-            ).decode("utf-8")
-            template = string.Template(template_str)
-            return template
-
-        def expand_resource_template_to(resource, path):
-            # type: (str, str) -> None
-            template = template_from_resource(resource)
-            src = template.safe_substitute(template_vars)
-            _ensure_directory_and_write(path, src)
-
-        expand_resource_template_to("pom.xml", os.path.join(self.target_dir, "pom.xml"))
-        expand_resource_template_to(
-            "gitignore", os.path.join(self.target_dir, ".gitignore")
-        )
-        expand_resource_template_to(
-            "package.html", os.path.join(self.main_src_dir, "package.html")
-        )
-        expand_resource_template_to(
-            "overview.html",
-            os.path.join(self.target_dir, "src", "main", "javadoc", "overview.html"),
-        )
-        expand_resource_template_to(
-            "MANIFEST.MF",
-            os.path.join(
-                self.target_dir, "src", "main", "resources", "META-INF", "MANIFEST.MF"
-            ),
-        )
-        expand_resource_template_to(
-            "README.md", os.path.join(self.target_dir, "README.md"),
-        )
-
-        vocab = ""
-        rvocab = ""
-        for k in sorted(self.vocab.keys()):
-            vocab += """    vocab.put("{}", "{}");\n""".format(k, self.vocab[k])
-            rvocab += """    rvocab.put("{}", "{}");\n""".format(self.vocab[k], k)
-
-        loader_instances = ""
-        for _, collected_type in iteritems(self.collected_types):
-            loader_instances += "  public static {} {} = {};\n".format(
-                collected_type.loader_type, collected_type.name, collected_type.init
-            )
-
-        example_tests = ""
-        if self.examples:
-            _safe_makedirs(self.test_resources_dir)
-            utils_resources = os.path.join(self.test_resources_dir, "utils")
-            if os.path.exists(utils_resources):
-                shutil.rmtree(utils_resources)
-            shutil.copytree(self.examples, utils_resources)
-            for example_name in os.listdir(self.examples):
-                if example_name.startswith("valid"):
-                    basename = os.path.basename(example_name).split(".", 1)[0]
-                    example_tests += """
-  @org.junit.Test
-  public void test{basename}ByString() throws Exception {{
-    String path = java.nio.file.Paths.get(".").toAbsolutePath().normalize().toString();
-    String baseUri = Uris.fileUri(path) + "/";
-    java.net.URL url = getClass().getResource("{example_name}");
-    java.nio.file.Path resPath = java.nio.file.Paths.get(url.toURI());
-    String yaml = new String(java.nio.file.Files.readAllBytes(resPath), "UTF8");
-    RootLoader.loadDocument(yaml, baseUri);
-  }}
-
-  @org.junit.Test
-  public void test{basename}ByPath() throws Exception {{
-    java.net.URL url = getClass().getResource("{example_name}");
-    java.nio.file.Path resPath = java.nio.file.Paths.get(url.toURI());
-    RootLoader.loadDocument(resPath);
-  }}
-
-  @org.junit.Test
-  public void test{basename}ByMap() throws Exception {{
-    java.net.URL url = getClass().getResource("{example_name}");
-    java.nio.file.Path resPath = java.nio.file.Paths.get(url.toURI());
-    String yaml = new String(java.nio.file.Files.readAllBytes(resPath), "UTF8");
-    java.util.Map<String, Object> doc;
-    doc = (java.util.Map<String, Object>) YamlUtils.mapFromString(yaml);
-    RootLoader.loadDocument(doc);
-  }}""".format(
-                        basename=basename, example_name=example_name,
-                    )
-
-        template_args = dict(
-            package=self.package,
-            vocab=vocab,
-            rvocab=rvocab,
-            loader_instances=loader_instances,
-            root_loader_name=root_loader.name,
-            root_loader_instance_type=root_loader.instance_type or "Object",
-            example_tests=example_tests,
-        )  # type: MutableMapping[Text, Text]
-
-        util_src_dirs = {
-            "main_utils": self.main_src_dir,
-            "test_utils": self.test_src_dir,
-        }
-        for (util_src, util_target) in util_src_dirs.items():
-            for util in pkg_resources.resource_listdir(__name__, "java/%s" % util_src):
-                src_path = os.path.join(util_target, "utils", util)
-                src_template = template_from_resource(os.path.join(util_src, util))
-                src = src_template.safe_substitute(template_args)
-                _ensure_directory_and_write(src_path, src)