diff options
author | Arne H Juul <arnej@yahooinc.com> | 2022-03-14 15:24:33 +0000 |
---|---|---|
committer | Arne H Juul <arnej@yahooinc.com> | 2022-03-16 05:29:38 +0000 |
commit | 21c66a719377d71a70de08bce3dcb42f2a59bfe5 (patch) | |
tree | 54e1c9e945e4aa52abd4c1f77fa31aea36712f47 | |
parent | 6cf076486ffc704f3ceb0e4041d3e4c2dc0b3a96 (diff) |
get ReferenceDataType from NewDocumentType instance (again)
3 files changed, 22 insertions, 9 deletions
diff --git a/config-model/src/main/java/com/yahoo/documentmodel/NewDocumentType.java b/config-model/src/main/java/com/yahoo/documentmodel/NewDocumentType.java index d98869e9dd3..4ff54d7ff1c 100644 --- a/config-model/src/main/java/com/yahoo/documentmodel/NewDocumentType.java +++ b/config-model/src/main/java/com/yahoo/documentmodel/NewDocumentType.java @@ -4,8 +4,10 @@ package com.yahoo.documentmodel; import com.yahoo.document.DataType; import com.yahoo.document.Document; import com.yahoo.document.Field; +import com.yahoo.document.ReferenceDataType; import com.yahoo.document.StructDataType; import com.yahoo.document.StructuredDataType; +import com.yahoo.document.TemporaryStructuredDataType; import com.yahoo.document.annotation.AnnotationType; import com.yahoo.document.annotation.AnnotationTypeRegistry; import com.yahoo.document.datatypes.FieldValue; @@ -383,4 +385,18 @@ public final class NewDocumentType extends StructuredDataType implements DataTyp } + private ReferenceDataType refToThis = null; + + @SuppressWarnings("deprecation") + public ReferenceDataType getReferenceDataType() { + if (refToThis == null) { + // super ugly, the APIs for this are horribly inconsistent + var tmptmp = TemporaryStructuredDataType.create(getName()); + var tmp = ReferenceDataType.createWithInferredId(tmptmp); + tmp.setTargetType((StructuredDataType) this); + refToThis = tmp; + } + return refToThis; + } + } 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 9b92f1aa80c..931fd46ed83 100644 --- a/config-model/src/main/java/com/yahoo/searchdefinition/DocumentModelBuilder.java +++ b/config-model/src/main/java/com/yahoo/searchdefinition/DocumentModelBuilder.java @@ -306,10 +306,9 @@ public class DocumentModelBuilder { } else if (type instanceof ReferenceDataType) { ReferenceDataType t = (ReferenceDataType) type; - if (t.getTargetType() instanceof TemporaryStructuredDataType) { - DataType targetType = resolveTemporariesRecurse(t.getTargetType(), repo, docs, replacements); - t.setTargetType((StructuredDataType) targetType); - } + var tt = t.getTargetType(); + var doc = getDocumentType(docs, tt.getId()); + type = doc.getReferenceDataType(); } if (type != original) { replacements.put(original, type); diff --git a/config-model/src/test/configmodel/types/references/documentmanager_refs_to_same_type.cfg b/config-model/src/test/configmodel/types/references/documentmanager_refs_to_same_type.cfg index 876ed00d0c4..ef1bb4c5ad4 100644 --- a/config-model/src/test/configmodel/types/references/documentmanager_refs_to_same_type.cfg +++ b/config-model/src/test/configmodel/types/references/documentmanager_refs_to_same_type.cfg @@ -47,8 +47,6 @@ doctype[1].fieldsets{[document]}.fields[0] "campaign_ref" doctype[1].fieldsets{[document]}.fields[1] "other_campaign_ref" doctype[1].documentref[0].idx 10017 doctype[1].documentref[0].targettype 10018 -doctype[1].documentref[1].idx 10019 -doctype[1].documentref[1].targettype 10018 doctype[1].structtype[0].idx 10016 doctype[1].structtype[0].name "ad.header" doctype[1].structtype[0].field[0].name "campaign_ref" @@ -56,10 +54,10 @@ doctype[1].structtype[0].field[0].internalid 23963250 doctype[1].structtype[0].field[0].type 10017 doctype[1].structtype[0].field[1].name "other_campaign_ref" doctype[1].structtype[0].field[1].internalid 874751172 -doctype[1].structtype[0].field[1].type 10019 +doctype[1].structtype[0].field[1].type 10017 doctype[2].name "campaign" doctype[2].idx 10018 doctype[2].inherits[0].idx 10000 -doctype[2].contentstruct 10020 -doctype[2].structtype[0].idx 10020 +doctype[2].contentstruct 10019 +doctype[2].structtype[0].idx 10019 doctype[2].structtype[0].name "campaign.header" |