diff --git a/engine/common/src/main/java/org/enso/common/ContextFactory.java b/engine/common/src/main/java/org/enso/common/ContextFactory.java index 796ab95c3ba3..afafec92a3f0 100644 --- a/engine/common/src/main/java/org/enso/common/ContextFactory.java +++ b/engine/common/src/main/java/org/enso/common/ContextFactory.java @@ -30,6 +30,7 @@ * @param options additional options for the Context * @param executionEnvironment optional name of the execution environment to use during execution * @param warningsLimit maximal number of warnings reported to the user + * @param checkForWarnings name of method to check for warnings */ public final class ContextFactory { private String projectRoot; @@ -47,6 +48,7 @@ public final class ContextFactory { private boolean useGlobalIrCacheLocation = true; private boolean enableAutoParallelism; private String executionEnvironment; + private String checkForWarnings; private int warningsLimit = 100; private java.util.Map options = java.util.Collections.emptyMap(); @@ -141,6 +143,11 @@ public ContextFactory options(Map options) { return this; } + public ContextFactory checkForWarnings(String fqnOfMethod) { + this.checkForWarnings = fqnOfMethod; + return this; + } + public Context build() { if (executionEnvironment != null) { options.put("enso.ExecutionEnvironment", executionEnvironment); @@ -169,6 +176,9 @@ public Context build() { .out(out) .err(err) .in(in); + if (checkForWarnings != null) { + builder.option("enso-debug-server.fn", checkForWarnings); + } if (messageTransport != null) { builder.serverTransport(messageTransport); } diff --git a/engine/runner/src/main/java/org/enso/runner/Main.java b/engine/runner/src/main/java/org/enso/runner/Main.java index 212b612f3e18..b6f79f88b0bf 100644 --- a/engine/runner/src/main/java/org/enso/runner/Main.java +++ b/engine/runner/src/main/java/org/enso/runner/Main.java @@ -688,6 +688,25 @@ private void handleRun( } var projectMode = fileAndProject._1(); var file = fileAndProject._2(); + var mainFile = file; + if (projectMode) { + var result = PackageManager$.MODULE$.Default().loadPackage(file); + if (result.isSuccess()) { + var s = (scala.util.Success) result; + @SuppressWarnings("unchecked") + var pkg = (org.enso.pkg.Package) s.get(); + + mainFile = pkg.mainFile(); + if (!mainFile.exists()) { + println("Main file does not exist."); + throw exitFail(); + } + } else { + println(((scala.util.Failure) result).exception().getMessage()); + throw exitFail(); + } + } + var projectRoot = fileAndProject._3(); var options = new HashMap(); @@ -699,6 +718,7 @@ private void handleRun( .enableIrCaches(enableIrCaches) .disablePrivateCheck(disablePrivateCheck) .strictErrors(true) + .checkForWarnings(mainFile.getName().replace(".enso", "") + ".main") .enableAutoParallelism(enableAutoParallelism) .enableStaticAnalysis(enableStaticAnalysis) .executionEnvironment(executionEnvironment != null ? executionEnvironment : "live") @@ -724,12 +744,6 @@ private void handleRun( var s = (scala.util.Success) result; @SuppressWarnings("unchecked") var pkg = (org.enso.pkg.Package) s.get(); - var main = pkg.mainFile(); - if (!main.exists()) { - println("Main file does not exist."); - context.context().close(); - throw exitFail(); - } var mainModuleName = pkg.moduleNameForFile(pkg.mainFile()).toString(); runPackage(context, mainModuleName, file, additionalArgs); } else {