summaryrefslogtreecommitdiffstats
path: root/config-model/src/main
diff options
context:
space:
mode:
authorHenning Baldersheim <balder@yahoo-inc.com>2022-11-28 16:16:39 +0100
committerGitHub <noreply@github.com>2022-11-28 16:16:39 +0100
commite5cb5862776f800d64fe95647456ee15de778fb3 (patch)
treeedc8b7f120a61a666ab0ad0734ca7d2cb9181b90 /config-model/src/main
parent1626383a9d0a0e1ce584e7b2dcc8c59c3630dcd5 (diff)
Revert "Use a simple tokenizer and replace the larger than container-search [run-systemtest]"
Diffstat (limited to 'config-model/src/main')
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/application/validation/AbstractBundleValidator.java24
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/application/validation/BundleValidator.java13
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/application/validation/TokenizeAndDeQuote.java53
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;
- }
-}