summaryrefslogtreecommitdiffstats
path: root/config-model
diff options
context:
space:
mode:
authorArne H Juul <arnej@yahooinc.com>2022-03-14 19:57:01 +0000
committerArne H Juul <arnej@yahooinc.com>2022-03-14 19:57:01 +0000
commitd9a748627dbc2f935f554c50aa761aa1df16334f (patch)
tree6ab2a1f03ce3c7cf7c9748d6e8498d2481288306 /config-model
parentf716ad215e1214b452fcd30fcdedeaf52654afa0 (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.java44
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;