summaryrefslogtreecommitdiffstats
path: root/config-model/src/main/java/com/yahoo
diff options
context:
space:
mode:
authorArne H Juul <arnej@yahooinc.com>2022-03-20 17:29:07 +0000
committerArne H Juul <arnej@yahooinc.com>2022-03-20 17:29:33 +0000
commit116b72af7e0eaca7dff3bf205aae0ee56fad2b95 (patch)
tree40b5c0bcd089bc0b01282eb43e0689e6d0366dc1 /config-model/src/main/java/com/yahoo
parentf0c1612888321129bd781b5841573a9f84cb0478 (diff)
more generic way to avoid infinite recursion
Diffstat (limited to 'config-model/src/main/java/com/yahoo')
-rw-r--r--config-model/src/main/java/com/yahoo/searchdefinition/DocumentModelBuilder.java15
1 files changed, 9 insertions, 6 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 fb161cb8292..c6255905c8a 100644
--- a/config-model/src/main/java/com/yahoo/searchdefinition/DocumentModelBuilder.java
+++ b/config-model/src/main/java/com/yahoo/searchdefinition/DocumentModelBuilder.java
@@ -264,17 +264,20 @@ public class DocumentModelBuilder {
type = other;
}
} else if (type instanceof StructDataType) {
+ // trick avoids infinite recursion:
+ var old = replacements.put(original, type);
+ assert(old == null);
StructDataType dt = (StructDataType) type;
for (com.yahoo.document.Field field : dt.getFields()) {
var ft = field.getDataType();
- if (ft != type) {
- var newft = resolveTemporariesRecurse(ft, repo, docs, replacements);
- if (ft != newft) {
- // XXX deprecated:
- field.setDataType(newft);
- }
+ var newft = resolveTemporariesRecurse(ft, repo, docs, replacements);
+ if (ft != newft) {
+ // XXX deprecated:
+ field.setDataType(newft);
}
}
+ old = replacements.remove(original);
+ assert(old == type);
}
else if (type instanceof MapDataType) {
MapDataType t = (MapDataType) type;