Mercurial > hg > truffle
diff graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/AnnotationProcessor.java @ 16759:23415229349b
Truffle-DSL: new package structure.
author | Christian Humer <christian.humer@gmail.com> |
---|---|
date | Mon, 11 Aug 2014 15:57:14 +0200 |
parents | bd28da642eea |
children | 45c8f64978d6 |
line wrap: on
line diff
--- a/graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/AnnotationProcessor.java Mon Aug 11 15:53:05 2014 +0200 +++ b/graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/AnnotationProcessor.java Mon Aug 11 15:57:14 2014 +0200 @@ -30,11 +30,13 @@ import javax.lang.model.type.*; import javax.tools.*; -import com.oracle.truffle.dsl.processor.ast.*; -import com.oracle.truffle.dsl.processor.codewriter.*; -import com.oracle.truffle.dsl.processor.compiler.*; -import com.oracle.truffle.dsl.processor.node.*; -import com.oracle.truffle.dsl.processor.template.*; +import com.oracle.truffle.dsl.processor.generator.*; +import com.oracle.truffle.dsl.processor.java.*; +import com.oracle.truffle.dsl.processor.java.compiler.*; +import com.oracle.truffle.dsl.processor.java.model.*; +import com.oracle.truffle.dsl.processor.java.transform.*; +import com.oracle.truffle.dsl.processor.model.*; +import com.oracle.truffle.dsl.processor.parser.*; /** * THIS IS NOT PUBLIC API. @@ -42,11 +44,11 @@ class AnnotationProcessor<M extends Template> { private final AbstractParser<M> parser; - private final CompilationUnitFactory<M> factory; + private final AbstractCompilationUnitFactory<M> factory; private final Set<String> processedElements = new HashSet<>(); - public AnnotationProcessor(AbstractParser<M> parser, CompilationUnitFactory<M> factory) { + public AnnotationProcessor(AbstractParser<M> parser, AbstractCompilationUnitFactory<M> factory) { this.parser = parser; this.factory = factory; } @@ -56,11 +58,11 @@ } @SuppressWarnings({"unchecked"}) - public void process(RoundEnvironment env, Element element, boolean callback) { + public void process(Element element, boolean callback) { // since it is not guaranteed to be called only once by the compiler // we check for already processed elements to avoid errors when writing files. if (!callback && element instanceof TypeElement) { - String qualifiedName = Utils.getQualifiedName((TypeElement) element); + String qualifiedName = ElementUtils.getQualifiedName((TypeElement) element); if (processedElements.contains(qualifiedName)) { return; } @@ -75,12 +77,11 @@ if (firstRun || !callback) { context.registerTemplate(type, null); - model = parser.parse(env, element); + model = parser.parse(element); context.registerTemplate(type, model); if (model != null) { CodeCompilationUnit unit = factory.process(null, model); - patchGeneratedTypes(unit); unit.setGeneratorAnnotationMirror(model.getTemplateTypeAnnotation()); unit.setGeneratorElement(model.getTemplateType()); @@ -96,55 +97,6 @@ } } - private static void patchGeneratedTypes(CodeCompilationUnit unit) { - final Map<String, CodeTypeElement> classes = new HashMap<>(); - - unit.accept(new CodeElementScanner<Void, Void>() { - @Override - public Void visitType(CodeTypeElement e, Void p) { - classes.put(e.getSimpleName().toString(), e); - return super.visitType(e, p); - } - - }, null); - - unit.accept(new CodeElementScanner<Void, Void>() { - @Override - public Void visitExecutable(CodeExecutableElement e, Void p) { - if (e.getReturnType() instanceof GeneratedTypeMirror) { - e.setReturnType(patchType(e.getReturnType())); - } - for (VariableElement element : e.getParameters()) { - if (element instanceof CodeVariableElement) { - CodeVariableElement var = ((CodeVariableElement) element); - if (var.getType() instanceof GeneratedTypeMirror) { - var.setType(patchType(var.getType())); - } - } - } - return super.visitExecutable(e, p); - } - - @Override - public void visitTree(CodeTree e, Void p) { - if (e.getType() instanceof GeneratedTypeMirror) { - e.setType(patchType(e.asType())); - } - } - - private TypeMirror patchType(TypeMirror typeMirror) { - assert typeMirror instanceof GeneratedTypeMirror; - GeneratedTypeMirror type = (GeneratedTypeMirror) typeMirror; - CodeTypeElement generatedType = classes.get(Utils.fromTypeMirror(type).getSimpleName().toString()); - if (generatedType == null) { - return type; - } - return generatedType.asType(); - } - }, null); - - } - private static class CodeWriter extends AbstractCodeWriter { private final Element originalElement;