class UriBuilderImpl extends UriBuilder implements Cloneable {

    @Override
    public UriBuilder clone() { //NOPMD
        UriBuilderImpl builder = new UriBuilderImpl();
        builder.scheme = scheme;
        builder.userInfo = userInfo;
        builder.port = port;
        builder.host = host;
        builder.paths = new ArrayList<>(paths);
        builder.fragment = fragment;
        builder.query = new MetadataMap<>(query);
        builder.matrix = new MetadataMap<>(matrix);
        builder.schemeSpecificPart = schemeSpecificPart;
        builder.leadingSlash = leadingSlash;
        builder.originalPathEmpty = originalPathEmpty;
        builder.queryValueIsCollection = queryValueIsCollection;
        builder.resolvedEncodedTemplates =
            resolvedEncodedTemplates == null ? null : new HashMap<String, Object>(resolvedEncodedTemplates);
        builder.resolvedTemplates =
            resolvedTemplates == null ? null : new HashMap<String, Object>(resolvedTemplates);
        builder.resolvedTemplatesPathEnc =
            resolvedTemplatesPathEnc == null ? null : new HashMap<String, Object>(resolvedTemplatesPathEnc);
        builder.useArraySyntaxForQueryParams = useArraySyntaxForQueryParams;
        return builder;
    }

    public  UriBuilderImpl();
    public  UriBuilderImpl(Map<String, Object> properties);
    public  UriBuilderImpl(URI uri);

}