diff options
author | Jon Bratseth <bratseth@gmail.com> | 2022-03-09 18:40:31 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-03-09 18:40:31 +0100 |
commit | 1fa852eadd7b09b98ce6dd8bdd7b0446d07a37d6 (patch) | |
tree | 8222e64d27aa2e6ebf42e921b98a825b5163a5a6 | |
parent | 9ecddda1e37238420a0b1fe65ba701fdf79283cb (diff) | |
parent | af75acd826dd5a6b6894bb16dfb12ecb266a2525 (diff) |
Merge pull request #21620 from vespa-engine/arnej/compatible-errors-1v7.556.26
Arnej/compatible errors 1
3 files changed, 18 insertions, 2 deletions
diff --git a/config-model/src/main/java/com/yahoo/searchdefinition/SDDocumentTypeOrderer.java b/config-model/src/main/java/com/yahoo/searchdefinition/SDDocumentTypeOrderer.java index ba34045e7de..848631f1739 100644 --- a/config-model/src/main/java/com/yahoo/searchdefinition/SDDocumentTypeOrderer.java +++ b/config-model/src/main/java/com/yahoo/searchdefinition/SDDocumentTypeOrderer.java @@ -81,7 +81,10 @@ public class SDDocumentTypeOrderer { } else { inherited = createdSDTypes.get(name); - if (inherited == null) throw new IllegalArgumentException("Document type '" + name + "' not found"); + if (inherited == null) { + throw new IllegalArgumentException("document " + type.getName() + + " inherits from unavailable document " + name); + } process(inherited, inherited); } type.inherit(inherited); diff --git a/config-model/src/main/java/com/yahoo/searchdefinition/parser/ConvertParsedTypes.java b/config-model/src/main/java/com/yahoo/searchdefinition/parser/ConvertParsedTypes.java index 3e10f425a8c..e0a3192c302 100644 --- a/config-model/src/main/java/com/yahoo/searchdefinition/parser/ConvertParsedTypes.java +++ b/config-model/src/main/java/com/yahoo/searchdefinition/parser/ConvertParsedTypes.java @@ -99,6 +99,19 @@ public class ConvertParsedTypes { } for (String inherit : struct.getInherited()) { var parent = findStructFromSchemas(inherit, doc); + // ensure a nice, compatible exception message + for (var field : toFill.getFields()) { + if (parent.hasField(field)) { + for (var base : parent.getInheritedTypes()) { + if (base.hasField(field)) { + parent = base; + } + } + throw new IllegalArgumentException + ("In document " + doc.name() + ": struct " + struct.name() + + " cannot inherit from " + parent.getName() + " and redeclare field " + field.getName()); + } + } toFill.inherit(parent); } } diff --git a/config-model/src/test/java/com/yahoo/searchdefinition/derived/InheritanceTestCase.java b/config-model/src/test/java/com/yahoo/searchdefinition/derived/InheritanceTestCase.java index bcf68387294..3bd1e568400 100644 --- a/config-model/src/test/java/com/yahoo/searchdefinition/derived/InheritanceTestCase.java +++ b/config-model/src/test/java/com/yahoo/searchdefinition/derived/InheritanceTestCase.java @@ -54,7 +54,7 @@ public class InheritanceTestCase extends AbstractExportingTestCase { try { assertCorrectDeriving("inheritfromnull"); } catch (IllegalArgumentException e) { - assertEquals("Document type 'foo' not found", e.getMessage()); + assertEquals("document inheritfromnull inherits from unavailable document foo", e.getMessage()); } } |