diff options
author | Arne H Juul <arnej@yahooinc.com> | 2022-03-20 17:29:07 +0000 |
---|---|---|
committer | Arne H Juul <arnej@yahooinc.com> | 2022-03-20 17:29:33 +0000 |
commit | 116b72af7e0eaca7dff3bf205aae0ee56fad2b95 (patch) | |
tree | 40b5c0bcd089bc0b01282eb43e0689e6d0366dc1 /config-model/src/main/java/com/yahoo | |
parent | f0c1612888321129bd781b5841573a9f84cb0478 (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.java | 15 |
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; |