@@ -187,6 +187,8 @@ public static class Options {
187187
188188 /** Provider list that contains only used providers. */
189189 private ProviderList filteredProviderList ;
190+ /** List of providers deemed not to be used by this feature. */
191+ private List <Provider > removedProviders ;
190192
191193 private boolean shouldFilterProviders = true ;
192194
@@ -342,11 +344,27 @@ public ProviderList cleanUnregisteredProviders(ProviderList providerList) {
342344 filteredProviders .removeIf (this ::shouldRemoveProvider );
343345 if (filteredProviderList == null || !filteredProviderList .providers ().equals (filteredProviders )) {
344346 filteredProviderList = ProviderList .newList (filteredProviders .toArray (new Provider [0 ]));
347+ removedProviders = new ArrayList <>(providerList .providers ());
348+ removedProviders .removeIf (provider -> !shouldRemoveProvider (provider ));
345349 }
346350 }
347351 return filteredProviderList ;
348352 }
349353
354+ private void traceRemovedProviders () {
355+ if (removedProviders .isEmpty ()) {
356+ trace ("No security providers have been removed." );
357+ } else {
358+ trace ("The following security providers were deemed to be unused and removed:" );
359+ SecurityServicesPrinter .indent ();
360+ trace ("ProviderName - ProviderClass" );
361+ for (Provider p : removedProviders ) {
362+ trace ("%s - %s" , p .getName (), p .getClass ().getName ());
363+ }
364+ SecurityServicesPrinter .dedent ();
365+ }
366+ }
367+
350368 private static void linkSunEC (DuringAnalysisAccess a ) {
351369 NativeLibraries nativeLibraries = ((DuringAnalysisAccessImpl ) a ).getNativeLibraries ();
352370 /* We statically link sunec thus we classify it as builtIn library */
@@ -638,6 +656,7 @@ private static void registerX509Extensions() {
638656
639657 @ Override
640658 public void afterAnalysis (AfterAnalysisAccess access ) {
659+ traceRemovedProviders ();
641660 SecurityServicesPrinter .endTracing ();
642661 shouldFilterProviders = false ;
643662 }
0 commit comments