summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJon Bratseth <bratseth@gmail.com>2022-03-21 09:02:18 +0100
committerGitHub <noreply@github.com>2022-03-21 09:02:18 +0100
commit6dc4b8fefbb9d1cc09630c353bedfa339d215128 (patch)
treeeaae9cdf6b8c6964e5a469eec223181ff7c1bc30
parentfe9d264b1238c36f694ce910eb4795302831c33e (diff)
parentcd713c7f93ec2a2015f7691bdb71c7e667fd4ea6 (diff)
Merge pull request #21755 from vespa-engine/arnej/minor-cleanup-2
Arnej/minor cleanup 2
-rw-r--r--config-model/src/main/java/com/yahoo/searchdefinition/DocumentModelBuilder.java42
1 files changed, 17 insertions, 25 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..4660b81ff72 100644
--- a/config-model/src/main/java/com/yahoo/searchdefinition/DocumentModelBuilder.java
+++ b/config-model/src/main/java/com/yahoo/searchdefinition/DocumentModelBuilder.java
@@ -189,18 +189,6 @@ public class DocumentModelBuilder {
}
}
- // This is how you make a "Pair" class in java....
- private static class TypeReplacement {
- private final DataType oldType;
- private final DataType newType;
- DataType oldType() { return oldType; }
- DataType newType() { return newType; }
- public TypeReplacement(DataType oldType, DataType newType) {
- this.oldType = oldType;
- this.newType = newType;
- }
- }
-
private static String descT(DataType type) {
if (type == null) { return "<null>"; }
return "'" + type.getName() + "' [" + type.getId() + "] {"+type.getClass() + "}";
@@ -215,6 +203,7 @@ public class DocumentModelBuilder {
Map<DataType, DataType> replacements = new IdentityHashMap<>();
for(NewDocumentType doc : lst) {
resolveTemporaries(doc.getAllTypes(), lst, replacements);
+ resolveTemporariesRecurse(doc.getContentStruct(), doc.getAllTypes(), lst, replacements);
}
for(NewDocumentType doc : lst) {
for (var entry : replacements.entrySet()) {
@@ -245,36 +234,39 @@ public class DocumentModelBuilder {
if (type instanceof TemporaryStructuredDataType) {
DataType other = repo.getDataType(type.getId());
if (other == null || other == type) {
- other = getDocumentType(docs, type.getId());
+ other = getDocumentType(docs, type.getName());
}
if (other != null) {
type = other;
}
} else if (type instanceof DocumentType) {
- DataType other = getDocumentType(docs, type.getId());
+ DataType other = getDocumentType(docs, type.getName());
if (other != null) {
type = other;
- } else if (! type.getName().equals("document")) {
+ } else if (type != DataType.DOCUMENT) {
throw new IllegalArgumentException
("Can not handle nested document definitions. Undefined document type: " + type.toString());
}
} else if (type instanceof NewDocumentType) {
- DataType other = getDocumentType(docs, type.getId());
+ DataType other = getDocumentType(docs, type.getName());
if (other != null) {
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;
@@ -306,7 +298,7 @@ public class DocumentModelBuilder {
}
else if (type instanceof NewDocumentReferenceDataType) {
var t = (NewDocumentReferenceDataType) type;
- var doc = getDocumentType(docs, t.getTargetTypeId());
+ var doc = getDocumentType(docs, t.getTargetTypeName());
type = doc.getReferenceDataType();
}
if (type != original) {
@@ -315,9 +307,9 @@ public class DocumentModelBuilder {
return type;
}
- private static NewDocumentType getDocumentType(Collection<NewDocumentType> docs, int id) {
+ private static NewDocumentType getDocumentType(Collection<NewDocumentType> docs, String name) {
for (NewDocumentType doc : docs) {
- if (doc.getId() == id) {
+ if (doc.getName().equals(name)) {
return doc;
}
}