diff options
author | Henning Baldersheim <balder@yahoo-inc.com> | 2022-11-28 16:49:26 +0100 |
---|---|---|
committer | Henning Baldersheim <balder@yahoo-inc.com> | 2022-11-28 16:49:26 +0100 |
commit | 03a9d5e03b13015a5dc2680f21f9f9b00a862b6a (patch) | |
tree | b979020d0d67f17dee58fc8d69ba7088a341037f /config-model/src | |
parent | c53520c4c8419d10d3e6c94aa70e15cbf2ae799f (diff) |
Handle optional version
Diffstat (limited to 'config-model/src')
3 files changed, 41 insertions, 7 deletions
diff --git a/config-model/src/main/java/com/yahoo/vespa/model/application/validation/AbstractBundleValidator.java b/config-model/src/main/java/com/yahoo/vespa/model/application/validation/AbstractBundleValidator.java index c6b8ca981e7..1089d36dda1 100644 --- a/config-model/src/main/java/com/yahoo/vespa/model/application/validation/AbstractBundleValidator.java +++ b/config-model/src/main/java/com/yahoo/vespa/model/application/validation/AbstractBundleValidator.java @@ -78,14 +78,11 @@ public abstract class AbstractBundleValidator extends Validator { protected final void forEachImportPackage(Manifest mf, Consumer<String> consumer) { String importPackage = mf.getMainAttributes().getValue("Import-Package"); + ImportPackageInfo importPackages = new ImportPackageInfo(importPackage); List<String> tokens = new TokenizeAndDeQuote(";,=", "\"'").tokenize(importPackage); - if (tokens.size() % 3 != 0) { - throw new IllegalArgumentException("Number of tokens " + tokens.size() + " must be divisible by 3.\n" + - "Import-Package = '" + importPackage + "'\n" + - "Token = " + tokens); - } - for (int packageNum = 0; packageNum < tokens.size()/3; packageNum++) { - consumer.accept(tokens.get(packageNum*3)); + + for (String packageName : importPackages.packages()) { + consumer.accept(packageName); } } diff --git a/config-model/src/main/java/com/yahoo/vespa/model/application/validation/ImportPackageInfo.java b/config-model/src/main/java/com/yahoo/vespa/model/application/validation/ImportPackageInfo.java new file mode 100644 index 00000000000..2565239910b --- /dev/null +++ b/config-model/src/main/java/com/yahoo/vespa/model/application/validation/ImportPackageInfo.java @@ -0,0 +1,27 @@ +package com.yahoo.vespa.model.application.validation; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; + +/** + * @author baldersheim + */ +public class ImportPackageInfo { + private static final String VERSION = "version"; + private final List<String> packages; + public ImportPackageInfo(String importPackage) { + List<String> packages = new ArrayList<>(); + List<String> tokens = new TokenizeAndDeQuote(";,=", "\"'").tokenize(importPackage); + for (int i = 0; i < tokens.size(); ++i) { + String token = tokens.get(i); + if (VERSION.equals(token)) { + ++i; // skip the optional version + } else { + packages.add(token); + } + } + this.packages = List.copyOf(packages); + } + Collection<String> packages() { return packages; } +} diff --git a/config-model/src/test/java/com/yahoo/vespa/model/application/validation/BundleValidatorTest.java b/config-model/src/test/java/com/yahoo/vespa/model/application/validation/BundleValidatorTest.java index 5cd7880e22d..2d4211c693b 100644 --- a/config-model/src/test/java/com/yahoo/vespa/model/application/validation/BundleValidatorTest.java +++ b/config-model/src/test/java/com/yahoo/vespa/model/application/validation/BundleValidatorTest.java @@ -107,10 +107,20 @@ public class BundleValidatorTest { @Test void testImportPackagesParsing() { + assertEquals(new ImportPackageInfo("com.yahoo.config;version=\"[1.0.0,2)\",com.yahoo.filedistribution.fileacquirer;version=\"[1.0.0,2)\"," + + "com.yahoo.jdisc,com.yahoo.jdisc.handler,java.io;version=\"[0.0.0,1)\",java.lang;version=\"[0.0.0,1)\"," + + "java.nio;version=\"[0.0.0,1)\",java.util.concurrent;version=\"[0.0.0,1)\",java.util;version=\"[0.0.0,1)\"").packages(), + List.of("com.yahoo.config", "com.yahoo.filedistribution.fileacquirer", "com.yahoo.jdisc", + "com.yahoo.jdisc.handler", "java.io", "java.lang", "java.nio", "java.util.concurrent", "java.util")); + } + + @Test + void testQuotedTokenizer() { verifyParsing("org.json;version=\"[0.0.0,1)\",org.eclipse.jetty.client.api;version=\"[9.4.46,10)\"", List.of("org.json", "version", "[0.0.0,1)", "org.eclipse.jetty.client.api", "version", "[9.4.46,10)")); verifyParsing("org.json;version='[0.0.0,1)',org.eclipse.jetty.client.api;version='[9.4.46,10)'", List.of("org.json", "version", "[0.0.0,1)", "org.eclipse.jetty.client.api", "version", "[9.4.46,10)")); } + } |