Mercurial > hg > truffle
diff truffle/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/LanguageRegistrationProcessor.java @ 22066:78c3d3d8d86e
Clearly separating the TruffleLanguage definition from context used during its execution. TruffleLanguage now has to have public static field INSTANCE and override createContext method.
author | Jaroslav Tulach <jaroslav.tulach@oracle.com> |
---|---|
date | Thu, 06 Aug 2015 08:31:49 +0200 |
parents | f878f9778548 |
children | dc83cc1f94f2 |
line wrap: on
line diff
--- a/truffle/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/LanguageRegistrationProcessor.java Wed Aug 05 10:19:41 2015 -0700 +++ b/truffle/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/LanguageRegistrationProcessor.java Thu Aug 06 08:31:49 2015 +0200 @@ -93,31 +93,32 @@ emitError("Registered language inner-class must be static", e); continue; } - TypeMirror truffleLang = processingEnv.getElementUtils().getTypeElement(TruffleLanguage.class.getName()).asType(); + TypeMirror truffleLang = processingEnv.getTypeUtils().erasure(processingEnv.getElementUtils().getTypeElement(TruffleLanguage.class.getName()).asType()); if (!processingEnv.getTypeUtils().isAssignable(e.asType(), truffleLang)) { emitError("Registered language class must subclass TruffleLanguage", e); continue; } boolean found = false; for (Element mem : e.getEnclosedElements()) { - if (mem.getKind() != ElementKind.CONSTRUCTOR) { + if (!mem.getModifiers().contains(Modifier.PUBLIC)) { + continue; + } + if (mem.getKind() != ElementKind.FIELD) { continue; } - ExecutableElement ee = (ExecutableElement) mem; - if (ee.getParameters().size() != 1) { + if (!mem.getModifiers().contains(Modifier.FINAL)) { continue; } - if (!ee.getModifiers().contains(Modifier.PUBLIC)) { + if (!"INSTANCE".equals(mem.getSimpleName().toString())) { continue; } - TypeMirror env = processingEnv.getElementUtils().getTypeElement(TruffleLanguage.Env.class.getCanonicalName()).asType(); - if (processingEnv.getTypeUtils().isSameType(ee.getParameters().get(0).asType(), env)) { + if (processingEnv.getTypeUtils().isAssignable(mem.asType(), truffleLang)) { found = true; break; } } if (!found) { - emitError("Language must have a public constructor accepting TruffleLanguage.Env as parameter", e); + emitError("Language class must have public static final singleton field called INSTANCE", e); continue; } assertNoErrorExpected(e);