Added support for Collections as arguments

This commit is contained in:
Erik C. Thauvin 2023-11-03 23:10:31 -07:00
parent 4fb70e48fe
commit 6e161e1445
2 changed files with 42 additions and 46 deletions

3
.idea/misc.xml generated
View file

@ -1,5 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<project version="4"> <project version="4">
<component name="EntryPointsManager">
<pattern value="rife.bld.extension.CompileKotlinOperationBuild" method="pmd" />
</component>
<component name="PDMPlugin"> <component name="PDMPlugin">
<option name="customRuleSets"> <option name="customRuleSets">
<list> <list>

View file

@ -23,16 +23,11 @@ import rife.tools.FileUtils;
import java.io.File; import java.io.File;
import java.io.IOException; import java.io.IOException;
import java.util.ArrayList; import java.util.*;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.logging.Level; import java.util.logging.Level;
import java.util.logging.Logger; import java.util.logging.Logger;
import java.util.regex.Pattern; import java.util.regex.Pattern;
import static rife.tools.FileUtils.getFileList;
/** /**
* Compiles main and test Kotlin sources in the relevant build directories. * Compiles main and test Kotlin sources in the relevant build directories.
* *
@ -42,22 +37,22 @@ import static rife.tools.FileUtils.getFileList;
public class CompileKotlinOperation extends AbstractOperation<CompileKotlinOperation> { public class CompileKotlinOperation extends AbstractOperation<CompileKotlinOperation> {
public static final Pattern KOTLIN_FILE_PATTERN = Pattern.compile("^.*\\.kt$"); public static final Pattern KOTLIN_FILE_PATTERN = Pattern.compile("^.*\\.kt$");
private static final Logger LOGGER = Logger.getLogger(CompileKotlinOperation.class.getName()); private static final Logger LOGGER = Logger.getLogger(CompileKotlinOperation.class.getName());
public final List<String> compileOptions_ = new ArrayList<>(); public final Collection<String> compileOptions_ = new ArrayList<>();
private final List<String> compileMainClasspath_ = new ArrayList<>(); private final Collection<String> compileMainClasspath_ = new ArrayList<>();
private final List<String> compileTestClasspath_ = new ArrayList<>(); private final Collection<String> compileTestClasspath_ = new ArrayList<>();
private final List<File> mainSourceDirectories_ = new ArrayList<>(); private final Collection<File> mainSourceDirectories_ = new ArrayList<>();
private final List<File> mainSourceFiles_ = new ArrayList<>(); private final Collection<File> mainSourceFiles_ = new ArrayList<>();
private final List<File> testSourceDirectories_ = new ArrayList<>(); private final Collection<File> testSourceDirectories_ = new ArrayList<>();
private final List<File> testSourceFiles_ = new ArrayList<>(); private final Collection<File> testSourceFiles_ = new ArrayList<>();
private File buildMainDirectory_; private File buildMainDirectory_;
private File buildTestDirectory_; private File buildTestDirectory_;
public static List<File> getKotlinFileList(File directory) { public static Collection<File> getKotlinFileList(File directory) {
if (directory == null) { if (directory == null) {
return Collections.emptyList(); return Collections.emptyList();
} else { } else {
var dir_abs = directory.getAbsoluteFile(); var dir_abs = directory.getAbsoluteFile();
return getFileList(dir_abs, KOTLIN_FILE_PATTERN, null).stream().map((file) -> return FileUtils.getFileList(dir_abs, KOTLIN_FILE_PATTERN, null).stream().map((file) ->
new File(dir_abs, file)).toList(); new File(dir_abs, file)).toList();
} }
} }
@ -129,7 +124,7 @@ public class CompileKotlinOperation extends AbstractOperation<CompileKotlinOpera
* *
* @return the main compilation classpath list * @return the main compilation classpath list
*/ */
public List<String> compileMainClasspath() { public Collection<String> compileMainClasspath() {
return compileMainClasspath_; return compileMainClasspath_;
} }
@ -139,7 +134,7 @@ public class CompileKotlinOperation extends AbstractOperation<CompileKotlinOpera
* @param options the list of compiler options * @param options the list of compiler options
* @return this operation instance * @return this operation instance
*/ */
public CompileKotlinOperation compileOptions(List<String> options) { public CompileKotlinOperation compileOptions(Collection<String> options) {
compileOptions_.addAll(options); compileOptions_.addAll(options);
return this; return this;
} }
@ -160,7 +155,7 @@ public class CompileKotlinOperation extends AbstractOperation<CompileKotlinOpera
* *
* @return the list of compiler options * @return the list of compiler options
*/ */
public List<String> compileOptions() { public Collection<String> compileOptions() {
return compileOptions_; return compileOptions_;
} }
@ -181,7 +176,7 @@ public class CompileKotlinOperation extends AbstractOperation<CompileKotlinOpera
* @param classpath a list of classpath entries * @param classpath a list of classpath entries
* @return this operation instance * @return this operation instance
*/ */
public CompileKotlinOperation compileTestClasspath(List<String> classpath) { public CompileKotlinOperation compileTestClasspath(Collection<String> classpath) {
compileTestClasspath_.addAll(classpath); compileTestClasspath_.addAll(classpath);
return this; return this;
} }
@ -191,11 +186,10 @@ public class CompileKotlinOperation extends AbstractOperation<CompileKotlinOpera
* *
* @return the test compilation classpath list * @return the test compilation classpath list
*/ */
public List<String> compileTestClasspath() { public Collection<String> compileTestClasspath() {
return compileTestClasspath_; return compileTestClasspath_;
} }
/** /**
* Performs the compile operation. * Performs the compile operation.
*/ */
@ -216,13 +210,9 @@ public class CompileKotlinOperation extends AbstractOperation<CompileKotlinOpera
*/ */
protected void executeBuildMainSources() protected void executeBuildMainSources()
throws IOException { throws IOException {
var sources = new ArrayList<>(mainSourceFiles());
for (var directory : mainSourceDirectories()) {
sources.addAll(getKotlinFileList(directory));
}
executeBuildSources( executeBuildSources(
compileMainClasspath(), compileMainClasspath(),
sources, sources(mainSourceFiles(), mainSourceDirectories()),
buildMainDirectory()); buildMainDirectory());
} }
@ -233,7 +223,7 @@ public class CompileKotlinOperation extends AbstractOperation<CompileKotlinOpera
* @param sources the source files to compile * @param sources the source files to compile
* @param destination the destination directory * @param destination the destination directory
*/ */
protected void executeBuildSources(List<String> classpath, List<File> sources, File destination) protected void executeBuildSources(Collection<String> classpath, Collection<File> sources, File destination)
throws IOException { throws IOException {
if (sources.isEmpty() || destination == null) { if (sources.isEmpty() || destination == null) {
return; return;
@ -244,7 +234,7 @@ public class CompileKotlinOperation extends AbstractOperation<CompileKotlinOpera
// classpath // classpath
args.add("-cp"); args.add("-cp");
args.add(FileUtils.joinPaths(classpath)); args.add(FileUtils.joinPaths(classpath.stream().toList()));
// destination // destination
args.add("-d"); args.add("-d");
@ -274,13 +264,9 @@ public class CompileKotlinOperation extends AbstractOperation<CompileKotlinOpera
*/ */
protected void executeBuildTestSources() protected void executeBuildTestSources()
throws IOException { throws IOException {
var sources = new ArrayList<>(testSourceFiles());
for (var directory : testSourceDirectories()) {
sources.addAll(getKotlinFileList(directory));
}
executeBuildSources( executeBuildSources(
compileTestClasspath(), compileTestClasspath(),
sources, sources(testSourceFiles(), testSourceDirectories()),
buildTestDirectory()); buildTestDirectory());
} }
@ -302,15 +288,12 @@ public class CompileKotlinOperation extends AbstractOperation<CompileKotlinOpera
* @param project the project to configure the compile operation from * @param project the project to configure the compile operation from
*/ */
public CompileKotlinOperation fromProject(BaseProject project) { public CompileKotlinOperation fromProject(BaseProject project) {
var srcMainKotlinDirectory = new File(project.srcMainDirectory(), "kotlin");
var srcTestKotlinDirectory = new File(project.srcTestDirectory(), "kotlin");
return buildMainDirectory(project.buildMainDirectory()) return buildMainDirectory(project.buildMainDirectory())
.buildTestDirectory(project.buildTestDirectory()) .buildTestDirectory(project.buildTestDirectory())
.compileMainClasspath(project.compileMainClasspath()) .compileMainClasspath(project.compileMainClasspath())
.compileTestClasspath(project.compileTestClasspath()) .compileTestClasspath(project.compileTestClasspath())
.mainSourceFiles(getKotlinFileList(srcMainKotlinDirectory)) .mainSourceFiles(getKotlinFileList(new File(project.srcMainDirectory(), "kotlin")))
.testSourceFiles(getKotlinFileList(srcTestKotlinDirectory)); .testSourceFiles(getKotlinFileList(new File(project.srcTestDirectory(), "kotlin")));
} }
public String getMessage() { public String getMessage() {
@ -334,7 +317,7 @@ public class CompileKotlinOperation extends AbstractOperation<CompileKotlinOpera
* @param directories a list of main source directories * @param directories a list of main source directories
* @return this operation instance * @return this operation instance
*/ */
public CompileKotlinOperation mainSourceDirectories(List<File> directories) { public CompileKotlinOperation mainSourceDirectories(Collection<File> directories) {
mainSourceDirectories_.addAll(directories); mainSourceDirectories_.addAll(directories);
return this; return this;
} }
@ -344,7 +327,7 @@ public class CompileKotlinOperation extends AbstractOperation<CompileKotlinOpera
* *
* @return the list of main source directories to compile * @return the list of main source directories to compile
*/ */
public List<File> mainSourceDirectories() { public Collection<File> mainSourceDirectories() {
return mainSourceDirectories_; return mainSourceDirectories_;
} }
@ -365,7 +348,7 @@ public class CompileKotlinOperation extends AbstractOperation<CompileKotlinOpera
* @param files a list of main files * @param files a list of main files
* @return this operation instance * @return this operation instance
*/ */
public CompileKotlinOperation mainSourceFiles(List<File> files) { public CompileKotlinOperation mainSourceFiles(Collection<File> files) {
mainSourceFiles_.addAll(files); mainSourceFiles_.addAll(files);
return this; return this;
} }
@ -375,10 +358,20 @@ public class CompileKotlinOperation extends AbstractOperation<CompileKotlinOpera
* *
* @return the list of main files to compile * @return the list of main files to compile
*/ */
public List<File> mainSourceFiles() { public Collection<File> mainSourceFiles() {
return mainSourceFiles_; return mainSourceFiles_;
} }
// Combine Kotlin sources
private Collection<File> sources(Collection<File> files, Collection<File> directories) {
var sources = new ArrayList<>(files);
for (var directory : directories) {
sources.addAll(getKotlinFileList(directory));
}
return sources;
}
/** /**
* Provides test source directories that should be compiled. * Provides test source directories that should be compiled.
* *
@ -396,7 +389,7 @@ public class CompileKotlinOperation extends AbstractOperation<CompileKotlinOpera
* @param directories a list of test source directories * @param directories a list of test source directories
* @return this operation instance * @return this operation instance
*/ */
public CompileKotlinOperation testSourceDirectories(List<File> directories) { public CompileKotlinOperation testSourceDirectories(Collection<File> directories) {
testSourceDirectories_.addAll(directories); testSourceDirectories_.addAll(directories);
return this; return this;
} }
@ -406,7 +399,7 @@ public class CompileKotlinOperation extends AbstractOperation<CompileKotlinOpera
* *
* @return the list of test source directories to compile * @return the list of test source directories to compile
*/ */
public List<File> testSourceDirectories() { public Collection<File> testSourceDirectories() {
return testSourceDirectories_; return testSourceDirectories_;
} }
@ -427,7 +420,7 @@ public class CompileKotlinOperation extends AbstractOperation<CompileKotlinOpera
* @param files a list of test files * @param files a list of test files
* @return this operation instance * @return this operation instance
*/ */
public CompileKotlinOperation testSourceFiles(List<File> files) { public CompileKotlinOperation testSourceFiles(Collection<File> files) {
testSourceFiles_.addAll(files); testSourceFiles_.addAll(files);
return this; return this;
} }
@ -437,7 +430,7 @@ public class CompileKotlinOperation extends AbstractOperation<CompileKotlinOpera
* *
* @return the list of test files to compile * @return the list of test files to compile
*/ */
public List<File> testSourceFiles() { public Collection<File> testSourceFiles() {
return testSourceFiles_; return testSourceFiles_;
} }
} }