aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorArne H Juul <arnej@yahooinc.com>2022-03-14 15:24:33 +0000
committerArne H Juul <arnej@yahooinc.com>2022-03-16 05:29:38 +0000
commit21c66a719377d71a70de08bce3dcb42f2a59bfe5 (patch)
tree54e1c9e945e4aa52abd4c1f77fa31aea36712f47
parent6cf076486ffc704f3ceb0e4041d3e4c2dc0b3a96 (diff)
get ReferenceDataType from NewDocumentType instance (again)
-rw-r--r--config-model/src/main/java/com/yahoo/documentmodel/NewDocumentType.java16
-rw-r--r--config-model/src/main/java/com/yahoo/searchdefinition/DocumentModelBuilder.java7
-rw-r--r--config-model/src/test/configmodel/types/references/documentmanager_refs_to_same_type.cfg8
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"