summaryrefslogtreecommitdiffstats
path: root/bundle-plugin
diff options
context:
space:
mode:
authorgjoranv <gv@yahooinc.com>2023-06-09 17:46:34 +0200
committergjoranv <gv@yahooinc.com>2023-06-09 17:46:34 +0200
commit364261fc0ac79af32a0a2be6f4ef9d0081cab4ba (patch)
tree71529fce490798b9c97cd44e70b1693de13ec867 /bundle-plugin
parent43697d5c3fac7dfb69a2e0244c4dec509fd8ea7c (diff)
Fail on explicitly deny-listed package imports, instead of non-allow-listed.
Diffstat (limited to 'bundle-plugin')
-rw-r--r--bundle-plugin/src/main/java/com/yahoo/container/plugin/bundle/AnalyzeBundle.java8
-rw-r--r--bundle-plugin/src/main/java/com/yahoo/container/plugin/classanalysis/Packages.java17
-rw-r--r--bundle-plugin/src/main/java/com/yahoo/container/plugin/mojo/GenerateOsgiManifestMojo.java8
3 files changed, 15 insertions, 18 deletions
diff --git a/bundle-plugin/src/main/java/com/yahoo/container/plugin/bundle/AnalyzeBundle.java b/bundle-plugin/src/main/java/com/yahoo/container/plugin/bundle/AnalyzeBundle.java
index 08cac58aad1..8b32c6c0d0d 100644
--- a/bundle-plugin/src/main/java/com/yahoo/container/plugin/bundle/AnalyzeBundle.java
+++ b/bundle-plugin/src/main/java/com/yahoo/container/plugin/bundle/AnalyzeBundle.java
@@ -43,18 +43,18 @@ public class AnalyzeBundle {
}
}
- public static List<String> publicApiPackagesAggregated(Collection<File> jarFiles) {
+ public static List<String> nonPublicApiPackagesAggregated(Collection<File> jarFiles) {
return jarFiles.stream()
- .map(AnalyzeBundle::publicApiPackages)
+ .map(AnalyzeBundle::nonPublicApiPackages)
.flatMap(List::stream)
.distinct()
.toList();
}
- static List<String> publicApiPackages(File jarFile) {
+ private static List<String> nonPublicApiPackages(File jarFile) {
var manifest = getOsgiManifest(jarFile);
if (manifest == null) return Collections.emptyList();
- return getMainAttributeValue(manifest, "X-JDisc-PublicApi-Package")
+ return getMainAttributeValue(manifest, "X-JDisc-Non-PublicApi-Export-Package")
.map(s -> Arrays.asList(s.split(",")))
.orElseGet(ArrayList::new);
}
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 48a128c2f0d..a9f95f2b2f2 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
@@ -7,7 +7,6 @@ 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.
@@ -37,19 +36,17 @@ public class Packages {
}
/**
- * Returns the imported Vespa packages that don't exist in the given set of allowed packages.
+ * Returns the imported packages that exist in the given set of disallowed packages.
*/
- public static List<String> disallowedVespaImports(Map<String, ImportPackages.Import> imports, List<String> allowed) {
+ public static List<String> disallowedImports(Map<String, ImportPackages.Import> imports, List<String> disallowed) {
if (imports == null || imports.isEmpty()) return List.of();
- var publicApi = allowed == null ? Set.of() : new HashSet<>(allowed);
+ var importedSet = new HashSet<>(imports.keySet());
+ var disallowedSet = disallowed == null ? Set.of() : new HashSet<>(disallowed);
- 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;
+ return importedSet.stream()
+ .filter(disallowedSet::contains)
+ .toList();
}
public static PackageMetaData analyzePackages(Set<ClassFileMetaData> allClasses) {
diff --git a/bundle-plugin/src/main/java/com/yahoo/container/plugin/mojo/GenerateOsgiManifestMojo.java b/bundle-plugin/src/main/java/com/yahoo/container/plugin/mojo/GenerateOsgiManifestMojo.java
index 9537fed420c..ff802668427 100644
--- a/bundle-plugin/src/main/java/com/yahoo/container/plugin/mojo/GenerateOsgiManifestMojo.java
+++ b/bundle-plugin/src/main/java/com/yahoo/container/plugin/mojo/GenerateOsgiManifestMojo.java
@@ -26,8 +26,8 @@ import java.util.stream.Collectors;
import java.util.stream.Stream;
import static com.yahoo.container.plugin.bundle.AnalyzeBundle.exportedPackagesAggregated;
-import static com.yahoo.container.plugin.bundle.AnalyzeBundle.publicApiPackagesAggregated;
-import static com.yahoo.container.plugin.classanalysis.Packages.disallowedVespaImports;
+import static com.yahoo.container.plugin.bundle.AnalyzeBundle.nonPublicApiPackagesAggregated;
+import static com.yahoo.container.plugin.classanalysis.Packages.disallowedImports;
import static com.yahoo.container.plugin.osgi.ExportPackages.exportsByPackageName;
import static com.yahoo.container.plugin.osgi.ImportPackages.calculateImports;
import static com.yahoo.container.plugin.util.Files.allDescendantFiles;
@@ -95,7 +95,7 @@ public class GenerateOsgiManifestMojo extends AbstractGenerateOsgiManifestMojo {
List<Artifact> providedJarArtifacts = artifactSet.getJarArtifactsProvided();
List<File> providedJarFiles = providedJarArtifacts.stream().map(Artifact::getFile).toList();
List<Export> exportedPackagesFromProvidedJars = exportedPackagesAggregated(providedJarFiles);
- List<String> publicApiPackagesFromProvidedJars = publicApiPackagesAggregated(providedJarFiles);
+ List<String> nonPublicApiPackagesFromProvidedJars = nonPublicApiPackagesAggregated(providedJarFiles);
// Packages from Export-Package/PublicApi headers in provided scoped jars
Set<String> exportedPackagesFromProvidedDeps = ExportPackages.packageNames(exportedPackagesFromProvidedJars);
@@ -125,7 +125,7 @@ public class GenerateOsgiManifestMojo extends AbstractGenerateOsgiManifestMojo {
includedPackages.definedPackages(),
exportsByPackageName(exportedPackagesFromProvidedJars));
- List<String> nonPublicApiUsed = disallowedVespaImports(calculatedImports, publicApiPackagesFromProvidedJars);
+ List<String> nonPublicApiUsed = disallowedImports(calculatedImports, nonPublicApiPackagesFromProvidedJars);
logNonPublicApiUsage(nonPublicApiUsed);
Map<String, String> manifestContent = generateManifestContent(artifactSet.getJarArtifactsToInclude(), calculatedImports, includedPackages);