Mercurial > hg > graal-compiler
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) { |