diff --git a/src/main/java/io/smallrye/modules/desc/PackageInfo.java b/src/main/java/io/smallrye/modules/desc/PackageInfo.java index 7f75364..285a17f 100644 --- a/src/main/java/io/smallrye/modules/desc/PackageInfo.java +++ b/src/main/java/io/smallrye/modules/desc/PackageInfo.java @@ -103,10 +103,11 @@ public static PackageInfo merge(PackageInfo a, PackageInfo b) { * @param newAccess the minimum access level (must not be {@code null}) */ public PackageInfo withAccessAtLeast(PackageAccess newAccess) { - return of( - PackageAccess.max(packageAccess(), newAccess), - exportTargets, - openTargets); + return packageAccess().isAtLeast(newAccess) ? this + : of( + newAccess, + exportTargets, + openTargets); } /** @@ -115,10 +116,24 @@ public PackageInfo withAccessAtLeast(PackageAccess newAccess) { * @param exportTargets additional export targets (must not be {@code null}) */ public PackageInfo withExportTargets(final Set exportTargets) { - return of( - packageAccess(), - Util.merge(exportTargets(), exportTargets), - openTargets()); + return exportTargets().containsAll(exportTargets) ? this + : of( + packageAccess(), + Util.merge(exportTargets(), exportTargets), + openTargets()); + } + + /** + * {@return a package info with the given open targets merged with existing targets (not {@code null})} + * + * @param openTargets additional open targets (must not be {@code null}) + */ + public PackageInfo withOpenTargets(final Set openTargets) { + return exportTargets().containsAll(openTargets) ? this + : of( + packageAccess(), + exportTargets(), + Util.merge(openTargets(), openTargets)); } /**