private void execute(Polygon polygon) {
   LinearRing ring = null;
   if (index.isExteriorRing()) {
     ring = polygon.getExteriorRing();
     if (ring == null) {
       ring = polygon.getGeometryFactory().createLinearRing(new Coordinate[] {coordinate});
       setExteriorRing(polygon, ring);
     } else {
       setExteriorRing(polygon, (LinearRing) execute(ring));
     }
   } else if (index.getInteriorRingIndex() >= 0) {
     if (index.getGeometryIndex() >= polygon.getNumInteriorRing()) {
       LinearRing[] interiorRings = new LinearRing[polygon.getNumInteriorRing() + 1];
       for (int i = 0; i < polygon.getNumInteriorRing(); i++) {
         interiorRings[i] = polygon.getInteriorRingN(i);
       }
       interiorRings[polygon.getNumInteriorRing()] =
           polygon.getGeometryFactory().createLinearRing(new Coordinate[] {coordinate});
       setInteriorRings(polygon, interiorRings);
     } else {
       ring = polygon.getInteriorRingN(index.getInteriorRingIndex());
       LineString lineString = execute(ring);
       setInteriorRingN(polygon, (LinearRing) lineString, index.getInteriorRingIndex());
     }
   }
 }