comparison graal/com.oracle.truffle.codegen.processor/src/com/oracle/truffle/codegen/processor/template/ClassElementFactory.java @ 7502:6343a09b2ec1

Codegen operation generation is inferred from the node type hierarchy.
author Christian Humer <christian.humer@gmail.com>
date Fri, 18 Jan 2013 13:28:12 +0100
parents a748e4d44694
children 5e3d1a68664e
comparison
equal deleted inserted replaced
7497:0f8c6dbf68be 7502:6343a09b2ec1
42 } 42 }
43 43
44 @Override 44 @Override
45 protected abstract CodeTypeElement create(M m); 45 protected abstract CodeTypeElement create(M m);
46 46
47
48 @Override
49 public CodeTypeElement getElement() {
50 return (CodeTypeElement) super.getElement();
51 }
52
47 protected CodeExecutableElement createConstructorUsingFields(Set<Modifier> modifiers, CodeTypeElement clazz) { 53 protected CodeExecutableElement createConstructorUsingFields(Set<Modifier> modifiers, CodeTypeElement clazz) {
48 CodeExecutableElement method = new CodeExecutableElement(modifiers, null, clazz.getSimpleName().toString()); 54 CodeExecutableElement method = new CodeExecutableElement(modifiers, null, clazz.getSimpleName().toString());
49 CodeTreeBuilder builder = method.createBuilder(); 55 CodeTreeBuilder builder = method.createBuilder();
50 TypeElement superClass = fromTypeMirror(clazz.getSuperclass()); 56 TypeElement superClass = fromTypeMirror(clazz.getSuperclass());
51 ExecutableElement constructor = findConstructor(superClass); 57 ExecutableElement constructor = findConstructor(superClass);
79 } 85 }
80 86
81 return method; 87 return method;
82 } 88 }
83 89
90
84 private static ExecutableElement findConstructor(TypeElement clazz) { 91 private static ExecutableElement findConstructor(TypeElement clazz) {
85 List<ExecutableElement> constructors = ElementFilter.constructorsIn(clazz.getEnclosedElements()); 92 List<ExecutableElement> constructors = ElementFilter.constructorsIn(clazz.getEnclosedElements());
86 if (constructors.isEmpty()) { 93 if (constructors.isEmpty()) {
87 return null; 94 return null;
88 } else { 95 } else {
89 return constructors.get(0); 96 return constructors.get(0);
90 } 97 }
91 } 98 }
99
100 protected CodeExecutableElement createSuperConstructor(TypeElement type, ExecutableElement element) {
101 if (element.getModifiers().contains(Modifier.PRIVATE)) {
102 return null;
103 }
104
105 CodeExecutableElement executable = CodeExecutableElement.clone(getContext().getEnvironment(), element);
106 executable.setReturnType(null);
107 executable.setSimpleName(CodeNames.of(type.getSimpleName().toString()));
108 CodeTreeBuilder b = executable.createBuilder();
109 b.startStatement();
110 b.startSuperCall();
111 for (VariableElement v : element.getParameters()) {
112 b.string(v.getSimpleName().toString());
113 }
114 b.end();
115 b.end();
116
117 return executable;
118 }
119
92 120
93 protected CodeTypeElement createClass(Template model, Set<Modifier> modifiers, String simpleName, TypeMirror superType, boolean enumType) { 121 protected CodeTypeElement createClass(Template model, Set<Modifier> modifiers, String simpleName, TypeMirror superType, boolean enumType) {
94 TypeElement templateType = model.getTemplateType(); 122 TypeElement templateType = model.getTemplateType();
95 123
96 PackageElement pack = getContext().getEnvironment().getElementUtils().getPackageOf(templateType); 124 PackageElement pack = getContext().getEnvironment().getElementUtils().getPackageOf(templateType);