code: function URI(
      rawScheme,
      rawCredentials, rawDomain, port,
      rawPath, rawQuery, rawFragment) {
    this.scheme_ = rawScheme;
    this.credentials_ = rawCredentials;
    this.domain_ = rawDomain;
    this.port_ = port;
    this.path_ = rawPath;
    this.query_ = rawQuery;
    this.fragment_ = rawFragment;
    /**
     * @type {Array|null}
     */
    this.paramCache_ = null;
  }
docs: a mutable URI.
  
  This class contains setters and getters for the parts of the URI.
  The <tt>getXYZ</tt>/<tt>setXYZ</tt> methods return the decoded part -- so
  <code>uri.parse('/foo%20bar').getPath()</code> will return the decoded path,
  <tt>/foo bar</tt>.
  
  <p>The raw versions of fields are available too.
  <code>uri.parse('/foo%20bar').getRawPath()</code> will return the raw path,
  <tt>/foo%20bar</tt>.  Use the raw setters with care, since
  <code>URI::toString</code> is not guaranteed to return a valid url if a
  raw setter was used.
  
  <p>All setters return <tt>this</tt> and so may be chained, a la
  <code>uri.parse('/foo').setFragment('part').toString()</code>.
  
  <p>You should not use this constructor directly -- please prefer the factory
  functions {@link uri.parse}, {@link uri.create}, {@link uri.resolve}
  instead.</p>
  
  <p>The parameters are all raw (assumed to be properly escaped) parts, and
  any (but not all) may be null.  Undefined is not allowed.</p>
  
  @constructor