diff --git a/pkl-executor/src/main/java/org/pkl/executor/EmbeddedExecutor.java b/pkl-executor/src/main/java/org/pkl/executor/EmbeddedExecutor.java index 3f1a4318..44df0bb4 100644 --- a/pkl-executor/src/main/java/org/pkl/executor/EmbeddedExecutor.java +++ b/pkl-executor/src/main/java/org/pkl/executor/EmbeddedExecutor.java @@ -226,7 +226,7 @@ final class EmbeddedExecutor implements Executor { try { return executorSpi.evaluatePath(modulePath, options.toSpiOptions()); } catch (ExecutorSpiException e) { - throw new ExecutorException(e.getMessage(), e.getCause()); + throw new ExecutorException(e.getMessage(), e.getCause(), executorSpi.getPklVersion()); } finally { currentThread.setContextClassLoader(prevContextClassLoader); } diff --git a/pkl-executor/src/main/java/org/pkl/executor/ExecutorException.java b/pkl-executor/src/main/java/org/pkl/executor/ExecutorException.java index 4e00c728..076b2e8c 100644 --- a/pkl-executor/src/main/java/org/pkl/executor/ExecutorException.java +++ b/pkl-executor/src/main/java/org/pkl/executor/ExecutorException.java @@ -15,15 +15,44 @@ */ package org.pkl.executor; +import java.util.Objects; + /** * Indicates an {@link Executor} error. {@link #getMessage()} returns a user-facing error message. */ public final class ExecutorException extends RuntimeException { + private final String pklVersion; + public ExecutorException(String message) { super(message); + pklVersion = null; } public ExecutorException(String message, Throwable cause) { super(message, cause); + pklVersion = null; + } + + public ExecutorException(String message, Throwable cause, String version) { + super(message, cause); + pklVersion = Objects.requireNonNull(version); + } + + /** + * The selected Pkl version used to evaluate the module. + * + *

Returns {@code null} if this exception does not originate from an underlying Pkl evaluator. + */ + public String getPklVersion() { + return pklVersion; + } + + @Override + public String getMessage() { + var message = super.getMessage(); + if (pklVersion == null) { + return message; + } + return message + "\nPkl version: " + pklVersion; } }