diff --git a/.idea/runConfigurations/Run Tests.xml b/.idea/runConfigurations/Run Tests.xml
new file mode 100644
index 0000000..057a90e
--- /dev/null
+++ b/.idea/runConfigurations/Run Tests.xml
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/README.md b/README.md
index 06ce2cb..d0d0ff9 100644
--- a/README.md
+++ b/README.md
@@ -44,14 +44,6 @@ for all available configuration options.
Please make sure the Kotlin compiler is [installed](https://kotlinlang.org/docs/command-line.html#install-the-compiler).
-The plugin will look in common locations such as:
-- `KOTLIN_HOME`
-- `PATH`
-- SDKMAN!
-- Homebrew
-- JetBrains Toolbox (IntelliJ IDEA, Android Studio)
-- etc.
-
You can also manually configure the Kotlin home location as follows:
```java
diff --git a/src/main/java/rife/bld/extension/CompileKotlinOperation.java b/src/main/java/rife/bld/extension/CompileKotlinOperation.java
index f1c912b..570ff14 100644
--- a/src/main/java/rife/bld/extension/CompileKotlinOperation.java
+++ b/src/main/java/rife/bld/extension/CompileKotlinOperation.java
@@ -26,7 +26,9 @@ import rife.tools.FileUtils;
import java.io.File;
import java.io.IOException;
import java.nio.file.Path;
-import java.util.*;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
@@ -38,9 +40,6 @@ import java.util.logging.Logger;
*/
public class CompileKotlinOperation extends AbstractOperation {
private static final Logger LOGGER = Logger.getLogger(CompileKotlinOperation.class.getName());
- private static final String OS_NAME =
- System.getProperty("os.name") != null ? System.getProperty("os.name").toLowerCase(Locale.US) : null;
- private static final String KOTLINC_EXECUTABLE = "kotlinc" + (isWindows() ? ".bat" : "");
private final Collection compileMainClasspath_ = new ArrayList<>();
private final Collection compileTestClasspath_ = new ArrayList<>();
private final Collection mainSourceDirectories_ = new ArrayList<>();
@@ -56,145 +55,6 @@ public class CompileKotlinOperation extends AbstractOperation commonPaths = new ArrayList<>();
-
- if (isLinux()) {
- commonPaths.add("/usr/bin");
- commonPaths.add("/usr/local/bin");
- commonPaths.add("/usr/local/kotlin/bin");
- commonPaths.add("/opt/kotlin/bin");
- var userHome = System.getProperty("user.home");
- if (userHome != null) {
- commonPaths.add(userHome + "/.sdkman/candidates/kotlin/current/bin"); // SDKMAN!
- commonPaths.add(userHome + "/.local/share/JetBrains/Toolbox/apps/intellij-idea-ultimate/plugins/Kotlin/bin"); // Toolbox IDEA Ultimate
- commonPaths.add(userHome + "/.local/share/JetBrains/Toolbox/apps/intellij-idea-community-edition/plugins/Kotlin/bin"); // Toolbox IDEA CE
- commonPaths.add(userHome + "/.local/share/JetBrains/Toolbox/apps/android-studio/plugins/Kotlin/bin"); // Toolbox Android Studio
- }
- } else if (isWindows()) {
- var localAppData = System.getenv("LOCALAPPDATA");
- if (localAppData != null) {
- commonPaths.add(localAppData + "\\Programs\\IntelliJ IDEA Ultimate\\plugins\\Kotlin\\kotlinc\\bin"); // Toolbox IDEA Ultimate
- commonPaths.add(localAppData + "\\Programs\\IntelliJ IDEA Community Edition\\plugins\\Kotlin\\kotlinc\\bin"); // Toolbox IDEA CE
- commonPaths.add(localAppData + "\\Programs\\Android Studio\\plugins\\Kotlin\\kotlinc\\bin"); // Toolbox Android Studio
- }
- var programFiles = System.getenv("ProgramFiles");
- if (programFiles != null) {
- commonPaths.add(programFiles + File.separator + "Kotlin");
- }
- } else if (isMacOS()) {
- commonPaths.add("/usr/local/bin"); // Homebrew
- commonPaths.add("/opt/homebrew/bin"); // Homebrew
- var userHome = System.getProperty("user.home");
- if (userHome != null) {
- commonPaths.add(userHome + "/.sdkman/candidates/kotlin/current/bin"); // SDKMAN!
- }
- commonPaths.add("/Applications/IntelliJ IDEA Ultimate.app/Contents/plugins/Kotlin/bin"); //IntelliJ IDEA Ultimate
- commonPaths.add("/Applications/IntelliJ IDEA.app/Contents/plugins/Kotlin/bin"); //IntelliJ IDEA
- commonPaths.add("/Applications/Android Studio.app/Contents/plugins/Kotlin/bin"); //Android Studio
- }
-
- for (var location : commonPaths) {
- kotlincPath = findKotlincInDir(location);
- if (kotlincPath != null) {
- return kotlincPath;
- }
- }
-
- // Try 'which' or 'where' commands (less reliable but sometimes works)
- try {
- Process process;
- if (isWindows()) {
- process = Runtime.getRuntime().exec("where kotlinc");
- } else {
- process = Runtime.getRuntime().exec("which kotlinc");
- }
-
- try (var scanner = new Scanner(process.getInputStream())) {
- if (scanner.hasNextLine()) {
- kotlincPath = scanner.nextLine().trim();
- if (isExecutable(new File(kotlincPath))) {
- return kotlincPath;
- }
- }
- }
- } catch (Exception ignored) {
- // Ignore exceptions from which/where, as they might not be available
- }
-
- return KOTLINC_EXECUTABLE;
- }
-
- private static boolean isExecutable(File file) {
- return file != null && file.exists() && file.isFile() && file.canExecute();
- }
-
- /**
- * Determines if the operating system is Linux.
- *
- * @return true if the operating system is Linux, false otherwise.
- */
- public static boolean isLinux() {
- return OS_NAME != null && (OS_NAME.contains("linux") || OS_NAME.contains("unix")); // Consider Unix-like systems as well.
- }
-
- /**
- * Determines if the current operating system is macOS.
- *
- * @return true if the OS is macOS, false otherwise.
- */
- public static boolean isMacOS() {
- return OS_NAME != null && (OS_NAME.contains("mac") || OS_NAME.contains("darwin"));
- }
-
/**
* Determines if the given string is not blank.
*
@@ -205,15 +65,6 @@ public class CompileKotlinOperation extends AbstractOperation();
// kotlinc
- if (kotlinc_ != null) {
- args.add(kotlinc_.getAbsolutePath());
- } else if (kotlinHome_ != null) {
- args.add(Objects.requireNonNullElseGet(findKotlincInDir(kotlinHome_.getAbsolutePath()),
- CompileKotlinOperation::findKotlincPath));
- } else {
- args.add(findKotlincPath());
- }
+ args.add(kotlinCompiler());
// classpath
if (classpath != null && !classpath.isEmpty()) {
@@ -542,6 +386,7 @@ public class CompileKotlinOperation extends AbstractOperation
* Sets the following from the project:
*
+ * - {@link #kotlinHome() kotlinHome} to the {@code KOTLIN_HOME} environment variable, if set.
* - {@link #workDir() workDir} to the project's directory.
* - {@link #buildMainDirectory() buildMainDirectory}
* - {@link #buildTestDirectory() buildTestDirectory}
@@ -560,6 +405,14 @@ public class CompileKotlinOperation extends AbstractOperation