public void execute()

in src/main/java/org/apache/sling/feature/analyser/task/impl/CheckUnusedBundles.java [44:100]


    public void execute(final AnalyserTaskContext ctx) throws IOException {
        // iterate over all bundles
        for(final BundleDescriptor info : ctx.getFeatureDescriptor().getBundleDescriptors()) {

            if ( !info.getExportedPackages().isEmpty() ) {

                final Set<PackageInfo> exports = new HashSet<>(info.getExportedPackages());
                
                final Set<String> optionalImports = new HashSet<>();

                // find importing bundle
                for(final BundleDescriptor inner : ctx.getFeatureDescriptor().getBundleDescriptors()) {
                    if ( inner == info ) {
                        continue;
                    }

                    final Iterator<PackageInfo> iter = exports.iterator();
                    while ( iter.hasNext() ) {
                        final PackageInfo expPck = iter.next();

                        boolean found = false;
                        for(final PackageInfo impPck : inner.getImportedPackages()) {
                            
                            if ( expPck.getName().equals(impPck.getName())) {
                                if ( impPck.getVersion() == null || impPck.getPackageVersionRange().includes(expPck.getPackageVersion()) ) {
                                    if ( impPck.isOptional() ) {
                                        optionalImports.add(impPck.getName());
                                    } else {
                                        found = true;
                                    }
                                    break;
                                }
                            }
                        }

                        if ( found ) {
                            iter.remove();
                        }
     
                    }

                    if ( exports.isEmpty() ) {
                        break;
                    }
                }

                if ( exports.size() == info.getExportedPackages().size() ) {
                    if ( !optionalImports.isEmpty() ) {
                        ctx.reportArtifactWarning(info.getArtifact().getId(), "Exports from bundle are only imported optionally by other bundles.");
                    } else {
                        ctx.reportArtifactWarning(info.getArtifact().getId(), "Exports from bundle are not imported by any other bundle.");
                    }
                }

            }
        }
    }