public Builder mergeFrom(org.box2d.proto.Box2D.PbJoint other) {
        if (other == org.box2d.proto.Box2D.PbJoint.getDefaultInstance()) return this;
        if (other.hasTag()) {
          setTag(other.getTag());
        }
        if (other.hasType()) {
          setType(other.getType());
        }
        if (other.hasBodyA()) {
          setBodyA(other.getBodyA());
        }
        if (other.hasBodyB()) {
          setBodyB(other.getBodyB());
        }
        if (other.hasCollideConnected()) {
          setCollideConnected(other.getCollideConnected());
        }
        if (other.hasLocalAnchorA()) {
          mergeLocalAnchorA(other.getLocalAnchorA());
        }
        if (other.hasLocalAnchorB()) {
          mergeLocalAnchorB(other.getLocalAnchorB());
        }
        if (other.hasRefAngle()) {
          setRefAngle(other.getRefAngle());
        }
        if (other.hasEnableLimit()) {
          setEnableLimit(other.getEnableLimit());
        }
        if (other.hasLowerLimit()) {
          setLowerLimit(other.getLowerLimit());
        }
        if (other.hasUpperLimit()) {
          setUpperLimit(other.getUpperLimit());
        }
        if (other.hasEnableMotor()) {
          setEnableMotor(other.getEnableMotor());
        }
        if (other.hasMotorSpeed()) {
          setMotorSpeed(other.getMotorSpeed());
        }
        if (other.hasMaxMotorTorque()) {
          setMaxMotorTorque(other.getMaxMotorTorque());
        }
        if (other.hasLocalAxisA()) {
          mergeLocalAxisA(other.getLocalAxisA());
        }
        if (other.hasMaxMotorForce()) {
          setMaxMotorForce(other.getMaxMotorForce());
        }
        if (other.hasLength()) {
          setLength(other.getLength());
        }
        if (other.hasFrequency()) {
          setFrequency(other.getFrequency());
        }
        if (other.hasDampingRatio()) {
          setDampingRatio(other.getDampingRatio());
        }
        if (other.hasGroundAnchorA()) {
          mergeGroundAnchorA(other.getGroundAnchorA());
        }
        if (other.hasGroundAnchorB()) {
          mergeGroundAnchorB(other.getGroundAnchorB());
        }
        if (other.hasLengthA()) {
          setLengthA(other.getLengthA());
        }
        if (other.hasLengthB()) {
          setLengthB(other.getLengthB());
        }
        if (other.hasRatio()) {
          setRatio(other.getRatio());
        }
        if (other.hasMaxLengthA()) {
          setMaxLengthA(other.getMaxLengthA());
        }
        if (other.hasMaxLengthB()) {
          setMaxLengthB(other.getMaxLengthB());
        }
        if (other.hasTarget()) {
          mergeTarget(other.getTarget());
        }
        if (other.hasMaxForce()) {
          setMaxForce(other.getMaxForce());
        }
        if (other.hasJoint1()) {
          setJoint1(other.getJoint1());
        }
        if (other.hasJoint2()) {
          setJoint2(other.getJoint2());
        }
        if (other.hasSpringFrequency()) {
          setSpringFrequency(other.getSpringFrequency());
        }
        if (other.hasSpringDampingRatio()) {
          setSpringDampingRatio(other.getSpringDampingRatio());
        }
        if (other.hasMaxTorque()) {
          setMaxTorque(other.getMaxTorque());
        }
        if (other.hasMaxLength()) {
          setMaxLength(other.getMaxLength());
        }
        if (!other.bodies_.isEmpty()) {
          if (bodies_.isEmpty()) {
            bodies_ = other.bodies_;
            bitField1_ = (bitField1_ & ~0x00000004);
          } else {
            ensureBodiesIsMutable();
            bodies_.addAll(other.bodies_);
          }
          onChanged();
        }
        if (!other.joints_.isEmpty()) {
          if (joints_.isEmpty()) {
            joints_ = other.joints_;
            bitField1_ = (bitField1_ & ~0x00000008);
          } else {
            ensureJointsIsMutable();
            joints_.addAll(other.joints_);
          }
          onChanged();
        }
        if (other.hasTargetVolume()) {
          setTargetVolume(other.getTargetVolume());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }