summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHarald Musum <musum@verizonmedia.com>2019-11-13 16:39:14 +0100
committerGitHub <noreply@github.com>2019-11-13 16:39:14 +0100
commitb6e48bd32a548dd3cc1847344e6451882afebb91 (patch)
treee1f399be8b2bbe2c221f966e30e04662a6d77478
parent395e0795cc9abd1a5e9f3b5fc4d2960164dd1bcf (diff)
parent491924433dd80b8a57c47f42c5a1f5725ec4b454 (diff)
Merge pull request #11289 from vespa-engine/gjoranv/fail-upon-reserved-array-name
Fail if reserved words are used for array names.
-rw-r--r--configgen/src/main/java/com/yahoo/config/codegen/DefLine.java18
-rw-r--r--configgen/src/test/java/com/yahoo/config/codegen/DefParserTest.java18
2 files changed, 28 insertions, 8 deletions
diff --git a/configgen/src/main/java/com/yahoo/config/codegen/DefLine.java b/configgen/src/main/java/com/yahoo/config/codegen/DefLine.java
index 5d2dc2e13e8..2cc93f95df0 100644
--- a/configgen/src/main/java/com/yahoo/config/codegen/DefLine.java
+++ b/configgen/src/main/java/com/yahoo/config/codegen/DefLine.java
@@ -257,16 +257,18 @@ public class DefLine {
}
}
- void validateReservedWords() {
- if (ReservedWords.isReservedWord(name)) {
- throw new IllegalArgumentException(name + " is a reserved word in " +
- ReservedWords.getLanguageForReservedWord(name));
+ private void validateReservedWords() {
+ String cleanName = (name.endsWith("[]") || name.endsWith("{}")) ? name.substring(0, name.length()-2) : name;
+
+ if (ReservedWords.isReservedWord(cleanName)) {
+ throw new IllegalArgumentException(cleanName + " is a reserved word in " +
+ ReservedWords.getLanguageForReservedWord(cleanName));
}
- if (ReservedWords.capitalizedPattern.matcher(name).matches()) {
- throw new IllegalArgumentException("'" + name + "' cannot start with an uppercase letter");
+ if (ReservedWords.capitalizedPattern.matcher(cleanName).matches()) {
+ throw new IllegalArgumentException("'" + cleanName + "' cannot start with an uppercase letter");
}
- if (ReservedWords.internalPrefixPattern.matcher(name).matches()) {
- throw new IllegalArgumentException("'" + name + "' cannot start with '" + ReservedWords.INTERNAL_PREFIX + "'");
+ if (ReservedWords.internalPrefixPattern.matcher(cleanName).matches()) {
+ throw new IllegalArgumentException("'" + cleanName + "' cannot start with '" + ReservedWords.INTERNAL_PREFIX + "'");
}
}
diff --git a/configgen/src/test/java/com/yahoo/config/codegen/DefParserTest.java b/configgen/src/test/java/com/yahoo/config/codegen/DefParserTest.java
index 98c30aa09cf..1c381e7c398 100644
--- a/configgen/src/test/java/com/yahoo/config/codegen/DefParserTest.java
+++ b/configgen/src/test/java/com/yahoo/config/codegen/DefParserTest.java
@@ -257,17 +257,35 @@ public class DefParserTest {
}
@Test
+ public void testReservedWordInCForArray() {
+ assertLineFails("auto[] int",
+ "auto is a reserved word in C");
+ }
+
+ @Test
public void testReservedWordInJava() {
assertLineFails("abstract int",
"abstract is a reserved word in Java");
}
@Test
+ public void testReservedWordInJavaForMap() {
+ assertLineFails("abstract{} int",
+ "abstract is a reserved word in Java");
+ }
+
+ @Test
public void testReservedWordInCAndJava() {
assertLineFails("continue int",
"continue is a reserved word in C and Java");
}
+ @Test
+ public void testReservedWordInCAndJavaForArray() {
+ assertLineFails("continue[] int",
+ "continue is a reserved word in C and Java");
+ }
+
static StringBuilder createDefTemplate() {
StringBuilder sb = new StringBuilder();
sb.append("version=8\n");