From 0999acda53864c5b6ef5eda9691682469982bda5 Mon Sep 17 00:00:00 2001 From: Christoph Rueger Date: Tue, 27 Aug 2024 02:39:18 +0200 Subject: [PATCH] Add version of export to selfimports reuse augmentImports() method to add version information from exports to self-imports, after exports have been processed Signed-off-by: Christoph Rueger --- .../src/aQute/bnd/osgi/Builder.java | 48 ++++++++++++++++++- 1 file changed, 46 insertions(+), 2 deletions(-) diff --git a/biz.aQute.bndlib/src/aQute/bnd/osgi/Builder.java b/biz.aQute.bndlib/src/aQute/bnd/osgi/Builder.java index 6220a28e33..a267392664 100644 --- a/biz.aQute.bndlib/src/aQute/bnd/osgi/Builder.java +++ b/biz.aQute.bndlib/src/aQute/bnd/osgi/Builder.java @@ -458,8 +458,13 @@ protected Jar getExtra() throws Exception { @Override public void analyze() throws Exception { super.analyze(); - cleanupVersion(getImports(), null, Constants.IMPORT_PACKAGE); - cleanupVersion(getExports(), getVersion(), Constants.EXPORT_PACKAGE); + Packages exports = getExports(); + Packages imports = getImports(); + + cleanupVersion(imports, null, Constants.IMPORT_PACKAGE); + cleanupVersion(exports, getVersion(), Constants.EXPORT_PACKAGE); + addExportVersionToSelfImports(imports, exports); + String version = getProperty(BUNDLE_VERSION); if (version != null) { version = cleanupVersion(version); @@ -468,6 +473,45 @@ public void analyze() throws Exception { } } + /** + * Add version of the export to Selfimports in case the import does not yet + * have a version. This method should be called after exports have been + * processed via {@link #cleanupVersion(Packages, String, String)} + * + * @param imports + * @param exports + * @throws Exception + */ + private void addExportVersionToSelfImports(Packages imports, Packages exports) throws Exception { + Packages selfImports = calcSelfImports(exports, imports); + + // augmentImports() does use applyVersionPolicy internally which is the + // main thing we want here + augmentImports(selfImports, exports); + } + + /** + * Calculates selfImports which are imports which are also exported by the + * same jar + * + * @param exports + * @param imports + * @return + */ + private Packages calcSelfImports(Packages exports, Packages imports) { + Packages selfImports = new Packages(); + + imports.entrySet() + .stream() + .filter(e -> exports.containsKey(e.getKey())) + .forEach(e -> { + selfImports.put(e.getKey(), e.getValue()); + }); + + return selfImports; + + } + private String doSnapshot(String version) { String snapshot = getProperty(SNAPSHOT); if (snapshot == null) {