diff options
author | Arne H Juul <arnej@yahooinc.com> | 2022-03-14 19:57:01 +0000 |
---|---|---|
committer | Arne H Juul <arnej@yahooinc.com> | 2022-03-14 19:57:01 +0000 |
commit | d9a748627dbc2f935f554c50aa761aa1df16334f (patch) | |
tree | 6ab2a1f03ce3c7cf7c9748d6e8498d2481288306 /config-model | |
parent | f716ad215e1214b452fcd30fcdedeaf52654afa0 (diff) |
fix multi struct unit test
* avoid making new DataType instances when we can avoid it
* keep all replacements (use object identity not equals)
Diffstat (limited to 'config-model')
-rw-r--r-- | config-model/src/main/java/com/yahoo/searchdefinition/DocumentModelBuilder.java | 44 |
1 files changed, 31 insertions, 13 deletions
diff --git a/config-model/src/main/java/com/yahoo/searchdefinition/DocumentModelBuilder.java b/config-model/src/main/java/com/yahoo/searchdefinition/DocumentModelBuilder.java index b71e2498669..9e04a1fcc6c 100644 --- a/config-model/src/main/java/com/yahoo/searchdefinition/DocumentModelBuilder.java +++ b/config-model/src/main/java/com/yahoo/searchdefinition/DocumentModelBuilder.java @@ -190,11 +190,14 @@ public class DocumentModelBuilder { } // This is how you make a "Pair" class in java.... - private static class TypeReplacement extends AbstractMap.SimpleEntry<DataType,DataType> { - DataType oldType() { return getKey(); } - DataType newType() { return getValue(); } + private static class TypeReplacement { + private final DataType oldType; + private final DataType newType; + DataType oldType() { return oldType; } + DataType newType() { return newType; } public TypeReplacement(DataType oldType, DataType newType) { - super(oldType, newType); + this.oldType = oldType; + this.newType = newType; } } @@ -236,6 +239,11 @@ public class DocumentModelBuilder { private static DataType resolveTemporariesRecurse(DataType type, DataTypeCollection repo, Collection<NewDocumentType> docs, Set<TypeReplacement> replacements) { + for (var repl : replacements) { + if (repl.oldType() == type) { + return repl.newType(); + } + } DataType original = type; if (type instanceof TemporaryStructuredDataType) { DataType other = repo.getDataType(type.getId()); @@ -273,21 +281,31 @@ public class DocumentModelBuilder { } else if (type instanceof MapDataType) { MapDataType t = (MapDataType) type; - var kt = resolveTemporariesRecurse(t.getKeyType(), repo, docs, replacements); - var vt = resolveTemporariesRecurse(t.getValueType(), repo, docs, replacements); - type = new MapDataType(kt, vt, t.getId()); + var old_kt = t.getKeyType(); + var old_vt = t.getValueType(); + var kt = resolveTemporariesRecurse(old_kt, repo, docs, replacements); + var vt = resolveTemporariesRecurse(old_vt, repo, docs, replacements); + if (kt != old_kt || vt != old_vt) { + type = new MapDataType(kt, vt, t.getId()); + } } else if (type instanceof ArrayDataType) { ArrayDataType t = (ArrayDataType) type; - var nt = resolveTemporariesRecurse(t.getNestedType(), repo, docs, replacements); - type = new ArrayDataType(nt, t.getId()); + var old_nt = t.getNestedType(); + var nt = resolveTemporariesRecurse(old_nt, repo, docs, replacements); + if (nt != old_nt) { + type = new ArrayDataType(nt, t.getId()); + } } else if (type instanceof WeightedSetDataType) { WeightedSetDataType t = (WeightedSetDataType) type; - var nt = resolveTemporariesRecurse(t.getNestedType(), repo, docs, replacements); - boolean c = t.createIfNonExistent(); - boolean r = t.removeIfZero(); - type = new WeightedSetDataType(nt, c, r, t.getId()); + var old_nt = t.getNestedType(); + var nt = resolveTemporariesRecurse(old_nt, repo, docs, replacements); + if (nt != old_nt) { + boolean c = t.createIfNonExistent(); + boolean r = t.removeIfZero(); + type = new WeightedSetDataType(nt, c, r, t.getId()); + } } else if (type instanceof ReferenceDataType) { ReferenceDataType t = (ReferenceDataType) type; |