Compare commits

..

2 commits

Author SHA1 Message Date
Erik C. Thauvin 4de8d3c629
Handle null values in path and comma-separated options via stream filters 2026-01-25 11:37:35 -08:00
Erik C. Thauvin 44144ce095
Add missing null/empty checks 2026-01-25 11:20:24 -08:00

View file

@ -11,6 +11,7 @@ import java.nio.file.Path;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Objects;
import java.util.stream.Collectors;
import static rife.bld.operations.CompileOperation.COMPILE_OPTION_MODULE_PATH;
@ -88,26 +89,34 @@ public class JavacOptions extends ArrayList<String> {
return collection != null && !collection.isEmpty();
}
/**
* Helper method to add delimited options
*/
private JavacOptions addDelimitedOption(String option, Collection<String> values, String separator) {
if (isNotEmpty(values)) {
var joined = values.stream()
.filter(Objects::nonNull)
.collect(Collectors.joining(separator));
if (!joined.isEmpty()) {
add(option);
add(joined);
}
}
return this;
}
/**
* Helper method to add path-based options
*/
private JavacOptions addPathOption(String option, Collection<String> paths) {
if (isNotEmpty(paths)) {
add(option);
add(String.join(File.pathSeparator, paths));
}
return this;
return addDelimitedOption(option, paths, File.pathSeparator);
}
/**
* Helper method to add comma-separated options
*/
private JavacOptions addCommaSeparatedOption(String option, Collection<String> values) {
if (isNotEmpty(values)) {
add(option);
add(String.join(",", values));
}
return this;
return addDelimitedOption(option, values, ",");
}
/**
@ -145,8 +154,11 @@ public class JavacOptions extends ArrayList<String> {
* @since 2.3.1
*/
public JavacOptions addExports(Collection<String> modules) {
if (isNotEmpty(modules)) {
return addCommaSeparatedOption("--add-exports", modules);
}
return this;
}
/**
* Specifies additional modules to be considered as required by a given module
@ -168,8 +180,11 @@ public class JavacOptions extends ArrayList<String> {
* @since 2.3.1
*/
public JavacOptions addReads(Collection<String> modules) {
if (isNotEmpty(modules)) {
return addCommaSeparatedOption("--add-reads", modules);
}
return this;
}
/**
* Root modules to resolve in addition to the initial modules,
@ -193,8 +208,11 @@ public class JavacOptions extends ArrayList<String> {
* @since 1.5.18
*/
public JavacOptions addModules(Collection<String> modules) {
if (isNotEmpty(modules)) {
return addCommaSeparatedOption("--add-modules", modules);
}
return this;
}
/**
* Specify character encoding used by source files
@ -263,8 +281,11 @@ public class JavacOptions extends ArrayList<String> {
* @since 1.5.18
*/
public JavacOptions endorsedDirs(Collection<File> dirs) {
if (isNotEmpty(dirs)) {
return endorsedDirsStrings(dirs.stream().map(File::getAbsolutePath).toList());
}
return this;
}
/**
* Override location of endorsed standards path
@ -286,8 +307,11 @@ public class JavacOptions extends ArrayList<String> {
* @since 2.1
*/
public JavacOptions endorsedDirsPaths(Collection<Path> dirs) {
if (isNotEmpty(dirs)) {
return endorsedDirs(dirs.stream().map(Path::toFile).toList());
}
return this;
}
/**
* Override location of endorsed standards path
@ -309,11 +333,7 @@ public class JavacOptions extends ArrayList<String> {
* @since 2.1
*/
public JavacOptions endorsedDirsStrings(Collection<String> dirs) {
if (isNotEmpty(dirs)) {
add("-endorseddirs");
add(String.join(",", dirs));
}
return this;
return addCommaSeparatedOption("-endorseddirs", dirs);
}
/**
@ -336,8 +356,11 @@ public class JavacOptions extends ArrayList<String> {
* @since 1.5.18
*/
public JavacOptions extDirs(Collection<File> dirs) {
if (isNotEmpty(dirs)) {
return extDirsStrings(dirs.stream().map(File::getAbsolutePath).toList());
}
return this;
}
/**
* Override location of installed extensions
@ -359,8 +382,11 @@ public class JavacOptions extends ArrayList<String> {
* @since 2.1
*/
public JavacOptions extDirsPaths(Collection<Path> dirs) {
if (isNotEmpty(dirs)) {
return extDirs(dirs.stream().map(Path::toFile).toList());
}
return this;
}
/**
* Override location of installed extensions
@ -382,11 +408,7 @@ public class JavacOptions extends ArrayList<String> {
* @since 2.1
*/
public JavacOptions extDirsStrings(Collection<String> dirs) {
if (isNotEmpty(dirs)) {
add("-extdirs");
add(String.join(",", dirs));
}
return this;
return addCommaSeparatedOption("-extdirs", dirs);
}
/**
@ -526,8 +548,11 @@ public class JavacOptions extends ArrayList<String> {
* @since 1.5.18
*/
public JavacOptions limitModules(Collection<String> modules) {
if (isNotEmpty(modules)) {
return addCommaSeparatedOption("--limit-modules", modules);
}
return this;
}
/**
* Compile only the specified module(s), check timestamps
@ -549,8 +574,11 @@ public class JavacOptions extends ArrayList<String> {
* @since 1.5.18
*/
public JavacOptions module(Collection<String> modules) {
if (isNotEmpty(modules)) {
return addCommaSeparatedOption("--module", modules);
}
return this;
}
/**
* /**
@ -573,8 +601,11 @@ public class JavacOptions extends ArrayList<String> {
* @since 1.6.2
*/
public JavacOptions modulePath(Collection<File> paths) {
if (isNotEmpty(paths)) {
return modulePathStrings(paths.stream().map(File::getAbsolutePath).toList());
}
return this;
}
/**
* Specify where to find application modules
@ -596,8 +627,11 @@ public class JavacOptions extends ArrayList<String> {
* @since 2.1
*/
public JavacOptions modulePathPaths(Collection<Path> paths) {
if (isNotEmpty(paths)) {
return modulePathStrings(paths.stream().map(Path::toString).toList());
}
return this;
}
/**
* Specify where to find application modules
@ -619,8 +653,11 @@ public class JavacOptions extends ArrayList<String> {
* @since 2.1
*/
public JavacOptions modulePathStrings(Collection<String> paths) {
if (isNotEmpty(paths)) {
return addPathOption(COMPILE_OPTION_MODULE_PATH, paths);
}
return this;
}
/**
* Specify where to find input source files for multiple modules
@ -629,8 +666,11 @@ public class JavacOptions extends ArrayList<String> {
* @since 2.3.1
*/
public JavacOptions moduleSourcePathStrings(Collection<String> paths) {
if (isNotEmpty(paths)) {
return addPathOption("--module-source-path", paths);
}
return this;
}
/**
* Specify where to find input source files for multiple modules
@ -639,8 +679,11 @@ public class JavacOptions extends ArrayList<String> {
* @since 2.3.1
*/
public JavacOptions moduleSourcePathPaths(Collection<Path> paths) {
if (isNotEmpty(paths)) {
return moduleSourcePathStrings(paths.stream().map(Path::toString).toList());
}
return this;
}
/**
* Specify where to find input source files for multiple modules
@ -649,8 +692,11 @@ public class JavacOptions extends ArrayList<String> {
* @since 2.3.1
*/
public JavacOptions moduleSourcePath(Collection<File> paths) {
if (isNotEmpty(paths)) {
return moduleSourcePathStrings(paths.stream().map(File::getPath).toList());
}
return this;
}
/**
* Specify where to find input source files for multiple modules
@ -756,8 +802,11 @@ public class JavacOptions extends ArrayList<String> {
* @since 1.5.18
*/
public JavacOptions processors(Collection<String> classnames) {
if (isNotEmpty(classnames)) {
return addCommaSeparatedOption("-processor", classnames);
}
return this;
}
/**
* Specify a module path where to find annotation processors
@ -805,8 +854,11 @@ public class JavacOptions extends ArrayList<String> {
* @since 2.3.1
*/
public JavacOptions processorModulePathPaths(Collection<Path> paths) {
if (isNotEmpty(paths)) {
return processorModulePathStrings(paths.stream().map(Path::toString).toList());
}
return this;
}
/**
* Specify a module path where to find annotation processors
@ -815,8 +867,11 @@ public class JavacOptions extends ArrayList<String> {
* @since 2.3.1
*/
public JavacOptions processorModulePathStrings(Collection<String> paths) {
if (isNotEmpty(paths)) {
return addPathOption("--processor-module-path", paths);
}
return this;
}
/**
* Specify a module path where to find annotation processors
@ -825,8 +880,11 @@ public class JavacOptions extends ArrayList<String> {
* @since 2.3.1
*/
public JavacOptions processorModulePath(Collection<File> paths) {
if (isNotEmpty(paths)) {
return processorModulePathStrings(paths.stream().map(File::getAbsolutePath).toList());
}
return this;
}
/**
* Specify where to find annotation processors
@ -874,8 +932,11 @@ public class JavacOptions extends ArrayList<String> {
* @since 2.3.1
*/
public JavacOptions processorPathStrings(Collection<String> paths) {
if (isNotEmpty(paths)) {
return addPathOption("--processor-path", paths);
}
return this;
}
/**
* Specify where to find annotation processors
@ -884,8 +945,11 @@ public class JavacOptions extends ArrayList<String> {
* @since 2.3.1
*/
public JavacOptions processorPath(Collection<File> paths) {
if (isNotEmpty(paths)) {
return processorPathStrings(paths.stream().map(File::getAbsolutePath).toList());
}
return this;
}
/**
* Specify where to find annotation processors
@ -894,8 +958,11 @@ public class JavacOptions extends ArrayList<String> {
* @since 2.3.1
*/
public JavacOptions processorPathPaths(Collection<Path> paths) {
if (isNotEmpty(paths)) {
return processorPathStrings(paths.stream().map(Path::toString).toList());
}
return this;
}
/**
* Check that the API used is available in the specified profile
@ -1002,8 +1069,11 @@ public class JavacOptions extends ArrayList<String> {
* @since 2.3.1
*/
public JavacOptions upgradeModulePathStrings(Collection<String> paths) {
if (isNotEmpty(paths)) {
return addPathOption("--upgrade-module-path", paths);
}
return this;
}
/**
* Override location of upgradeable modules
@ -1012,8 +1082,11 @@ public class JavacOptions extends ArrayList<String> {
* @since 2.3.1
*/
public JavacOptions upgradeModulePath(Collection<File> paths) {
if (isNotEmpty(paths)) {
return upgradeModulePathStrings(paths.stream().map(File::getAbsolutePath).toList());
}
return this;
}
/**
* Override location of upgradeable modules
@ -1022,8 +1095,11 @@ public class JavacOptions extends ArrayList<String> {
* @since 2.3.1
*/
public JavacOptions upgradeModulePathPaths(Collection<Path> paths) {
if (isNotEmpty(paths)) {
return upgradeModulePathStrings(paths.stream().map(Path::toString).toList());
}
return this;
}
/**
* Terminate compilation if warnings occur
@ -1067,8 +1143,11 @@ public class JavacOptions extends ArrayList<String> {
* @since 2.3.1
*/
public JavacOptions xLint(Collection<XLintKey> keys) {
if (isNotEmpty(keys)) {
return addXLintOption(keys, "");
}
return this;
}
/**
* Warning categories to disable