Mercurial > hg > graal-jvmci-8
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); |