ProviderList getJarList ( String [ ] jarClassNames ) { List < ProviderConfig > newConfigs = new ArrayList <> ( ) ; for ( String className : jarClassNames ) { ProviderConfig newConfig = new ProviderConfig ( className ) ; for ( ProviderConfig config : configs ) { // if the equivalent object is present in this provider list, // use the old object rather than the new object. // this ensures that when the provider is loaded in the // new thread local list, it will also become available // in this provider list if ( config . equals ( newConfig ) ) { newConfig = config ; break ; } } newConfigs . add ( newConfig ) ; } ProviderConfig [ ] configArray = newConfigs . toArray ( PC0 ) ; return new ProviderList ( configArray , false ) ; }
Construct a special ProviderList for JAR verification . It consists of the providers specified via jarClassNames which must be on the bootclasspath and cannot be in signed JAR files . This is to avoid possible recursion and deadlock during verification .