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;
+        }
+    }
 }