diff options
author | Henning Baldersheim <balder@yahoo-inc.com> | 2022-11-28 16:16:39 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-11-28 16:16:39 +0100 |
commit | e5cb5862776f800d64fe95647456ee15de778fb3 (patch) | |
tree | edc8b7f120a61a666ab0ad0734ca7d2cb9181b90 /config-model/src/main | |
parent | 1626383a9d0a0e1ce584e7b2dcc8c59c3630dcd5 (diff) |
Revert "Use a simple tokenizer and replace the larger than container-search [run-systemtest]"
Diffstat (limited to 'config-model/src/main')
3 files changed, 23 insertions, 67 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..9c0e7be452a 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 @@ -1,6 +1,9 @@ // Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package com.yahoo.vespa.model.application.validation; +import aQute.bnd.header.Parameters; +import aQute.bnd.osgi.Domain; +import aQute.bnd.version.VersionRange; import com.yahoo.config.application.api.ApplicationPackage; import com.yahoo.config.application.api.ComponentInfo; import com.yahoo.config.application.api.DeployLogger; @@ -19,8 +22,8 @@ import javax.xml.xpath.XPathFactory; import java.io.IOException; import java.io.StringReader; import java.nio.file.Paths; -import java.util.List; import java.util.Optional; +import java.util.function.BiConsumer; import java.util.function.Consumer; import java.util.jar.JarFile; import java.util.jar.Manifest; @@ -76,17 +79,14 @@ public abstract class AbstractBundleValidator extends Validator { } } - protected final void forEachImportPackage(Manifest mf, Consumer<String> consumer) { - String importPackage = mf.getMainAttributes().getValue("Import-Package"); - 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)); - } + protected final void forEachImportPackage(Manifest mf, BiConsumer<String, VersionRange> consumer) { + Parameters importPackage = Domain.domain(mf).getImportPackage(); + importPackage.forEach((packageName, attrs) -> { + VersionRange versionRange = attrs.getVersion() != null + ? VersionRange.parseOSGiVersionRange(attrs.getVersion()) + : null; + consumer.accept(packageName, versionRange); + }); } protected final void log(DeployState state, Level level, String fmt, Object... args) { diff --git a/config-model/src/main/java/com/yahoo/vespa/model/application/validation/BundleValidator.java b/config-model/src/main/java/com/yahoo/vespa/model/application/validation/BundleValidator.java index 299e91f8ea2..1e3b27bc2fa 100644 --- a/config-model/src/main/java/com/yahoo/vespa/model/application/validation/BundleValidator.java +++ b/config-model/src/main/java/com/yahoo/vespa/model/application/validation/BundleValidator.java @@ -1,6 +1,7 @@ // Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package com.yahoo.vespa.model.application.validation; +import aQute.bnd.version.VersionRange; import com.yahoo.config.model.deploy.DeployState; import org.w3c.dom.Document; @@ -62,10 +63,11 @@ public class BundleValidator extends AbstractBundleValidator { private void validateImportedPackages(DeployState state, JarFile jar, Manifest manifest) { Map<DeprecatedProvidedBundle, List<String>> deprecatedPackagesInUse = new HashMap<>(); - forEachImportPackage(manifest, (packageName) -> { + forEachImportPackage(manifest, (packageName, versionRange) -> { for (DeprecatedProvidedBundle deprecatedBundle : DeprecatedProvidedBundle.values()) { for (Predicate<String> matcher : deprecatedBundle.javaPackageMatchers) { - if (matcher.test(packageName)) { + if (matcher.test(packageName) + && (versionRange == null || deprecatedBundle.versionDiscriminator.test(versionRange))) { deprecatedPackagesInUse.computeIfAbsent(deprecatedBundle, __ -> new ArrayList<>()) .add(packageName); } @@ -89,15 +91,22 @@ public class BundleValidator extends AbstractBundleValidator { final String name; final Collection<Predicate<String>> javaPackageMatchers; + final Predicate<VersionRange> versionDiscriminator; final String description; + DeprecatedProvidedBundle(String name, String description, Collection<String> javaPackagePatterns) { + this(name, description, __ -> true, javaPackagePatterns); + } + DeprecatedProvidedBundle(String name, String description, + Predicate<VersionRange> versionDiscriminator, Collection<String> javaPackagePatterns) { this.name = name; this.javaPackageMatchers = javaPackagePatterns.stream() .map(s -> Pattern.compile(s).asMatchPredicate()) .collect(Collectors.toList()); + this.versionDiscriminator = versionDiscriminator; this.description = description; } } diff --git a/config-model/src/main/java/com/yahoo/vespa/model/application/validation/TokenizeAndDeQuote.java b/config-model/src/main/java/com/yahoo/vespa/model/application/validation/TokenizeAndDeQuote.java deleted file mode 100644 index 40d5e7a757c..00000000000 --- a/config-model/src/main/java/com/yahoo/vespa/model/application/validation/TokenizeAndDeQuote.java +++ /dev/null @@ -1,53 +0,0 @@ -package com.yahoo.vespa.model.application.validation; - -import java.util.ArrayList; -import java.util.List; - -/** - * Will tokenize based on the delimiters while dequoting any qouted text. - * @author baldersheim - */ -public class TokenizeAndDeQuote { - private static final char ESCAPE = '\\'; - private final String delims; - private final String quotes; - - public TokenizeAndDeQuote(String delims,String quotes) { - this.delims = delims; - this.quotes = quotes; - } - - public List<String> tokenize(String string) { - StringBuilder current = new StringBuilder(); - List<String> tokens = new ArrayList<>(); - char quote = 0; - - for (int i = 0; i < string.length(); i++) { - char c = string.charAt(i); - - if ((c == ESCAPE) && (i + 1 < string.length())) { - // Escaped, append next char - current.append(string.charAt(++i)); - } else if ((quote == 0) && (delims.indexOf(c) >=0 )) { - // Delimiter found outside quoted section, add token and start next - tokens.add(current.toString()); - current.setLength(0); - } else if ((quote == 0) && (quotes.indexOf(c) >= 0)) { - // Start of quote - quote = c; - } else if (quote == c) { - // End of quote - quote = 0; - } else { - current.append(c); - } - } - - if ( ! current.isEmpty()) { - // And then the last token if any - tokens.add(current.toString()); - } - - return tokens; - } -} |