code: function (boundaries, attributes) {
              if (!Array.isArray(boundaries)) {
                  throw new ArgumentError(
                      Logger.logMessage(Logger.LEVEL_SEVERE, "SurfacePolygon", "constructor",
                          "The specified boundary is not an array."));
              }
  
              SurfaceShape.call(this, attributes);
  
              this._boundaries = boundaries;
  
              this._stateId = SurfacePolygon.stateId++;
          }
docs: Constructs a surface polygon.
  @alias SurfacePolygon
  @constructor
  @augments SurfaceShape
  @classdesc Represents a polygon draped over the terrain surface. The polygon may have multiple boundaries in
  order to define holes or empty regions.
  <p>
  SurfacePolygon uses the following attributes from its associated shape attributes bundle:
  <ul>
  <li>Draw interior</li>
  <li>Draw outline</li>
  <li>Interior color</li>
  <li>Outline color</li>
  <li>Outline width</li>
  <li>Outline stipple factor</li>
  <li>Outline stipple pattern</li>
  </ul>
  @param {Array} boundaries The polygons boundary locations. If this argument is an array of
  [Locations]{@link Location} they define this polygon's outer boundary. If it is an array of arrays of
  Locations then each array entry defines one of this polygon's boundaries.
  @param {ShapeAttributes} attributes The attributes to apply to this shape. May be null, in which case
  attributes must be set directly before the shape is drawn.
  
  @throws {ArgumentError} If the specified boundaries are null or undefined.