Browse Source

Improve null-safety of loader/spring-boot-jarmode-tools

See gh-46926
pull/46973/head
Moritz Halbritter 5 months ago
parent
commit
f5be18587c
  1. 4
      loader/spring-boot-jarmode-tools/src/main/java/org/springframework/boot/jarmode/tools/Command.java
  2. 40
      loader/spring-boot-jarmode-tools/src/main/java/org/springframework/boot/jarmode/tools/ExtractCommand.java
  3. 4
      loader/spring-boot-jarmode-tools/src/main/java/org/springframework/boot/jarmode/tools/ExtractLayersCommand.java
  4. 2
      loader/spring-boot-jarmode-tools/src/main/java/org/springframework/boot/jarmode/tools/HelpCommand.java
  5. 4
      loader/spring-boot-jarmode-tools/src/main/java/org/springframework/boot/jarmode/tools/ListCommand.java
  6. 4
      loader/spring-boot-jarmode-tools/src/main/java/org/springframework/boot/jarmode/tools/ListLayersCommand.java

4
loader/spring-boot-jarmode-tools/src/main/java/org/springframework/boot/jarmode/tools/Command.java

@ -100,7 +100,7 @@ abstract class Command { @@ -100,7 +100,7 @@ abstract class Command {
*/
final void run(PrintStream out, Deque<String> args) {
List<String> parameters = new ArrayList<>();
Map<Option, String> options = new HashMap<>();
Map<Option, @Nullable String> options = new HashMap<>();
while (!args.isEmpty()) {
String arg = args.removeFirst();
Option option = this.options.find(arg);
@ -120,7 +120,7 @@ abstract class Command { @@ -120,7 +120,7 @@ abstract class Command {
* @param options any options extracted from the arguments
* @param parameters any parameters extracted from the arguments
*/
abstract void run(PrintStream out, Map<Option, String> options, List<String> parameters);
abstract void run(PrintStream out, Map<Option, @Nullable String> options, List<String> parameters);
/**
* Whether the command is deprecated.

40
loader/spring-boot-jarmode-tools/src/main/java/org/springframework/boot/jarmode/tools/ExtractCommand.java

@ -101,7 +101,7 @@ class ExtractCommand extends Command { @@ -101,7 +101,7 @@ class ExtractCommand extends Command {
}
@Override
void run(PrintStream out, Map<Option, String> options, List<String> parameters) {
void run(PrintStream out, Map<Option, @Nullable String> options, List<String> parameters) {
try {
checkJarCompatibility();
File destination = getDestination(options);
@ -122,7 +122,7 @@ class ExtractCommand extends Command { @@ -122,7 +122,7 @@ class ExtractCommand extends Command {
}
}
private static void checkDirectoryIsEmpty(Map<Option, String> options, File destination) {
private static void checkDirectoryIsEmpty(Map<Option, @Nullable String> options, File destination) {
if (options.containsKey(FORCE_OPTION)) {
return;
}
@ -150,8 +150,8 @@ class ExtractCommand extends Command { @@ -150,8 +150,8 @@ class ExtractCommand extends Command {
}
}
private void extractLibraries(FileResolver fileResolver, JarStructure jarStructure, Map<Option, String> options)
throws IOException {
private void extractLibraries(FileResolver fileResolver, JarStructure jarStructure,
Map<Option, @Nullable String> options) throws IOException {
String librariesDirectory = getLibrariesDirectory(options);
extractArchive(fileResolver, (jarEntry) -> {
Entry entry = jarStructure.resolve(jarEntry);
@ -162,18 +162,18 @@ class ExtractCommand extends Command { @@ -162,18 +162,18 @@ class ExtractCommand extends Command {
});
}
private static String getLibrariesDirectory(Map<Option, String> options) {
if (options.containsKey(LIBRARIES_DIRECTORY_OPTION)) {
String value = options.get(LIBRARIES_DIRECTORY_OPTION);
if (value.endsWith("/")) {
return value;
private static String getLibrariesDirectory(Map<Option, @Nullable String> options) {
String libraryDirectory = options.get(LIBRARIES_DIRECTORY_OPTION);
if (libraryDirectory != null) {
if (libraryDirectory.endsWith("/")) {
return libraryDirectory;
}
return value + "/";
return libraryDirectory + "/";
}
return "lib/";
}
private FileResolver getFileResolver(File destination, Map<Option, String> options) {
private FileResolver getFileResolver(File destination, Map<Option, @Nullable String> options) {
String applicationFilename = getApplicationFilename(options);
if (!options.containsKey(LAYERS_OPTION)) {
return new NoLayersFileResolver(destination, applicationFilename);
@ -183,9 +183,10 @@ class ExtractCommand extends Command { @@ -183,9 +183,10 @@ class ExtractCommand extends Command {
return new LayersFileResolver(destination, layers, layersToExtract, applicationFilename);
}
private File getDestination(Map<Option, String> options) {
if (options.containsKey(DESTINATION_OPTION)) {
File destination = new File(options.get(DESTINATION_OPTION));
private File getDestination(Map<Option, @Nullable String> options) {
String value = options.get(DESTINATION_OPTION);
if (value != null) {
File destination = new File(value);
if (destination.isAbsolute()) {
return destination;
}
@ -232,8 +233,8 @@ class ExtractCommand extends Command { @@ -232,8 +233,8 @@ class ExtractCommand extends Command {
return (this.layers != null) ? this.layers : Layers.get(this.context);
}
private void createApplication(JarStructure jarStructure, FileResolver fileResolver, Map<Option, String> options)
throws IOException {
private void createApplication(JarStructure jarStructure, FileResolver fileResolver,
Map<Option, @Nullable String> options) throws IOException {
File file = fileResolver.resolveApplication();
if (file == null) {
return;
@ -264,9 +265,10 @@ class ExtractCommand extends Command { @@ -264,9 +265,10 @@ class ExtractCommand extends Command {
}
}
private String getApplicationFilename(Map<Option, String> options) {
if (options.containsKey(APPLICATION_FILENAME_OPTION)) {
return options.get(APPLICATION_FILENAME_OPTION);
private String getApplicationFilename(Map<Option, @Nullable String> options) {
String value = options.get(APPLICATION_FILENAME_OPTION);
if (value != null) {
return value;
}
return this.context.getArchiveFile().getName();
}

4
loader/spring-boot-jarmode-tools/src/main/java/org/springframework/boot/jarmode/tools/ExtractLayersCommand.java

@ -58,8 +58,8 @@ class ExtractLayersCommand extends Command { @@ -58,8 +58,8 @@ class ExtractLayersCommand extends Command {
}
@Override
void run(PrintStream out, Map<Option, String> options, List<String> parameters) {
Map<Option, String> rewrittenOptions = new HashMap<>();
void run(PrintStream out, Map<Option, @Nullable String> options, List<String> parameters) {
Map<Option, @Nullable String> rewrittenOptions = new HashMap<>();
rewrittenOptions.put(ExtractCommand.DESTINATION_OPTION, options.getOrDefault(DESTINATION_OPTION, "."));
rewrittenOptions.put(ExtractCommand.LAYERS_OPTION, StringUtils.collectionToCommaDelimitedString(parameters));
rewrittenOptions.put(ExtractCommand.LAUNCHER_OPTION, null);

2
loader/spring-boot-jarmode-tools/src/main/java/org/springframework/boot/jarmode/tools/HelpCommand.java

@ -49,7 +49,7 @@ class HelpCommand extends Command { @@ -49,7 +49,7 @@ class HelpCommand extends Command {
}
@Override
void run(PrintStream out, Map<Option, String> options, List<String> parameters) {
void run(PrintStream out, Map<Option, @Nullable String> options, List<String> parameters) {
run(out, parameters);
}

4
loader/spring-boot-jarmode-tools/src/main/java/org/springframework/boot/jarmode/tools/ListCommand.java

@ -20,6 +20,8 @@ import java.io.PrintStream; @@ -20,6 +20,8 @@ import java.io.PrintStream;
import java.util.List;
import java.util.Map;
import org.jspecify.annotations.Nullable;
/**
* The {@code 'list'} tools command.
*
@ -48,7 +50,7 @@ class ListCommand extends Command { @@ -48,7 +50,7 @@ class ListCommand extends Command {
}
@Override
void run(PrintStream out, Map<Option, String> options, List<String> parameters) {
void run(PrintStream out, Map<Option, @Nullable String> options, List<String> parameters) {
this.delegate.run(out, options, parameters);
}

4
loader/spring-boot-jarmode-tools/src/main/java/org/springframework/boot/jarmode/tools/ListLayersCommand.java

@ -20,6 +20,8 @@ import java.io.PrintStream; @@ -20,6 +20,8 @@ import java.io.PrintStream;
import java.util.List;
import java.util.Map;
import org.jspecify.annotations.Nullable;
/**
* The {@code 'list-layers'} tools command.
*
@ -35,7 +37,7 @@ class ListLayersCommand extends Command { @@ -35,7 +37,7 @@ class ListLayersCommand extends Command {
}
@Override
void run(PrintStream out, Map<Option, String> options, List<String> parameters) {
void run(PrintStream out, Map<Option, @Nullable String> options, List<String> parameters) {
Layers layers = Layers.get(this.context);
printLayers(out, layers);
}

Loading…
Cancel
Save