==== Patch <fieldcache> level 1
Source: [No source]
Target: 737f8f2c-97f8-0310-ac9b-cfac8cc1a2f5:/eng/third-party/janino/trunk:72828
        (svn+ssh://svn.streambase.com/repos/sb)
Log:
 r75020@spiceweasel (orig r73195):  fowles | 2008-05-30 22:13:32 -0400
 Make IClass keep a map of (IField name ->  IField)
 add helper method to clear cache
 

=== src/org/codehaus/janino/UnitCompiler.java
==================================================================
--- src/org/codehaus/janino/UnitCompiler.java	(revision 72828)
+++ src/org/codehaus/janino/UnitCompiler.java	(patch fieldcache level 1)
@@ -7895,14 +7895,10 @@
     ) throws CompileException {
 
         // Search for a field with the given name in the current class.
-        IClass.IField[] fields = iClass.getDeclaredIFields();
-        for (int i = 0; i < fields.length; ++i) {
-            final IClass.IField f = fields[i];
-            if (name.equals(f.getName())) return f;
-        }
+        IClass.IField f = iClass.getDeclaredIField(name);
+        if(f != null) return f;
 
         // Examine superclass.
-        IClass.IField f = null;
         {
             IClass superclass = iClass.getSuperclass();
             if (superclass != null) f = this.findIField(superclass, name, location);
=== src/org/codehaus/janino/Java.java
==================================================================
--- src/org/codehaus/janino/Java.java	(revision 72828)
+++ src/org/codehaus/janino/Java.java	(patch fieldcache level 1)
@@ -424,7 +424,7 @@
             tbd.setDeclaringType(this);
 
             // Clear resolved type cache.
-            if (this.resolvedType != null) this.resolvedType.declaredIFields = null;
+            if (this.resolvedType != null) this.resolvedType.clearIFieldCaches();
         }
 
         // Compile time members.
@@ -705,7 +705,7 @@
             fd.setDeclaringType(this);
 
             // Clear resolved type cache.
-            if (this.resolvedType != null) this.resolvedType.declaredIFields = null;
+            if (this.resolvedType != null) this.resolvedType.clearIFieldCaches();
         }
 
         public /*final*/ Type[] extendedTypes;
=== src/org/codehaus/janino/IClass.java
==================================================================
--- src/org/codehaus/janino/IClass.java	(revision 72828)
+++ src/org/codehaus/janino/IClass.java	(patch fieldcache level 1)
@@ -213,7 +213,25 @@
         }
         return this.declaredIFields;
     }
-    protected IField[] declaredIFields = null;
+    public final IField getDeclaredIField(String name) {
+        if(this.declaredIFieldsCache == null) {
+            IField[] fields = getDeclaredIFields();
+            Map m = new HashMap();
+            for(int i = 0; i < fields.length; ++i) {
+                m.put(fields[i].getName(), fields[i]);
+            }
+            this.declaredIFieldsCache = m;
+        }
+        return (IField) this.declaredIFieldsCache.get(name);
+    }
+    
+    protected void clearIFieldCaches() {
+        this.declaredIFields = null;
+        this.declaredIFieldsCache = null;
+    }
+        
+    private Map declaredIFieldsCache = null; // String name => IField
+    private IField[] declaredIFields = null;
     protected abstract IField[] getDeclaredIFields2();
 
     /**

==== BEGIN SVK PATCH BLOCK ====
Version: svk v2.0.2 (linux)

eJyFVs+O20QY9wGQGqmIM6dBuGrSNpvx+H+2G0Xa7qotUCG1cKnKamx/k7jr2NZ4km1VV9qt2MIB
LvTEjQfgCTggDr30BcoNceEBEC/AZzvZ7Hazu5YVZ2Z+3+/7PzPb8sH60CgHA1rqBi3vf/1Zv/8l
V+H4Co50p4QoVpnU7TKBGSS6WSbZSLfKlE8AVxWXI1CDgYHCXiO8VQssSKyKI+AqSwvdr8l2lATQ
jdIb+uXQrN4d3fDLAnClZtuRMIuLOEtRqWtTRhGCeAPlsxzSHZllqloyHccdskqalmGSFbBT0ePM
0K7wTDesRiCKJYRo01O0vpBhzbWQr7Xbc/klECFHROYKIrci6mVyVCu6kIwdkVkryAxnwdYLswjG
fFrUai+kNY9o7RW0zDxF23vM0zjNajsuZLeG1pzdWYRexAnolnEWb++rNFab2SRHmFx7zGe8Nm2h
qeZyT3CZZ9rYu4viZ3B4JznsMznubCa8KE6znOmz3US0XuV5njzdUfBERZAoXsfBZCVYggkzohxM
O6BU2IZputR0fRNCCG1bNx2GnXBP017+Ur3v13/mg+X4hz9Ojn/6ez7+6MWH2uG/17T9kfbr7cP/
vP2Dq0SQDRI3vmCD3IIw4RKiO9sxJFG7asXO+uUWmT+xaAvyyQZJp0nSIRLUVKZEIGAJ6fXI1hM+
iVMgxTQHGdbUkkwyCSRsEkhAykwWZMxnMJe8RrIwnEpUvbaYOVoZ5lzyCclyhZ3Lk3kVbFUct3ka
YUGQm1V6BpVZN+tMDYjK0L5CVVrVGEgEgk8TRQJM4izOJGmrscz24nREOHk2TOJ0l2xmP+9rf9K3
lzBuby8dXMUiPbYD1AUxT1Rguo4ZutwRoc8NnzNLWL5rUcZCJnzunptqt2HwuE1F4HIKFmOOIRwf
aBCZpu+ZIae67xzP9Mc3tIPDSHul3Tr87rn2V3DwcvBK+/a3uwf/OC/DBLhsErbJwzEU7c6KqSqU
+RSpXn/+evs9TXu9/cFK/2rruBX4wuXgAwTMdSGyXGZgAVrcBZ/Z/Fz/vIrBcHzbpDTwbYZcFOPj
GYL5Akz0U7iB7rhu4+CL7z998eOVy4ct7c2Gto+fg9+/ebM1DZI4JCLGfJPGEXK6PO8rWSWwrlLy
7HiVqnFcrEUn0EUdCbKxqN4lvnoazMNHqLLCYlOcUodBXD8h8wXPyQSRKeyR27wY4/hdiMhkO04V
iRFG1/Fzc65gLYF0pMbr5Pr1+F1bqmeylk9Vu8E+jB9VvXkP3Wx3bpCjyXd0PT8xOicCZLIUXArN
u7ndYDtnE1S2zHeG1pKi/sllpnDDg4jMsjgiq8pw6eoqBaTJzvq5oIUbS+TSi7kZ8YwrqBN0nmy1
WR2rIbIxmNfBcZaVXVLXOKXYGSCo7QtDmIEjbId7vuU4UeRRx43q24Bh+yWRzWWjyOMQ9oAXkJB2
JuMRLpiGb3f6VaXsJVCQkjBKvS61uyYljPUNs28y0qUWpS30ZxdIc/CQXYAct64JupiJRdYaN7qD
RT13WoRHERlDgjsxmYAaZ1G1M9aJIWEVixZpVd7VRVVPDAas1BlrblwP6mtTv4+n7wxkwZMrTolX
tJyrMd548DaFg+k0jnTmlz2s6B7mS0Zd3LDV08VJqeQ03a3OR+YxjJuDB6UrPMHCro/fLjUN2uWh
H3RDwUMvDA3OhP0/Eag3xw==
==== END SVK PATCH BLOCK ====

