|
@@ -454,11 +454,6 @@ public class ObjectMapper extends Mapper {
|
|
|
return subobjects.value();
|
|
|
}
|
|
|
|
|
|
- @Override
|
|
|
- public ObjectMapper merge(Mapper mergeWith, MapperMergeContext mapperMergeContext) {
|
|
|
- return merge(mergeWith, MergeReason.MAPPING_UPDATE, mapperMergeContext);
|
|
|
- }
|
|
|
-
|
|
|
@Override
|
|
|
public void validate(MappingLookup mappers) {
|
|
|
for (Mapper mapper : this.mappers.values()) {
|
|
@@ -470,7 +465,8 @@ public class ObjectMapper extends Mapper {
|
|
|
return mapperMergeContext.createChildContext(name, dynamic);
|
|
|
}
|
|
|
|
|
|
- public ObjectMapper merge(Mapper mergeWith, MergeReason reason, MapperMergeContext parentMergeContext) {
|
|
|
+ @Override
|
|
|
+ public ObjectMapper merge(Mapper mergeWith, MapperMergeContext parentMergeContext) {
|
|
|
if (mergeWith instanceof ObjectMapper == false) {
|
|
|
MapperErrors.throwObjectMappingConflictError(mergeWith.name());
|
|
|
}
|
|
@@ -478,11 +474,7 @@ public class ObjectMapper extends Mapper {
|
|
|
// TODO stop NestedObjectMapper extending ObjectMapper?
|
|
|
MapperErrors.throwNestedMappingConflictError(mergeWith.name());
|
|
|
}
|
|
|
- return merge((ObjectMapper) mergeWith, reason, parentMergeContext);
|
|
|
- }
|
|
|
-
|
|
|
- ObjectMapper merge(ObjectMapper mergeWith, MergeReason reason, MapperMergeContext parentMergeContext) {
|
|
|
- var mergeResult = MergeResult.build(this, mergeWith, reason, parentMergeContext);
|
|
|
+ var mergeResult = MergeResult.build(this, (ObjectMapper) mergeWith, parentMergeContext);
|
|
|
return new ObjectMapper(
|
|
|
simpleName(),
|
|
|
fullPath,
|
|
@@ -499,13 +491,9 @@ public class ObjectMapper extends Mapper {
|
|
|
ObjectMapper.Dynamic dynamic,
|
|
|
Map<String, Mapper> mappers
|
|
|
) {
|
|
|
- static MergeResult build(
|
|
|
- ObjectMapper existing,
|
|
|
- ObjectMapper mergeWithObject,
|
|
|
- MergeReason reason,
|
|
|
- MapperMergeContext parentMergeContext
|
|
|
- ) {
|
|
|
+ static MergeResult build(ObjectMapper existing, ObjectMapper mergeWithObject, MapperMergeContext parentMergeContext) {
|
|
|
final Explicit<Boolean> enabled;
|
|
|
+ final MergeReason reason = parentMergeContext.getMapperBuilderContext().getMergeReason();
|
|
|
if (mergeWithObject.enabled.explicit()) {
|
|
|
if (reason == MergeReason.INDEX_TEMPLATE) {
|
|
|
enabled = mergeWithObject.enabled;
|
|
@@ -532,13 +520,7 @@ public class ObjectMapper extends Mapper {
|
|
|
subObjects = existing.subobjects;
|
|
|
}
|
|
|
MapperMergeContext objectMergeContext = existing.createChildContext(parentMergeContext, existing.simpleName());
|
|
|
- Map<String, Mapper> mergedMappers = buildMergedMappers(
|
|
|
- existing,
|
|
|
- mergeWithObject,
|
|
|
- reason,
|
|
|
- objectMergeContext,
|
|
|
- subObjects.value()
|
|
|
- );
|
|
|
+ Map<String, Mapper> mergedMappers = buildMergedMappers(existing, mergeWithObject, objectMergeContext, subObjects.value());
|
|
|
return new MergeResult(
|
|
|
enabled,
|
|
|
subObjects,
|
|
@@ -550,7 +532,6 @@ public class ObjectMapper extends Mapper {
|
|
|
private static Map<String, Mapper> buildMergedMappers(
|
|
|
ObjectMapper existing,
|
|
|
ObjectMapper mergeWithObject,
|
|
|
- MergeReason reason,
|
|
|
MapperMergeContext objectMergeContext,
|
|
|
boolean subobjects
|
|
|
) {
|
|
@@ -576,11 +557,11 @@ public class ObjectMapper extends Mapper {
|
|
|
} else if (objectMergeContext.decrementFieldBudgetIfPossible(mergeWithMapper.getTotalFieldsCount())) {
|
|
|
putMergedMapper(mergedMappers, mergeWithMapper);
|
|
|
} else if (mergeWithMapper instanceof ObjectMapper om) {
|
|
|
- putMergedMapper(mergedMappers, truncateObjectMapper(reason, objectMergeContext, om));
|
|
|
+ putMergedMapper(mergedMappers, truncateObjectMapper(objectMergeContext, om));
|
|
|
}
|
|
|
} else if (mergeIntoMapper instanceof ObjectMapper objectMapper) {
|
|
|
assert subobjects : "existing object mappers are supposed to be flattened if subobjects is false";
|
|
|
- putMergedMapper(mergedMappers, objectMapper.merge(mergeWithMapper, reason, objectMergeContext));
|
|
|
+ putMergedMapper(mergedMappers, objectMapper.merge(mergeWithMapper, objectMergeContext));
|
|
|
} else {
|
|
|
assert mergeIntoMapper instanceof FieldMapper || mergeIntoMapper instanceof FieldAliasMapper;
|
|
|
if (mergeWithMapper instanceof NestedObjectMapper) {
|
|
@@ -591,7 +572,7 @@ public class ObjectMapper extends Mapper {
|
|
|
|
|
|
// If we're merging template mappings when creating an index, then a field definition always
|
|
|
// replaces an existing one.
|
|
|
- if (reason == MergeReason.INDEX_TEMPLATE) {
|
|
|
+ if (objectMergeContext.getMapperBuilderContext().getMergeReason() == MergeReason.INDEX_TEMPLATE) {
|
|
|
putMergedMapper(mergedMappers, mergeWithMapper);
|
|
|
} else {
|
|
|
putMergedMapper(mergedMappers, mergeIntoMapper.merge(mergeWithMapper, objectMergeContext));
|
|
@@ -607,13 +588,13 @@ public class ObjectMapper extends Mapper {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- private static ObjectMapper truncateObjectMapper(MergeReason reason, MapperMergeContext context, ObjectMapper objectMapper) {
|
|
|
+ private static ObjectMapper truncateObjectMapper(MapperMergeContext context, ObjectMapper objectMapper) {
|
|
|
// there's not enough capacity for the whole object mapper,
|
|
|
// so we're just trying to add the shallow object, without it's sub-fields
|
|
|
ObjectMapper shallowObjectMapper = objectMapper.withoutMappers();
|
|
|
if (context.decrementFieldBudgetIfPossible(shallowObjectMapper.getTotalFieldsCount())) {
|
|
|
// now trying to add the sub-fields one by one via a merge, until we hit the limit
|
|
|
- return shallowObjectMapper.merge(objectMapper, reason, context);
|
|
|
+ return shallowObjectMapper.merge(objectMapper, context);
|
|
|
}
|
|
|
return null;
|
|
|
}
|