summaryrefslogtreecommitdiffstats
path: root/config-model
diff options
context:
space:
mode:
authorArne H Juul <arnej@yahooinc.com>2022-02-17 18:03:58 +0000
committerArne H Juul <arnej@yahooinc.com>2022-02-17 18:16:06 +0000
commit3b26bf26dfe8c4b7343b85251b08f0c7b1a01cdc (patch)
tree6242b27de270a5a1fa4b9c8b62f174120a3bfb39 /config-model
parentccbd4c15ba8562b5f37faf23ebe4c9e1c34c19f1 (diff)
deprecate modifying types in-place
* instead of modifying a MapDataType or WeightedSetDataType instance in-place, make a new instance as necessary.
Diffstat (limited to 'config-model')
-rw-r--r--config-model/src/main/java/com/yahoo/searchdefinition/DocumentModelBuilder.java55
1 files changed, 39 insertions, 16 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 8b068381e07..a29d66dc8f2 100644
--- a/config-model/src/main/java/com/yahoo/searchdefinition/DocumentModelBuilder.java
+++ b/config-model/src/main/java/com/yahoo/searchdefinition/DocumentModelBuilder.java
@@ -1,6 +1,7 @@
// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
package com.yahoo.searchdefinition;
+import com.yahoo.document.ArrayDataType;
import com.yahoo.document.CollectionDataType;
import com.yahoo.document.DataType;
import com.yahoo.document.DocumentType;
@@ -10,6 +11,7 @@ import com.yahoo.document.ReferenceDataType;
import com.yahoo.document.StructDataType;
import com.yahoo.document.StructuredDataType;
import com.yahoo.document.TemporaryStructuredDataType;
+import com.yahoo.document.WeightedSetDataType;
import com.yahoo.document.annotation.AnnotationReferenceDataType;
import com.yahoo.document.annotation.AnnotationType;
import com.yahoo.documentmodel.DataTypeCollection;
@@ -258,12 +260,21 @@ public class DocumentModelBuilder {
}
else if (type instanceof MapDataType) {
MapDataType t = (MapDataType) type;
- t.setKeyType(resolveTemporariesRecurse(t.getKeyType(), repo, docs, replacements));
- t.setValueType(resolveTemporariesRecurse(t.getValueType(), repo, docs, replacements));
- }
- else if (type instanceof CollectionDataType) {
- CollectionDataType t = (CollectionDataType) type;
- t.setNestedType(resolveTemporariesRecurse(t.getNestedType(), repo, docs, replacements));
+ var kt = resolveTemporariesRecurse(t.getKeyType(), repo, docs, replacements);
+ var vt = resolveTemporariesRecurse(t.getValueType(), repo, docs, replacements);
+ 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());
+ }
+ 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());
}
else if (type instanceof ReferenceDataType) {
ReferenceDataType t = (ReferenceDataType) type;
@@ -311,24 +322,36 @@ public class DocumentModelBuilder {
dataType = new AnnotationReferenceDataType(target);
addType(docType, dataType);
return dataType;
- } else if (dataType instanceof MapDataType) {
- MapDataType mapType = (MapDataType)dataType;
- DataType valueType = specialHandleAnnotationReferenceRecurse(docType, fieldName, mapType.getValueType());
+ }
+ else if (dataType instanceof MapDataType) {
+ MapDataType t = (MapDataType)dataType;
+ DataType valueType = specialHandleAnnotationReferenceRecurse(docType, fieldName, t.getValueType());
if (valueType == null) {
return null;
}
- mapType = mapType.clone();
- mapType.setValueType(valueType);
+ var mapType = new MapDataType(t.getKeyType(), valueType, t.getId());
addType(docType, mapType);
return mapType;
- } else if (dataType instanceof CollectionDataType) {
- CollectionDataType lstType = (CollectionDataType)dataType;
- DataType nestedType = specialHandleAnnotationReferenceRecurse(docType, fieldName, lstType.getNestedType());
+ }
+ else if (dataType instanceof ArrayDataType) {
+ ArrayDataType t = (ArrayDataType) dataType;
+ DataType nestedType = specialHandleAnnotationReferenceRecurse(docType, fieldName, t.getNestedType());
+ if (nestedType == null) {
+ return null;
+ }
+ var lstType = new ArrayDataType(nestedType, t.getId());
+ addType(docType, lstType);
+ return lstType;
+ }
+ else if (dataType instanceof WeightedSetDataType) {
+ WeightedSetDataType t = (WeightedSetDataType) dataType;
+ DataType nestedType = specialHandleAnnotationReferenceRecurse(docType, fieldName, t.getNestedType());
if (nestedType == null) {
return null;
}
- lstType = lstType.clone();
- lstType.setNestedType(nestedType);
+ boolean c = t.createIfNonExistent();
+ boolean r = t.removeIfZero();
+ var lstType = new WeightedSetDataType(nestedType, c, r, t.getId());
addType(docType, lstType);
return lstType;
}