From 7ce318cae722f791eade72bc3106143d251f8bbc Mon Sep 17 00:00:00 2001 From: Arne H Juul Date: Wed, 9 Mar 2022 11:50:42 +0000 Subject: compatible error message --- .../yahoo/searchdefinition/parser/ConvertParsedTypes.java | 13 +++++++++++++ 1 file changed, 13 insertions(+) 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); } } -- cgit v1.2.3 From af75acd826dd5a6b6894bb16dfb12ecb266a2525 Mon Sep 17 00:00:00 2001 From: Arne H Juul Date: Wed, 9 Mar 2022 14:08:38 +0000 Subject: more informative exception message --- .../main/java/com/yahoo/searchdefinition/SDDocumentTypeOrderer.java | 5 ++++- .../java/com/yahoo/searchdefinition/derived/InheritanceTestCase.java | 2 +- 2 files changed, 5 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/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()); } } -- cgit v1.2.3