[run configurations] properly propagate ExecutionException in ApplicationCommandLineState (EA-1209276)

'executeSynchronously' wraps exceptions thrown during the computation, so they should be unwrapped.

GitOrigin-RevId: a3dddbd845b8a94b1c659085ff7e8c6e1bb88c28
This commit is contained in:
Nikolay Chashnikov
2024-09-19 17:41:03 +02:00
committed by intellij-monorepo-bot
parent c1d98069be
commit 30f67591c5

View File

@@ -19,6 +19,7 @@ import com.intellij.openapi.projectRoots.ex.JavaSdkUtil;
import com.intellij.psi.PsiCompiledElement;
import com.intellij.psi.PsiJavaModule;
import com.intellij.psi.impl.light.LightJavaModule;
import com.intellij.util.ExceptionUtil;
import org.jdom.Element;
import org.jetbrains.annotations.NotNull;
@@ -48,25 +49,36 @@ public abstract class ApplicationCommandLineState<T extends
}
final JavaRunConfigurationModule module = myConfiguration.getConfigurationModule();
ReadAction.nonBlocking((Callable<Void>)() -> {
final String jreHome = getTargetEnvironmentRequest() == null && myConfiguration.isAlternativeJrePathEnabled() ? myConfiguration.getAlternativeJrePath() : null;
if (module.getModule() != null) {
DumbService.getInstance(module.getProject()).runWithAlternativeResolveEnabled(() -> {
if (mainClass == null) {
throw new CantRunException(ExecutionBundle.message("no.main.class.defined.error.message"));
}
int classPathType = JavaParametersUtil.getClasspathType(module, mainClass, false,
isProvidedScopeIncluded());
JavaParametersUtil.configureModule(module, params, classPathType, jreHome);
});
try {
ReadAction.nonBlocking((Callable<Void>)() -> {
final String jreHome = getTargetEnvironmentRequest() == null && myConfiguration.isAlternativeJrePathEnabled() ? myConfiguration.getAlternativeJrePath() : null;
if (module.getModule() != null) {
DumbService.getInstance(module.getProject()).runWithAlternativeResolveEnabled(() -> {
if (mainClass == null) {
throw new CantRunException(ExecutionBundle.message("no.main.class.defined.error.message"));
}
int classPathType = JavaParametersUtil.getClasspathType(module, mainClass, false,
isProvidedScopeIncluded());
JavaParametersUtil.configureModule(module, params, classPathType, jreHome);
});
}
else {
JavaParametersUtil.configureProject(module.getProject(), params, JavaParameters.JDK_AND_CLASSES_AND_TESTS, jreHome);
}
return null;
})
.expireWith(configuration.getProject())
.executeSynchronously();
}
catch (Exception e) {
ExecutionException executionException = ExceptionUtil.findCause(e, ExecutionException.class);
if (executionException != null) {
throw executionException;
}
else {
JavaParametersUtil.configureProject(module.getProject(), params, JavaParameters.JDK_AND_CLASSES_AND_TESTS, jreHome);
throw e;
}
return null;
})
.expireWith(configuration.getProject())
.executeSynchronously();
}
setupModulePath(params, module);