This is an automated email from the ASF dual-hosted git repository.

cziegeler pushed a commit to branch master
in repository 
https://gitbox.apache.org/repos/asf/sling-org-apache-sling-feature-extension-apiregions.git


The following commit(s) were added to refs/heads/master by this push:
     new 784cf4a  SLING-11068 split up analyser task for unversioned packages - 
clean up code and use newer apis
784cf4a is described below

commit 784cf4ae4789828c0c10f6b5854f682cf0765f18
Author: Carsten Ziegeler <[email protected]>
AuthorDate: Tue Jan 18 07:24:02 2022 +0100

    SLING-11068 split up analyser task for unversioned packages - clean up code 
and use newer apis
---
 .../CheckApiRegionsBundleExportsImports.java       | 167 +++++++++------------
 .../CheckApiRegionsBundleUnversionedPackages.java  |  83 ++++------
 ...eckApiRegionsBundleUnversionedPackagesTest.java |   4 -
 .../analyser/CheckArtifactRulesTest.java           |   5 -
 4 files changed, 98 insertions(+), 161 deletions(-)

diff --git 
a/src/main/java/org/apache/sling/feature/extension/apiregions/analyser/CheckApiRegionsBundleExportsImports.java
 
b/src/main/java/org/apache/sling/feature/extension/apiregions/analyser/CheckApiRegionsBundleExportsImports.java
index 0a5797c..fd84ca1 100644
--- 
a/src/main/java/org/apache/sling/feature/extension/apiregions/analyser/CheckApiRegionsBundleExportsImports.java
+++ 
b/src/main/java/org/apache/sling/feature/extension/apiregions/analyser/CheckApiRegionsBundleExportsImports.java
@@ -18,10 +18,8 @@
  */
 package org.apache.sling.feature.extension.apiregions.analyser;
 
-import java.io.IOException;
 import java.util.AbstractMap;
 import java.util.ArrayList;
-import java.util.Arrays;
 import java.util.Collections;
 import java.util.HashMap;
 import java.util.HashSet;
@@ -32,19 +30,14 @@ import java.util.SortedMap;
 import java.util.TreeMap;
 import java.util.stream.Collectors;
 import java.util.stream.Stream;
-import javax.json.JsonArray;
 
 import org.apache.sling.feature.ArtifactId;
-import org.apache.sling.feature.Extension;
-import org.apache.sling.feature.Extensions;
-import org.apache.sling.feature.Feature;
 import org.apache.sling.feature.analyser.task.AnalyserTask;
 import org.apache.sling.feature.analyser.task.AnalyserTaskContext;
 import org.apache.sling.feature.extension.apiregions.api.ApiRegion;
 import org.apache.sling.feature.extension.apiregions.api.ApiRegions;
 import org.apache.sling.feature.scanner.BundleDescriptor;
 import org.apache.sling.feature.scanner.PackageInfo;
