public ObjectMapper putMapper(Mapper mapper) {
   if (mapper instanceof AllFieldMapper.IncludeInAll) {
     ((AllFieldMapper.IncludeInAll) mapper).includeInAllIfNotSet(includeInAll);
   }
   synchronized (mutex) {
     mappers = mappers.copyAndPut(mapper.name(), mapper);
   }
   return this;
 }
 /** Return a new instance that contains the union of this and of the provided analyzers. */
 public FieldNameAnalyzer copyAndAddAll(
     Collection<? extends Map.Entry<String, Analyzer>> mappers) {
   CopyOnWriteHashMap<String, Analyzer> analyzers = this.analyzers;
   for (Map.Entry<String, Analyzer> entry : mappers) {
     Analyzer analyzer = entry.getValue();
     if (analyzer == null) {
       analyzer = defaultAnalyzer;
     }
     analyzers = analyzers.copyAndPut(entry.getKey(), analyzer);
   }
   return new FieldNameAnalyzer(analyzers, defaultAnalyzer);
 }
 /**
  * Put a new mapper. NOTE: this method must be called under the current {@link DocumentMapper}
  * lock if concurrent updates are expected.
  */
 public void putMapper(Mapper mapper) {
   if (mapper instanceof AllFieldMapper.IncludeInAll) {
     ((AllFieldMapper.IncludeInAll) mapper).includeInAllIfNotSet(includeInAll);
   }
   mappers = mappers.copyAndPut(mapper.simpleName(), mapper);
 }