Skip to content

Commit e02477c

Browse files
committed
Handle nested JAR files in getClassNamesFromPackage and reduce cognitive complexity method
1 parent 5949a21 commit e02477c

1 file changed

Lines changed: 47 additions & 38 deletions

File tree

util/src/main/java/io/kubernetes/client/util/ModelMapper.java

Lines changed: 47 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
import io.kubernetes.client.common.KubernetesObject;
2020
import io.kubernetes.client.openapi.ApiException;
2121
import java.io.File;
22+
import java.io.FileInputStream;
2223
import java.io.IOException;
2324
import java.net.URI;
2425
import java.net.URL;
@@ -34,6 +35,8 @@
3435
import java.util.concurrent.ConcurrentHashMap;
3536
import java.util.jar.JarEntry;
3637
import java.util.jar.JarFile;
38+
import java.util.jar.JarInputStream;
39+
3740
import org.apache.commons.lang3.tuple.MutablePair;
3841
import org.apache.commons.lang3.tuple.Pair;
3942
import org.slf4j.Logger;
@@ -460,49 +463,55 @@ K getByV(V v) {
460463
return vkMap.get(v);
461464
}
462465
}
463-
464-
private static List<String> getClassNamesFromPackage(ClassLoader classLoader, String pkg)
465-
throws IOException {
466-
467-
URL packageURL;
468-
ArrayList<String> names = new ArrayList<String>();
469-
466+
private static List<String> getClassNamesFromPackage(ClassLoader classLoader, String pkg) throws IOException {
467+
ArrayList<String> names = new ArrayList<>();
470468
String packageName = pkg.replace(".", "/");
471-
packageURL = classLoader.getResource(packageName);
469+
URL packageURL = classLoader.getResource(packageName);
472470

473471
if (packageURL.getProtocol().equals("jar")) {
474-
String jarFileName;
475-
JarFile jf;
476-
Enumeration<JarEntry> jarEntries;
477-
String entryName;
478-
jarFileName = URLDecoder.decode(packageURL.getFile(), "UTF-8");
479-
jarFileName = jarFileName.substring(5, jarFileName.indexOf("!"));
480-
logger.info("Loading classes from jar {}", jarFileName);
481-
jf = new JarFile(jarFileName);
482-
jarEntries = jf.entries();
483-
while (jarEntries.hasMoreElements()) {
484-
entryName = jarEntries.nextElement().getName();
485-
if (entryName.startsWith(packageName) && entryName.length() > packageName.length() + 5) {
486-
entryName = entryName.substring(packageName.length() + 1, entryName.lastIndexOf('.'));
487-
names.add(pkg + "." + entryName);
488-
}
489-
}
490-
jf.close();
472+
processJarPackage(packageURL, packageName, pkg, names);
491473
} else {
492-
URI uri = URI.create(packageURL.toString());
493-
File folder = new File(uri.getPath());
494-
File[] contenuti = folder.listFiles();
495-
if (contenuti == null) {
496-
logger.warn("No files to load found in {}", folder.getPath());
497-
return names;
498-
}
499-
String entryName;
500-
for (File actual : contenuti) {
501-
entryName = actual.getName();
502-
entryName = entryName.substring(0, entryName.lastIndexOf('.'));
503-
names.add(pkg + "." + entryName);
504-
}
474+
processFilePackage(packageURL, pkg, names);
505475
}
506476
return names;
507477
}
478+
479+
private static void processJarPackage(URL packageURL, String packageName, String pkg, ArrayList<String> names) throws IOException {
480+
String jarFileName = URLDecoder.decode(packageURL.getFile(), "UTF-8");
481+
jarFileName = jarFileName.substring(5, jarFileName.indexOf("!"));
482+
logger.info("Loading classes from jar {}", jarFileName);
483+
try (JarFile jf = new JarFile(jarFileName)) {
484+
Enumeration<JarEntry> jarEntries = jf.entries();
485+
while (jarEntries.hasMoreElements()) {
486+
processJarEntry(jarEntries.nextElement(), packageName, pkg, names);
487+
}
488+
}
489+
}
490+
491+
private static void processJarEntry(JarEntry jarEntry, String packageName, String pkg, ArrayList<String> names) {
492+
String entryName = jarEntry.getName();
493+
if (entryName.startsWith(packageName) && entryName.length() > packageName.length() + 5) {
494+
entryName = entryName.substring(packageName.length() + 1, entryName.lastIndexOf('.'));
495+
names.add(pkg + "." + entryName);
496+
}
497+
}
498+
499+
private static void processFilePackage(URL packageURL, String pkg, ArrayList<String> names) {
500+
URI uri = URI.create(packageURL.toString());
501+
File folder = new File(uri.getPath());
502+
File[] contenuti = folder.listFiles();
503+
if (contenuti == null) {
504+
logger.warn("No files to load found in {}", folder.getPath());
505+
return;
506+
}
507+
for (File actual : contenuti) {
508+
processFileEntry(actual, pkg, names);
509+
}
510+
}
511+
512+
private static void processFileEntry(File actual, String pkg, ArrayList<String> names) {
513+
String entryName = actual.getName();
514+
entryName = entryName.substring(0, entryName.lastIndexOf('.'));
515+
names.add(pkg + "." + entryName);
516+
}
508517
}

0 commit comments

Comments
 (0)