comparison graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/model/TemplateMethod.java @ 16909:62cfffca9be2

Truffle-DSL: some more performance optimizations.
author Christian Humer <christian.humer@gmail.com>
date Sat, 23 Aug 2014 19:31:18 +0200
parents 2db61eddcb97
children 5ede308adf68
comparison
equal deleted inserted replaced
16908:d3f282a9e287 16909:62cfffca9be2
42 private final int naturalOrder; 42 private final int naturalOrder;
43 private final MethodSpec specification; 43 private final MethodSpec specification;
44 private final ExecutableElement method; 44 private final ExecutableElement method;
45 private final AnnotationMirror markerAnnotation; 45 private final AnnotationMirror markerAnnotation;
46 private Parameter returnType; 46 private Parameter returnType;
47 private List<Parameter> parameters; 47 private final List<Parameter> parameters;
48 private final Map<String, Parameter> parameterCache = new HashMap<>();
48 49
49 public TemplateMethod(String id, int naturalOrder, Template template, MethodSpec specification, ExecutableElement method, AnnotationMirror markerAnnotation, Parameter returnType, 50 public TemplateMethod(String id, int naturalOrder, Template template, MethodSpec specification, ExecutableElement method, AnnotationMirror markerAnnotation, Parameter returnType,
50 List<Parameter> parameters) { 51 List<Parameter> parameters) {
51 this.template = template; 52 this.template = template;
52 this.specification = specification; 53 this.specification = specification;
57 this.parameters = new ArrayList<>(); 58 this.parameters = new ArrayList<>();
58 for (Parameter param : parameters) { 59 for (Parameter param : parameters) {
59 Parameter newParam = new Parameter(param); 60 Parameter newParam = new Parameter(param);
60 this.parameters.add(newParam); 61 this.parameters.add(newParam);
61 newParam.setMethod(this); 62 newParam.setMethod(this);
62 } 63 parameterCache.put(param.getLocalName(), param);
64 }
65 parameterCache.put(returnType.getLocalName(), returnType);
63 this.id = id; 66 this.id = id;
64 } 67 }
65 68
66 public int getNaturalOrder() { 69 public int getNaturalOrder() {
67 return naturalOrder; 70 return naturalOrder;
73 } 76 }
74 77
75 public TemplateMethod(TemplateMethod method, ExecutableElement executable) { 78 public TemplateMethod(TemplateMethod method, ExecutableElement executable) {
76 this(method.id, method.naturalOrder, method.template, method.specification, executable, method.markerAnnotation, method.returnType, method.parameters); 79 this(method.id, method.naturalOrder, method.template, method.specification, executable, method.markerAnnotation, method.returnType, method.parameters);
77 getMessages().addAll(method.getMessages()); 80 getMessages().addAll(method.getMessages());
78 }
79
80 public void setParameters(List<Parameter> parameters) {
81 this.parameters = parameters;
82 } 81 }
83 82
84 @Override 83 @Override
85 public Element getMessageElement() { 84 public Element getMessageElement() {
86 return method; 85 return method;
118 117
119 public void replaceParameter(String localName, Parameter newParameter) { 118 public void replaceParameter(String localName, Parameter newParameter) {
120 if (returnType.getLocalName().equals(localName)) { 119 if (returnType.getLocalName().equals(localName)) {
121 returnType = newParameter; 120 returnType = newParameter;
122 returnType.setMethod(this); 121 returnType.setMethod(this);
123 } 122 } else {
124 123 Parameter local = findParameter(localName);
125 for (ListIterator<Parameter> iterator = parameters.listIterator(); iterator.hasNext();) { 124 int index = parameters.indexOf(local);
126 Parameter parameter = iterator.next(); 125 parameters.set(index, newParameter);
127 if (parameter.getLocalName().equals(localName)) {
128 iterator.set(newParameter);
129 newParameter.setMethod(this);
130 }
131 } 126 }
132 } 127 }
133 128
134 public List<Parameter> getRequiredParameters() { 129 public List<Parameter> getRequiredParameters() {
135 List<Parameter> requiredParameters = new ArrayList<>(); 130 List<Parameter> requiredParameters = new ArrayList<>();
173 } 168 }
174 return foundParameters; 169 return foundParameters;
175 } 170 }
176 171
177 public Parameter findParameter(String valueName) { 172 public Parameter findParameter(String valueName) {
178 for (Parameter param : getReturnTypeAndParameters()) { 173 return parameterCache.get(valueName);
179 if (param.getLocalName().equals(valueName)) {
180 return param;
181 }
182 }
183 return null;
184 } 174 }
185 175
186 public List<Parameter> getReturnTypeAndParameters() { 176 public List<Parameter> getReturnTypeAndParameters() {
187 List<Parameter> allParameters = new ArrayList<>(getParameters().size() + 1); 177 List<Parameter> allParameters = new ArrayList<>(getParameters().size() + 1);
188 if (getReturnType() != null) { 178 if (getReturnType() != null) {