summaryrefslogtreecommitdiffstats
path: root/config-model
diff options
context:
space:
mode:
authorArne H Juul <arnej@yahooinc.com>2022-03-16 06:35:15 +0000
committerArne H Juul <arnej@yahooinc.com>2022-03-16 09:29:51 +0000
commit0b71369c5dd96cf040791603500db0b3bb981eb5 (patch)
tree200d9c128c9dcb68c619f8e236b3422d18cd02f1 /config-model
parent1fba743b1c9b8b290fc446cd22f8fcadac5fd1ee (diff)
add more resolveInherit APIs
Diffstat (limited to 'config-model')
-rw-r--r--config-model/src/main/java/com/yahoo/searchdefinition/parser/ParsedAnnotation.java20
-rw-r--r--config-model/src/main/java/com/yahoo/searchdefinition/parser/ParsedStruct.java11
2 files changed, 31 insertions, 0 deletions
diff --git a/config-model/src/main/java/com/yahoo/searchdefinition/parser/ParsedAnnotation.java b/config-model/src/main/java/com/yahoo/searchdefinition/parser/ParsedAnnotation.java
index 6f3d5a36616..3baac504135 100644
--- a/config-model/src/main/java/com/yahoo/searchdefinition/parser/ParsedAnnotation.java
+++ b/config-model/src/main/java/com/yahoo/searchdefinition/parser/ParsedAnnotation.java
@@ -14,6 +14,7 @@ class ParsedAnnotation extends ParsedBlock {
private ParsedStruct wrappedStruct = null;
private final List<String> inherited = new ArrayList<>();
+ private final List<ParsedAnnotation> resolvedInherits = new ArrayList<>();
private ParsedDocument ownedBy = null;
ParsedAnnotation(String name) {
@@ -21,10 +22,23 @@ class ParsedAnnotation extends ParsedBlock {
}
public List<String> getInherited() { return List.copyOf(inherited); }
+ public List<ParsedAnnotation> getResolvedInherits() {
+ assert(inherited.size() == resolvedInherits.size());
+ return List.copyOf(resolvedInherits);
+ }
+
+
public Optional<ParsedStruct> getStruct() { return Optional.ofNullable(wrappedStruct); }
public ParsedDocument getOwnerDoc() { return ownedBy; }
public String getOwnerName() { return ownedBy.name(); }
+ public ParsedStruct ensureStruct() {
+ if (wrappedStruct == null) {
+ wrappedStruct = new ParsedStruct("annotation." + name());
+ wrappedStruct.tagOwner(ownedBy);
+ }
+ return wrappedStruct;
+ }
void setStruct(ParsedStruct struct) { this.wrappedStruct = struct; }
void inherit(String other) { inherited.add(other); }
@@ -34,4 +48,10 @@ class ParsedAnnotation extends ParsedBlock {
this.ownedBy = owner;
getStruct().ifPresent(s -> s.tagOwner(owner));
}
+
+ void resolveInherit(String name, ParsedAnnotation parsed) {
+ verifyThat(inherited.contains(name), "resolveInherit for non-inherited name", name);
+ verifyThat(name.equals(parsed.name()), "resolveInherit name mismatch for", name);
+ resolvedInherits.add(parsed);
+ }
}
diff --git a/config-model/src/main/java/com/yahoo/searchdefinition/parser/ParsedStruct.java b/config-model/src/main/java/com/yahoo/searchdefinition/parser/ParsedStruct.java
index 753c13b5a5a..376fd592c9d 100644
--- a/config-model/src/main/java/com/yahoo/searchdefinition/parser/ParsedStruct.java
+++ b/config-model/src/main/java/com/yahoo/searchdefinition/parser/ParsedStruct.java
@@ -14,6 +14,7 @@ import java.util.Map;
**/
public class ParsedStruct extends ParsedBlock {
private final List<String> inherited = new ArrayList<>();
+ private final List<ParsedStruct> resolvedInherits = new ArrayList<>();
private final Map<String, ParsedField> fields = new LinkedHashMap<>();
private final ParsedType asParsedType;
private ParsedDocument ownedBy = null;
@@ -28,6 +29,10 @@ public class ParsedStruct extends ParsedBlock {
List<String> getInherited() { return List.copyOf(inherited); }
ParsedDocument getOwnerDoc() { return ownedBy; }
String getOwnerName() { return ownedBy.name(); }
+ List<ParsedStruct> getResolvedInherits() {
+ assert(inherited.size() == resolvedInherits.size());
+ return List.copyOf(resolvedInherits);
+ }
void addField(ParsedField field) {
String fieldName = field.name();
@@ -45,5 +50,11 @@ public class ParsedStruct extends ParsedBlock {
this.ownedBy = document;
}
+ void resolveInherit(String name, ParsedStruct parsed) {
+ verifyThat(inherited.contains(name), "resolveInherit for non-inherited name", name);
+ verifyThat(name.equals(parsed.name()), "resolveInherit name mismatch for", name);
+ resolvedInherits.add(parsed);
+ }
+
}