diff 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
line wrap: on
line diff
--- a/graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/model/TemplateMethod.java	Sat Aug 23 19:31:13 2014 +0200
+++ b/graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/model/TemplateMethod.java	Sat Aug 23 19:31:18 2014 +0200
@@ -44,7 +44,8 @@
     private final ExecutableElement method;
     private final AnnotationMirror markerAnnotation;
     private Parameter returnType;
-    private List<Parameter> parameters;
+    private final List<Parameter> parameters;
+    private final Map<String, Parameter> parameterCache = new HashMap<>();
 
     public TemplateMethod(String id, int naturalOrder, Template template, MethodSpec specification, ExecutableElement method, AnnotationMirror markerAnnotation, Parameter returnType,
                     List<Parameter> parameters) {
@@ -59,7 +60,9 @@
             Parameter newParam = new Parameter(param);
             this.parameters.add(newParam);
             newParam.setMethod(this);
+            parameterCache.put(param.getLocalName(), param);
         }
+        parameterCache.put(returnType.getLocalName(), returnType);
         this.id = id;
     }
 
@@ -77,10 +80,6 @@
         getMessages().addAll(method.getMessages());
     }
 
-    public void setParameters(List<Parameter> parameters) {
-        this.parameters = parameters;
-    }
-
     @Override
     public Element getMessageElement() {
         return method;
@@ -120,14 +119,10 @@
         if (returnType.getLocalName().equals(localName)) {
             returnType = newParameter;
             returnType.setMethod(this);
-        }
-
-        for (ListIterator<Parameter> iterator = parameters.listIterator(); iterator.hasNext();) {
-            Parameter parameter = iterator.next();
-            if (parameter.getLocalName().equals(localName)) {
-                iterator.set(newParameter);
-                newParameter.setMethod(this);
-            }
+        } else {
+            Parameter local = findParameter(localName);
+            int index = parameters.indexOf(local);
+            parameters.set(index, newParameter);
         }
     }
 
@@ -175,12 +170,7 @@
     }
 
     public Parameter findParameter(String valueName) {
-        for (Parameter param : getReturnTypeAndParameters()) {
-            if (param.getLocalName().equals(valueName)) {
-                return param;
-            }
-        }
-        return null;
+        return parameterCache.get(valueName);
     }
 
     public List<Parameter> getReturnTypeAndParameters() {