Mercurial > hg > graal-compiler
changeset 8574:b82ffd0c4ed2
Improved error message for Graal API capability queries.
author | Thomas Wuerthinger <thomas.wuerthinger@oracle.com> |
---|---|
date | Fri, 29 Mar 2013 16:56:21 +0100 |
parents | 7f5d99d3346d |
children | 916a1f1a96f0 dd3c52b31c3d |
files | graal/com.oracle.graal.api.runtime/src/com/oracle/graal/api/runtime/Graal.java |
diffstat | 1 files changed, 25 insertions(+), 13 deletions(-) [+] |
line wrap: on
line diff
--- a/graal/com.oracle.graal.api.runtime/src/com/oracle/graal/api/runtime/Graal.java Fri Mar 29 14:47:27 2013 +0100 +++ b/graal/com.oracle.graal.api.runtime/src/com/oracle/graal/api/runtime/Graal.java Fri Mar 29 16:56:21 2013 +0100 @@ -36,26 +36,38 @@ try { runtime = initializeRuntime(); } catch (UnsatisfiedLinkError e) { - runtime = new GraalRuntime() { - - @Override - public String getName() { - return ""; - } - - @Override - public <T> T getCapability(Class<T> clazz) { - return null; - } - }; + runtime = new InvalidGraalRuntime(); } } public static <T> T getRequiredCapability(Class<T> clazz) { T t = getRuntime().getCapability(clazz); if (t == null) { - throw new IllegalAccessError("Runtime does not expose required capability " + clazz.getName()); + String javaHome = System.getProperty("java.home"); + String vmName = System.getProperty("java.vm.name"); + StringBuilder errorMessage = new StringBuilder(); + if (runtime.getClass() == InvalidGraalRuntime.class) { + errorMessage.append(String.format("The VM does not support the Graal API.\n")); + } else { + errorMessage.append(String.format("The VM does not expose required Graal capability %s.\n", clazz.getName())); + } + errorMessage.append(String.format("Currently used Java home directory is %s.\n", javaHome)); + errorMessage.append(String.format("Currently used VM configuration is: %s", vmName)); + throw new UnsupportedOperationException(errorMessage.toString()); } return t; } + + private static final class InvalidGraalRuntime implements GraalRuntime { + + @Override + public String getName() { + return ""; + } + + @Override + public <T> T getCapability(Class<T> clazz) { + return null; + } + } }