diff --git a/java_indexer/src/main/java/com/sourcetrail/gradle/InfoRetriever.java b/java_indexer/src/main/java/com/sourcetrail/gradle/InfoRetriever.java index b32dbada..edbef077 100644 --- a/java_indexer/src/main/java/com/sourcetrail/gradle/InfoRetriever.java +++ b/java_indexer/src/main/java/com/sourcetrail/gradle/InfoRetriever.java @@ -1,17 +1,16 @@ package com.sourcetrail.gradle; import java.io.BufferedReader; -import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.IOException; -import java.io.InputStreamReader; import java.io.PrintStream; import java.io.StringReader; import java.util.ArrayList; import java.util.Arrays; import java.util.List; +import org.gradle.api.GradleException; import org.gradle.tooling.BuildLauncher; import org.gradle.tooling.GradleConnector; import org.gradle.tooling.ProjectConnection; @@ -20,36 +19,50 @@ public class InfoRetriever { public static String getMainSrcDirs(String projectRootPath, String initScriptPath) { - String ret = ""; - - List srcDirs = getSrcDirs("printMainSrcDirs", projectRootPath, initScriptPath); - for (int i = 0; i < srcDirs.size(); i++) + try { - if (i != 0) + String ret = ""; + + List srcDirs = getSrcDirs("printMainSrcDirs", projectRootPath, initScriptPath); + for (int i = 0; i < srcDirs.size(); i++) { - ret += ";"; + if (i != 0) + { + ret += ";"; + } + ret += srcDirs.get(i); } - ret += srcDirs.get(i); + + return ret; + } + catch (GradleException e) + { + return "[ERROR] " + e.getMessage(); } - - return ret; } public static String getTestSrcDirs(String projectRootPath, String initScriptPath) { - String ret = ""; - - List srcDirs = getSrcDirs("printTestSrcDirs", projectRootPath, initScriptPath); - for (int i = 0; i < srcDirs.size(); i++) + try { - if (i != 0) + String ret = ""; + + List srcDirs = getSrcDirs("printTestSrcDirs", projectRootPath, initScriptPath); + for (int i = 0; i < srcDirs.size(); i++) { - ret += ";"; + if (i != 0) + { + ret += ";"; + } + ret += srcDirs.get(i); } - ret += srcDirs.get(i); + + return ret; + } + catch (GradleException e) + { + return "[ERROR] " + e.getMessage(); } - - return ret; } public static void copyCompileLibs(String projectRootPath, String initScriptPath, String targetPath) @@ -84,7 +97,7 @@ public class InfoRetriever return paths; } - private static String executeTask(String taskName, String projectRootPath, String initScriptPath, List additionalArguments) + private static String executeTask(String taskName, String projectRootPath, String initScriptPath, List additionalArguments) throws GradleException { ProjectConnection connection = GradleConnector .newConnector() @@ -99,7 +112,7 @@ public class InfoRetriever List arguments = new ArrayList<>(); arguments.add("--init-script"); arguments.add(initScriptPath); -// arguments.add("-q"); + arguments.add("-q"); if (additionalArguments != null) { @@ -124,8 +137,7 @@ public class InfoRetriever if (!errorStream.toString().isEmpty()) { - // TODO: handle this by sending the error to cpp - System.out.println("Error: " + errorStream.toString()); // TODO: remove this later + throw new GradleException(errorStream.toString()); } return outputStream.toString(); diff --git a/src/lib_java/utility/utilityGradle.cpp b/src/lib_java/utility/utilityGradle.cpp index 95236be5..26e4bf9e 100644 --- a/src/lib_java/utility/utilityGradle.cpp +++ b/src/lib_java/utility/utilityGradle.cpp @@ -6,9 +6,11 @@ #include "data/parser/java/JavaEnvironmentFactory.h" #include "settings/ApplicationSettings.h" #include "utility/logging/logging.h" +#include "utility/messaging/type/MessageStatus.h" #include "utility/ResourcePaths.h" #include "utility/utilityJava.h" #include "utility/utilityString.h" +#include "Application.h" namespace { @@ -57,9 +59,21 @@ namespace utility { std::shared_ptr javaEnvironment = JavaEnvironmentFactory::getInstance()->createEnvironment(); { - std::string mainSrcDirs = ""; - javaEnvironment->callStaticStringMethod("com/sourcetrail/gradle/InfoRetriever", "getMainSrcDirs", mainSrcDirs, projectDirectoryPath.str(), gradleInitScriptPath); - for (const std::string mainSrcDir : utility::splitToVector(mainSrcDirs, ";")) + std::string output = ""; + javaEnvironment->callStaticStringMethod("com/sourcetrail/gradle/InfoRetriever", "getMainSrcDirs", output, projectDirectoryPath.str(), gradleInitScriptPath); + + if (utility::isPrefix("[ERROR]", utility::trim(output))) + { + // TODO: move error handling to caller of this function + const std::string dialogMessage = + "The following error occurred while executing a Maven command:\n\n" + utility::replace(output, "\r\n", "\n"); + MessageStatus(dialogMessage, true, false).dispatch(); + Application::getInstance()->handleDialog(dialogMessage); + + return std::vector(); + } + + for (const std::string mainSrcDir : utility::splitToVector(output, ";")) { uncheckedDirectories.insert(mainSrcDir); } @@ -67,9 +81,21 @@ namespace utility if (addTestDirectories) { - std::string testSrcDirs = ""; - javaEnvironment->callStaticStringMethod("com/sourcetrail/gradle/InfoRetriever", "getTestSrcDirs", testSrcDirs, projectDirectoryPath.str(), gradleInitScriptPath); - for (const std::string testSrcDir : utility::splitToVector(testSrcDirs, ";")) + std::string output = ""; + javaEnvironment->callStaticStringMethod("com/sourcetrail/gradle/InfoRetriever", "getTestSrcDirs", output, projectDirectoryPath.str(), gradleInitScriptPath); + + if (utility::isPrefix("[ERROR]", utility::trim(output))) + { + // TODO: move error handling to caller of this function + const std::string dialogMessage = + "The following error occurred while executing a Maven command:\n\n" + utility::replace(output, "\r\n", "\n"); + MessageStatus(dialogMessage, true, false).dispatch(); + Application::getInstance()->handleDialog(dialogMessage); + + return std::vector(); + } + + for (const std::string testSrcDir : utility::splitToVector(output, ";")) { uncheckedDirectories.insert(testSrcDir); }