aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJon Bratseth <bratseth@gmail.com>2022-03-09 18:40:31 +0100
committerGitHub <noreply@github.com>2022-03-09 18:40:31 +0100
commit1fa852eadd7b09b98ce6dd8bdd7b0446d07a37d6 (patch)
tree8222e64d27aa2e6ebf42e921b98a825b5163a5a6
parent9ecddda1e37238420a0b1fe65ba701fdf79283cb (diff)
parentaf75acd826dd5a6b6894bb16dfb12ecb266a2525 (diff)
Merge pull request #21620 from vespa-engine/arnej/compatible-errors-1v7.556.26
Arnej/compatible errors 1
-rw-r--r--config-model/src/main/java/com/yahoo/searchdefinition/SDDocumentTypeOrderer.java5
-rw-r--r--config-model/src/main/java/com/yahoo/searchdefinition/parser/ConvertParsedTypes.java13
-rw-r--r--config-model/src/test/java/com/yahoo/searchdefinition/derived/InheritanceTestCase.java2
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());
}
}