code: private void indexMissingFields() {
        for (FieldDescriptor fieldDescriptor : messageContext.getMessageDescriptor().getFields()) {
           if (!messageContext.isFieldMarked(fieldDescriptor.getNumber())) {
              Object defaultValue = fieldDescriptor.getJavaType() == JavaType.MESSAGE
                    || fieldDescriptor.hasDefaultValue() ? fieldDescriptor.getDefaultValue() : null;
              IndexingMetadata indexingMetadata = messageContext.getMessageDescriptor().getProcessedAnnotation(IndexingMetadata.INDEXED_ANNOTATION);
              FieldMapping fieldMapping = indexingMetadata != null ? indexingMetadata.getFieldMapping(fieldDescriptor.getName()) : null;
              if (indexingMetadata == null && isLegacyIndexingEnabled || fieldMapping != null && fieldMapping.index()) {
                 addFieldToDocument(fieldDescriptor, defaultValue, fieldMapping);
              }
           }
        }
     }
docs: All fields that were not seen until the end of this message are missing and will be indexed with their default
  value or null if none was declared. The null value is replaced with a special null token placeholder because
  Lucene cannot index nulls.