Mercurial > hg > truffle
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