-import org.osgi.framework.Version;
 
 public class CheckApiRegionsBundleExportsImports implements AnalyserTask {
 
@@ -77,12 +70,7 @@ public class CheckApiRegionsBundleExportsImports implements 
AnalyserTask {
     }
 
     private Report getReport(final Map<BundleDescriptor, Report> reports, 
final BundleDescriptor info) {
-        Report report = reports.get(info);
-        if ( report == null ) {
-            report = new Report();
-            reports.put(info, report);
-        }
-        return report;
+        return reports.computeIfAbsent(info, key -> new Report());
     }
 
     @Override
@@ -94,11 +82,7 @@ public class CheckApiRegionsBundleExportsImports implements 
AnalyserTask {
 
         final SortedMap<Integer, List<BundleDescriptor>> bundlesMap = new 
TreeMap<>();
         for(final BundleDescriptor bi : 
ctx.getFeatureDescriptor().getBundleDescriptors()) {
-            List<BundleDescriptor> list = 
bundlesMap.get(bi.getArtifact().getStartOrder());
-            if ( list == null ) {
-                list = new ArrayList<>();
-                bundlesMap.put(bi.getArtifact().getStartOrder(), list);
-            }
+            final List<BundleDescriptor> list = 
bundlesMap.computeIfAbsent(bi.getArtifact().getStartOrder(), key -> new 
ArrayList<>());
             list.add(bi);
         }
 
@@ -107,104 +91,97 @@ public class CheckApiRegionsBundleExportsImports 
implements AnalyserTask {
         if ( ctx.getFrameworkDescriptor() != null ) {
             exportingBundles.add(ctx.getFrameworkDescriptor());
         }
-        ApiRegions apiRegions = new ApiRegions(); // Empty API Regions;
-
-        Feature feature = ctx.getFeature();
 
         // extract and check the api-regions
-
-        Extensions extensions = feature.getExtensions();
-        Extension apiRegionsExtension = 
extensions.getByName(ApiRegions.EXTENSION_NAME);
-        if (apiRegionsExtension != null && 
apiRegionsExtension.getJSONStructure() != null) {
-            try {
-                apiRegions = ApiRegions.parse((JsonArray) 
apiRegionsExtension.getJSONStructure());
-            } catch (IOException e) {
-                ctx.reportError("API Regions '" + apiRegionsExtension.getJSON()
-                        + "' does not represent a valid JSON 'api-regions': " 
+ e.getMessage());
-                return;
-            }
+        ApiRegions apiRegions = null;
+        try {
+            apiRegions = ApiRegions.getApiRegions(ctx.getFeature());
+        } catch (final IllegalArgumentException e) {
+            ctx.reportError("API Region does not represent a valid JSON 
'api-regions': " + e.getMessage());
+            return;
+        }
+        if ( apiRegions == null ) {
+            apiRegions = new ApiRegions(); // Empty region as default
         }
 
         for(final Map.Entry<Integer, List<BundleDescriptor>> entry : 
bundlesMap.entrySet()) {
             // first add all exporting bundles
             for(final BundleDescriptor info : entry.getValue()) {
-                if ( info.getExportedPackages() != null ) {
+                if ( !info.getExportedPackages().isEmpty() ) {
                     exportingBundles.add(info);
                 }
             }
             // check importing bundles
             for(final BundleDescriptor info : entry.getValue()) {
-                if ( info.getImportedPackages() != null ) {
-                    for(final PackageInfo pck : info.getImportedPackages() ) {
-                        final Map<BundleDescriptor, Set<String>> candidates =
-                                getCandidates(exportingBundles, pck, info, 
apiRegions, ignoreAPIRegions);
-                        if ( candidates.isEmpty() ) {
-                            if ( pck.isOptional() ) {
-                                getReport(reports, 
info).missingExportsForOptional.add(pck);
-                            } else {
-                                getReport(reports, 
info).missingExports.add(pck);
-                            }
+                for(final PackageInfo pck : info.getImportedPackages() ) {
+                    final Map<BundleDescriptor, Set<String>> candidates =
+                            getCandidates(exportingBundles, pck, info, 
apiRegions, ignoreAPIRegions);
+                    if ( candidates.isEmpty() ) {
+                        if ( pck.isOptional() ) {
+                            getReport(reports, 
info).missingExportsForOptional.add(pck);
                         } else {
-                            final List<BundleDescriptor> matchingCandidates = 
new ArrayList<>();
-
-                            Set<String> exportingRegions = new HashSet<>();
-                            Set<String> importingRegions = new HashSet<>();
-                            for(final Map.Entry<BundleDescriptor, Set<String>> 
candidate : candidates.entrySet()) {
-                                BundleDescriptor bd = candidate.getKey();
-                                if (bd.isExportingPackage(pck)) {
-                                    Set<String> exRegions = 
candidate.getValue();
-                                    if (exRegions.contains(NO_REGION)) {
-                                        // If an export is defined outside of 
a region, it always matches
-                                        matchingCandidates.add(bd);
-                                        continue;
-                                    }
-                                    if (exRegions.contains(GLOBAL_REGION)) {
-                                        // Everyone can import from the global 
regin
-                                        matchingCandidates.add(bd);
-                                        continue;
-                                    }
-                                    if (exRegions.contains(OWN_FEATURE)) {
-                                        // A feature can always import 
packages from bundles in itself
-                                        matchingCandidates.add(bd);
-                                        continue;
-                                    }
+                            getReport(reports, info).missingExports.add(pck);
+                        }
+                    } else {
+                        final List<BundleDescriptor> matchingCandidates = new 
ArrayList<>();
+
+                        Set<String> exportingRegions = new HashSet<>();
+                        Set<String> importingRegions = new HashSet<>();
+                        for(final Map.Entry<BundleDescriptor, Set<String>> 
candidate : candidates.entrySet()) {
+                            BundleDescriptor bd = candidate.getKey();
+                            if (bd.isExportingPackage(pck)) {
+                                Set<String> exRegions = candidate.getValue();
+                                if (exRegions.contains(NO_REGION)) {
+                                    // If an export is defined outside of a 
region, it always matches
+                                    matchingCandidates.add(bd);
+                                    continue;
+                                }
+                                if (exRegions.contains(GLOBAL_REGION)) {
+                                    // Everyone can import from the global 
regin
+                                    matchingCandidates.add(bd);
+                                    continue;
+                                }
+                                if (exRegions.contains(OWN_FEATURE)) {
+                                    // A feature can always import packages 
from bundles in itself
+                                    matchingCandidates.add(bd);
+                                    continue;
+                                }
 
-                                    // Find out what regions the importing 
bundle is in
-                                    Set<String> imRegions =
-                                            getBundleRegions(info, apiRegions, 
ignoreAPIRegions);
+                                // Find out what regions the importing bundle 
is in
+                                Set<String> imRegions =
+                                        getBundleRegions(info, apiRegions, 
ignoreAPIRegions);
 
-                                    // Record the exporting and importing 
regions for diagnostics
-                                    exportingRegions.addAll(exRegions);
+                                // Record the exporting and importing regions 
for diagnostics
+                                exportingRegions.addAll(exRegions);
 
-                                    Set<String> regions = new HashSet<>();
-                                    for (String region : imRegions) {
-                                        for (ApiRegion r = 
apiRegions.getRegionByName(region); r != null; r = r.getParent()) {
-                                            regions.add(r.getName());
-                                        }
+                                Set<String> regions = new HashSet<>();
+                                for (String region : imRegions) {
+                                    for (ApiRegion r = 
apiRegions.getRegionByName(region); r != null; r = r.getParent()) {
+                                        regions.add(r.getName());
                                     }
+                                }
 
-                                    importingRegions.addAll(regions);
+                                importingRegions.addAll(regions);
 
-                                    // Only keep the regions that also export 
the package
-                                    regions.retainAll(exRegions);
+                                // Only keep the regions that also export the 
package
+                                regions.retainAll(exRegions);
 
-                                    if (!regions.isEmpty()) {
-                                        // there is an overlapping region
-                                        matchingCandidates.add(bd);
-                                    }
+                                if (!regions.isEmpty()) {
+                                    // there is an overlapping region
+                                    matchingCandidates.add(bd);
                                 }
                             }
+                        }
 
-                            if ( matchingCandidates.isEmpty() ) {
-                                if ( pck.isOptional() ) {
-                                    getReport(reports, 
info).missingExportsForOptional.add(pck);
-                                } else {
-                                    getReport(reports, 
info).missingExportsWithVersion.add(pck);
-                                    getReport(reports, 
info).regionInfo.put(pck, new AbstractMap.SimpleEntry<>(exportingRegions, 
importingRegions));
-                                }
-                            } else if ( matchingCandidates.size() > 1 ) {
-                                getReport(reports, 
info).exportMatchingSeveral.add(pck);
+                        if ( matchingCandidates.isEmpty() ) {
+                            if ( pck.isOptional() ) {
+                                getReport(reports, 
info).missingExportsForOptional.add(pck);
+                            } else {
+                                getReport(reports, 
info).missingExportsWithVersion.add(pck);
+                                getReport(reports, info).regionInfo.put(pck, 
new AbstractMap.SimpleEntry<>(exportingRegions, importingRegions));
                             }
+                        } else if ( matchingCandidates.size() > 1 ) {
+                            getReport(reports, 
info).exportMatchingSeveral.add(pck);
                         }
                     }
                 }
@@ -311,11 +288,7 @@ public class CheckApiRegionsBundleExportsImports 
implements AnalyserTask {
                                     || 
apiRegions.getRegionByName(region).getAllExportByName(pck.getName()) == null))
                         continue;
 
-                    Set<String> regions = candidates.get(info);
-                    if (regions == null) {
-                        regions = new HashSet<>();
-                        candidates.put(info, regions);
-                    }
+                    final Set<String> regions = 
candidates.computeIfAbsent(info, key -> new HashSet<>());
                     regions.add(region);
                 }
             }
diff --git 
a/src/main/java/org/apache/sling/feature/extension/apiregions/analyser/CheckApiRegionsBundleUnversionedPackages.java
 
b/src/main/java/org/apache/sling/feature/extension/apiregions/analyser/CheckApiRegionsBundleUnversionedPackages.java
index affe8cd..cda708d 100644
--- 
a/src/main/java/org/apache/sling/feature/extension/apiregions/analyser/CheckApiRegionsBundleUnversionedPackages.java
+++ 
b/src/main/java/org/apache/sling/feature/extension/apiregions/analyser/CheckApiRegionsBundleUnversionedPackages.java
@@ -18,6 +18,10 @@
  */
 package org.apache.sling.feature.extension.apiregions.analyser;
 
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
 import org.apache.sling.feature.analyser.task.AnalyserTask;
 import org.apache.sling.feature.analyser.task.AnalyserTaskContext;
 import org.apache.sling.feature.extension.apiregions.api.ApiRegions;
@@ -25,7 +29,6 @@ import org.apache.sling.feature.scanner.BundleDescriptor;
 import org.apache.sling.feature.scanner.PackageInfo;
 import org.osgi.framework.Version;
 
-import java.util.*;
 
 public class CheckApiRegionsBundleUnversionedPackages implements AnalyserTask {
 
@@ -42,35 +45,6 @@ public class CheckApiRegionsBundleUnversionedPackages 
implements AnalyserTask {
         return ApiRegions.EXTENSION_NAME + "-unversioned-packages";
     }
 
-    public static final class Report {
-
-        public List<PackageInfo> exportWithoutVersion = new ArrayList<>();
-
-        public List<PackageInfo> importWithoutVersion = new ArrayList<>();
-
-    }
-
-    private Report getReport(final Map<BundleDescriptor, Report> reports, 
final BundleDescriptor info) {
-        Report report = reports.get(info);
-        if ( report == null ) {
-            report = new Report();
-            reports.put(info, report);
-        }
-        return report;
-    }
-
-    private void checkForVersionOnExportedPackages(final AnalyserTaskContext 
ctx, final Map<BundleDescriptor, Report> reports) {
-        for(final BundleDescriptor info : 
ctx.getFeatureDescriptor().getBundleDescriptors()) {
-            if ( info.getExportedPackages() != null ) {
-                for(final PackageInfo i : info.getExportedPackages()) {
-                    if ( i.getPackageVersion().compareTo(Version.emptyVersion) 
== 0 ) {
-                        getReport(reports, info).exportWithoutVersion.add(i);
-                    }
-                }
-            }
-        }
-    }
-
     private boolean ignoreImportPackage(final String name) {
         for(final String prefix : IGNORED_IMPORT_PREFIXES) {
             if ( name.startsWith(prefix) ) {
@@ -80,43 +54,43 @@ public class CheckApiRegionsBundleUnversionedPackages 
implements AnalyserTask {
         return false;
     }
     
-    private void checkForVersionOnImportingPackages(final AnalyserTaskContext 
ctx, final Map<BundleDescriptor, Report> reports) {
+    @Override
+    public void execute(final AnalyserTaskContext ctx) throws Exception {
         for(final BundleDescriptor info : 
ctx.getFeatureDescriptor().getBundleDescriptors()) {
-            if ( info.getImportedPackages() != null ) {
-                for(final PackageInfo i : info.getImportedPackages()) {
-                    if ( i.getVersion() == null && 
!ignoreImportPackage(i.getName()) ) {
-                        getReport(reports, info).importWithoutVersion.add(i);
-                    }
+
+                
+            final List<PackageInfo> exportWithoutVersion = new ArrayList<>();
+            for(final PackageInfo i : info.getExportedPackages()) {
+                if ( i.getPackageVersion().compareTo(Version.emptyVersion) == 
0 ) {
+                    exportWithoutVersion.add(i);
+                }
+            }
+            final List<PackageInfo> importWithoutVersion = new ArrayList<>();
+            for(final PackageInfo i : info.getImportedPackages()) {
+                if ( i.getVersion() == null && 
!ignoreImportPackage(i.getName()) ) {
+                    importWithoutVersion.add(i);
                 }
             }
-        }
-    }
-
-    @Override
-    public void execute(final AnalyserTaskContext ctx) throws Exception {
-        final Map<BundleDescriptor, Report> reports = new HashMap<>();
-        checkForVersionOnExportedPackages(ctx, reports);
-        checkForVersionOnImportingPackages(ctx, reports);
 
-        for(final Map.Entry<BundleDescriptor, Report> entry : 
reports.entrySet()) {
-            final String key = "Bundle " + 
entry.getKey().getArtifact().getId().getArtifactId() + ":" + 
entry.getKey().getArtifact().getId().getVersion();
+            final String key = "Bundle 
".concat(info.getArtifact().getId().getArtifactId())
+                .concat(":").concat(info.getArtifact().getId().getVersion());
 
-            if ( !entry.getValue().importWithoutVersion.isEmpty() ) {
-                ctx.reportArtifactWarning(entry.getKey().getArtifact().getId(),
-                        key + " is importing package(s) " + 
getPackageInfo(entry.getValue().importWithoutVersion) + " without specifying a 
version range.");
+            if ( !importWithoutVersion.isEmpty() ) {
+                ctx.reportArtifactWarning(info.getArtifact().getId(),
+                        key.concat(" is importing 
").concat(getPackageInfo(importWithoutVersion)).concat(" without specifying a 
version range."));
             }
-            if ( !entry.getValue().exportWithoutVersion.isEmpty() ) {
-                ctx.reportArtifactWarning(entry.getKey().getArtifact().getId(),
-                        key + " is exporting package(s) " + 
getPackageInfo(entry.getValue().exportWithoutVersion) + " without a version.");
+            if ( !exportWithoutVersion.isEmpty() ) {
+                ctx.reportArtifactWarning(info.getArtifact().getId(),
+                        key.concat(" is exporting 
").concat(getPackageInfo(exportWithoutVersion)).concat(" without a version."));
             }
         }
     }
 
     private String getPackageInfo(final List<PackageInfo> pcks) {
         if ( pcks.size() == 1 ) {
-                return pcks.get(0).getName();
+            return "package ".concat(pcks.get(0).getName());
         }
-        final StringBuilder sb = new StringBuilder();
+        final StringBuilder sb = new StringBuilder("packages ");
         boolean first = true;
         sb.append('[');
         for(final PackageInfo info : pcks) {
@@ -130,5 +104,4 @@ public class CheckApiRegionsBundleUnversionedPackages 
implements AnalyserTask {
         sb.append(']');
         return sb.toString();
     }
-
 }
diff --git 
a/src/test/java/org/apache/sling/feature/extension/apiregions/analyser/CheckApiRegionsBundleUnversionedPackagesTest.java
 
b/src/test/java/org/apache/sling/feature/extension/apiregions/analyser/CheckApiRegionsBundleUnversionedPackagesTest.java
index 37747c1..ff4695c 100644
--- 
a/src/test/java/org/apache/sling/feature/extension/apiregions/analyser/CheckApiRegionsBundleUnversionedPackagesTest.java
+++ 
b/src/test/java/org/apache/sling/feature/extension/apiregions/analyser/CheckApiRegionsBundleUnversionedPackagesTest.java
@@ -31,10 +31,6 @@ import org.mockito.Mockito;
 
 import java.io.File;
 import java.io.IOException;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.Map;
-
 import static org.junit.Assert.assertEquals;
 
 public class CheckApiRegionsBundleUnversionedPackagesTest {
diff --git 
a/src/test/java/org/apache/sling/feature/extension/apiregions/analyser/CheckArtifactRulesTest.java
 
b/src/test/java/org/apache/sling/feature/extension/apiregions/analyser/CheckArtifactRulesTest.java
index 4689d91..96814e1 100644
--- 
a/src/test/java/org/apache/sling/feature/extension/apiregions/analyser/CheckArtifactRulesTest.java
+++ 
b/src/test/java/org/apache/sling/feature/extension/apiregions/analyser/CheckArtifactRulesTest.java
@@ -18,11 +18,6 @@ package 
org.apache.sling.feature.extension.apiregions.analyser;
 
 import static org.mockito.Mockito.when;
 
-import java.util.ArrayList;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
-
 import org.apache.sling.feature.Artifact;
 import org.apache.sling.feature.ArtifactId;
 import org.apache.sling.feature.Extension;

Reply via email to