aboutsummaryrefslogtreecommitdiffstats
path: root/bundle-plugin/src/main/java/com/yahoo/container/plugin/classanalysis/Packages.java
diff options
context:
space:
mode:
authorgjoranv <gv@yahooinc.com>2023-06-01 13:12:58 +0200
committergjoranv <gv@yahooinc.com>2023-06-01 13:38:13 +0200
commit28e10125cd97ee7846f72bce4a42b1ea1ccca027 (patch)
treefb61b0f13c493148530970b37d572cd6398ca583 /bundle-plugin/src/main/java/com/yahoo/container/plugin/classanalysis/Packages.java
parenta84e782c247478572752896cc5488575bda326d8 (diff)
Warn when a USER bundle imports non-PublicApi packages.
Diffstat (limited to 'bundle-plugin/src/main/java/com/yahoo/container/plugin/classanalysis/Packages.java')
-rw-r--r--bundle-plugin/src/main/java/com/yahoo/container/plugin/classanalysis/Packages.java21
1 files changed, 21 insertions, 0 deletions
diff --git a/bundle-plugin/src/main/java/com/yahoo/container/plugin/classanalysis/Packages.java b/bundle-plugin/src/main/java/com/yahoo/container/plugin/classanalysis/Packages.java
index 9eef8a55c01..48a128c2f0d 100644
--- a/bundle-plugin/src/main/java/com/yahoo/container/plugin/classanalysis/Packages.java
+++ b/bundle-plugin/src/main/java/com/yahoo/container/plugin/classanalysis/Packages.java
@@ -1,8 +1,13 @@
// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
package com.yahoo.container.plugin.classanalysis;
+import com.yahoo.container.plugin.osgi.ImportPackages;
+
import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
import java.util.Set;
+import java.util.stream.Collectors;
/**
* Utility methods related to packages.
@@ -31,6 +36,22 @@ public class Packages {
}
}
+ /**
+ * Returns the imported Vespa packages that don't exist in the given set of allowed packages.
+ */
+ public static List<String> disallowedVespaImports(Map<String, ImportPackages.Import> imports, List<String> allowed) {
+ if (imports == null || imports.isEmpty()) return List.of();
+
+ var publicApi = allowed == null ? Set.of() : new HashSet<>(allowed);
+
+ Set<String> yahooImports = imports.keySet().stream()
+ .filter(pkg -> pkg.startsWith("com.yahoo") || pkg.startsWith("ai.vespa."))
+ .collect(Collectors.toSet());
+
+ List<String> disallowedImports = yahooImports.stream().collect(Collectors.groupingBy(publicApi::contains)).get(false);
+ return disallowedImports == null ? List.of() : disallowedImports;
+ }
+
public static PackageMetaData analyzePackages(Set<ClassFileMetaData> allClasses) {
Set<String> definedPackages = new HashSet<>();
Set<String> referencedPackages = new HashSet<>();