public org.box2d.proto.Box2D.PbShape buildPartial() {
        org.box2d.proto.Box2D.PbShape result = new org.box2d.proto.Box2D.PbShape(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.tag_ = tag_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.type_ = type_;
        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
          to_bitField0_ |= 0x00000004;
        }
        if (centerBuilder_ == null) {
          result.center_ = center_;
        } else {
          result.center_ = centerBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
          to_bitField0_ |= 0x00000008;
        }
        result.radius_ = radius_;
        if (pointsBuilder_ == null) {
          if (((bitField0_ & 0x00000010) == 0x00000010)) {
            points_ = java.util.Collections.unmodifiableList(points_);
            bitField0_ = (bitField0_ & ~0x00000010);
          }
          result.points_ = points_;
        } else {
          result.points_ = pointsBuilder_.build();
        }
        if (normalsBuilder_ == null) {
          if (((bitField0_ & 0x00000020) == 0x00000020)) {
            normals_ = java.util.Collections.unmodifiableList(normals_);
            bitField0_ = (bitField0_ & ~0x00000020);
          }
          result.normals_ = normals_;
        } else {
          result.normals_ = normalsBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000040) == 0x00000040)) {
          to_bitField0_ |= 0x00000010;
        }
        if (centroidBuilder_ == null) {
          result.centroid_ = centroid_;
        } else {
          result.centroid_ = centroidBuilder_.build();
        }
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }