code: 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);
      }
docs: 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.