public Builder mergeFrom(com.google.protobuf.DescriptorProtos.FieldOptions other) {
        if (other == getDefaultInstance()) return this;
        if (other.hasCtype()) {
          setCtype(other.getCtype());
        }
        if (other.hasPacked()) {
          setPacked(other.getPacked());
        }
        if (other.hasLazy()) {
          setLazy(other.getLazy());
        }
        if (other.hasDeprecated()) {
          setDeprecated(other.getDeprecated());
        }
        if (other.hasExperimentalMapKey()) {
          bitField0_ |= 0x00000010;
          experimentalMapKey_ = other.experimentalMapKey_;
          onChanged();
        }
        if (other.hasWeak()) {
          setWeak(other.getWeak());
        }
        if (uninterpretedOptionBuilder_ == null) {
          if (!other.uninterpretedOption_.isEmpty()) {
            if (uninterpretedOption_.isEmpty()) {
              uninterpretedOption_ = other.uninterpretedOption_;
              bitField0_ = (bitField0_ & ~0x00000040);
            } else {
              ensureUninterpretedOptionIsMutable();
              uninterpretedOption_.addAll(other.uninterpretedOption_);
            }
            onChanged();
          }
        } else {
          if (!other.uninterpretedOption_.isEmpty()) {
            if (uninterpretedOptionBuilder_.isEmpty()) {
              uninterpretedOptionBuilder_.dispose();
              uninterpretedOptionBuilder_ = null;
              uninterpretedOption_ = other.uninterpretedOption_;
              bitField0_ = (bitField0_ & ~0x00000040);
              uninterpretedOptionBuilder_ = 
                alwaysUseFieldBuilders ?
                   getUninterpretedOptionFieldBuilder() : null;
            } else {
              uninterpretedOptionBuilder_.addAllMessages(other.uninterpretedOption_);
            }
          }
        }
        this.mergeExtensionFields(other);
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }