diff options
author | Arne H Juul <arnej@yahooinc.com> | 2022-03-16 06:35:15 +0000 |
---|---|---|
committer | Arne H Juul <arnej@yahooinc.com> | 2022-03-16 09:29:51 +0000 |
commit | 0b71369c5dd96cf040791603500db0b3bb981eb5 (patch) | |
tree | 200d9c128c9dcb68c619f8e236b3422d18cd02f1 /config-model | |
parent | 1fba743b1c9b8b290fc446cd22f8fcadac5fd1ee (diff) |
add more resolveInherit APIs
Diffstat (limited to 'config-model')
-rw-r--r-- | config-model/src/main/java/com/yahoo/searchdefinition/parser/ParsedAnnotation.java | 20 | ||||
-rw-r--r-- | config-model/src/main/java/com/yahoo/searchdefinition/parser/ParsedStruct.java | 11 |
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); + } + } |