diff graal/com.oracle.truffle.api/src/com/oracle/truffle/api/vm/TruffleVM.java @ 21481:bb51b9a142b3

Enforcing public, one parameter constructor for each TruffleLanguage by annotation processor and required call to super.
author Jaroslav Tulach <jaroslav.tulach@oracle.com>
date Mon, 25 May 2015 12:26:53 +0200
parents 2dad34a3d7b0
children 3286fb5fea4a b1530a6cce8c
line wrap: on
line diff
--- a/graal/com.oracle.truffle.api/src/com/oracle/truffle/api/vm/TruffleVM.java	Mon May 25 10:36:30 2015 +0200
+++ b/graal/com.oracle.truffle.api/src/com/oracle/truffle/api/vm/TruffleVM.java	Mon May 25 12:26:53 2015 +0200
@@ -33,6 +33,7 @@
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.Reader;
+import java.lang.reflect.Constructor;
 import java.net.URI;
 import java.net.URL;
 import java.net.URLConnection;
@@ -333,9 +334,9 @@
             if (impl == null) {
                 String n = props.getProperty("className");
                 try {
-                    TruffleLanguage lang = (TruffleLanguage) Class.forName(n, true, loader()).newInstance();
-                    SPI.attachEnv(TruffleVM.this, lang);
-                    impl = lang;
+                    Class<?> langClazz = Class.forName(n, true, loader());
+                    Constructor<?> constructor = langClazz.getConstructor(Env.class);
+                    impl = SPI.attachEnv(TruffleVM.this, constructor);
                 } catch (Exception ex) {
                     throw new IllegalStateException("Cannot initialize " + getName() + " language with implementation " + n, ex);
                 }
@@ -367,8 +368,8 @@
         }
 
         @Override
-        public Env attachEnv(TruffleVM vm, TruffleLanguage l) {
-            return super.attachEnv(vm, l);
+        public TruffleLanguage attachEnv(TruffleVM vm, Constructor<?> langClazz) {
+            return super.attachEnv(vm, langClazz);
         }
 
         @Override