421 // configuration file
422 Stream<String> stream = jf.stream()
423 .map(e -> e.getName())
424 .filter(e -> (e.endsWith(".class") || e.startsWith(SERVICES_PREFIX)))
425 .distinct();
426 Map<Boolean, Set<String>> map
427 = stream.collect(Collectors.partitioningBy(s -> s.endsWith(".class"),
428 Collectors.toSet()));
429 Set<String> classFiles = map.get(Boolean.TRUE);
430 Set<String> configFiles = map.get(Boolean.FALSE);
431
432 // all packages are exported
433 classFiles.stream()
434 .map(c -> toPackageName(c))
435 .distinct()
436 .forEach(p -> builder.exports(p));
437
438 // map names of service configuration files to service names
439 Set<String> serviceNames = configFiles.stream()
440 .map(this::toServiceName)
441 .filter(Optional::isPresent)
442 .map(Optional::get)
443 .collect(Collectors.toSet());
444
445 // parse each service configuration file
446 for (String sn : serviceNames) {
447 JarEntry entry = jf.getJarEntry(SERVICES_PREFIX + sn);
448 Set<String> providerClasses = new HashSet<>();
449 try (InputStream in = jf.getInputStream(entry)) {
450 BufferedReader reader
451 = new BufferedReader(new InputStreamReader(in, "UTF-8"));
452 String cn;
453 while ((cn = nextLine(reader)) != null) {
454 if (Checks.isJavaIdentifier(cn)) {
455 providerClasses.add(cn);
456 }
457 }
458 }
459 if (!providerClasses.isEmpty())
460 builder.provides(sn, providerClasses);
461 }
462
|
421 // configuration file
422 Stream<String> stream = jf.stream()
423 .map(e -> e.getName())
424 .filter(e -> (e.endsWith(".class") || e.startsWith(SERVICES_PREFIX)))
425 .distinct();
426 Map<Boolean, Set<String>> map
427 = stream.collect(Collectors.partitioningBy(s -> s.endsWith(".class"),
428 Collectors.toSet()));
429 Set<String> classFiles = map.get(Boolean.TRUE);
430 Set<String> configFiles = map.get(Boolean.FALSE);
431
432 // all packages are exported
433 classFiles.stream()
434 .map(c -> toPackageName(c))
435 .distinct()
436 .forEach(p -> builder.exports(p));
437
438 // map names of service configuration files to service names
439 Set<String> serviceNames = configFiles.stream()
440 .map(this::toServiceName)
441 .flatMap(Optional::stream)
442 .collect(Collectors.toSet());
443
444 // parse each service configuration file
445 for (String sn : serviceNames) {
446 JarEntry entry = jf.getJarEntry(SERVICES_PREFIX + sn);
447 Set<String> providerClasses = new HashSet<>();
448 try (InputStream in = jf.getInputStream(entry)) {
449 BufferedReader reader
450 = new BufferedReader(new InputStreamReader(in, "UTF-8"));
451 String cn;
452 while ((cn = nextLine(reader)) != null) {
453 if (Checks.isJavaIdentifier(cn)) {
454 providerClasses.add(cn);
455 }
456 }
457 }
458 if (!providerClasses.isEmpty())
459 builder.provides(sn, providerClasses);
460 }
461
|