Author: markt
Date: Thu Jul 25 15:32:05 2013
New Revision: 1507013

URL: http://svn.apache.org/r1507013
Log:
Merge latest changes from Commons BCEL

Modified:
    tomcat/trunk/java/org/apache/tomcat/util/bcel/   (props changed)
    tomcat/trunk/java/org/apache/tomcat/util/bcel/classfile/Constant.java
    tomcat/trunk/java/org/apache/tomcat/util/bcel/classfile/ConstantUtf8.java
    tomcat/trunk/java/org/apache/tomcat/util/bcel/package.html

Propchange: tomcat/trunk/java/org/apache/tomcat/util/bcel/
------------------------------------------------------------------------------
  Merged 
/commons/proper/bcel/trunk/src/main/java/org/apache/bcel:r1377531-1507004

Modified: tomcat/trunk/java/org/apache/tomcat/util/bcel/classfile/Constant.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/util/bcel/classfile/Constant.java?rev=1507013&r1=1507012&r2=1507013&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/tomcat/util/bcel/classfile/Constant.java 
(original)
+++ tomcat/trunk/java/org/apache/tomcat/util/bcel/classfile/Constant.java Thu 
Jul 25 15:32:05 2013
@@ -113,7 +113,7 @@ public abstract class Constant implement
             case Constants.CONSTANT_NameAndType:
                 return new ConstantNameAndType(file);
             case Constants.CONSTANT_Utf8:
-                return new ConstantUtf8(file);
+                return ConstantUtf8.getInstance(file);
             case Constants.CONSTANT_MethodHandle:
                 return new ConstantMethodHandle(file);
             case Constants.CONSTANT_MethodType:

Modified: 
tomcat/trunk/java/org/apache/tomcat/util/bcel/classfile/ConstantUtf8.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/util/bcel/classfile/ConstantUtf8.java?rev=1507013&r1=1507012&r2=1507013&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/tomcat/util/bcel/classfile/ConstantUtf8.java 
(original)
+++ tomcat/trunk/java/org/apache/tomcat/util/bcel/classfile/ConstantUtf8.java 
Thu Jul 25 15:32:05 2013
@@ -17,7 +17,11 @@
 package org.apache.tomcat.util.bcel.classfile;
 
 import java.io.DataInput;
+import java.io.DataInputStream;
 import java.io.IOException;
+import java.util.HashMap;
+import java.util.LinkedHashMap;
+import java.util.Map;
 
 import org.apache.tomcat.util.bcel.Constants;
 
@@ -33,8 +37,42 @@ import org.apache.tomcat.util.bcel.Const
 public final class ConstantUtf8 extends Constant {
 
     private static final long serialVersionUID = 8119001312020421976L;
-    private String bytes;
+    private final String bytes;
 
+    private static final int MAX_CACHE_ENTRIES = 20000;
+    private static final int INITIAL_CACHE_CAPACITY = 
(int)(MAX_CACHE_ENTRIES/0.75);
+    private static HashMap<String, ConstantUtf8> cache;
+
+    private static synchronized ConstantUtf8 getCachedInstance(String s) {
+        if (s.length() > 200) {
+            return  new ConstantUtf8(s);
+        }
+        if (cache == null)  {
+            cache = new LinkedHashMap<String, 
ConstantUtf8>(INITIAL_CACHE_CAPACITY, 0.75f, true) {
+                private static final long serialVersionUID = 1L;
+
+                @Override
+                protected boolean removeEldestEntry(Map.Entry<String, 
ConstantUtf8> eldest) {
+                     return size() > MAX_CACHE_ENTRIES;
+                }
+            };
+        }
+        ConstantUtf8 result = cache.get(s);
+        if (result != null) {
+                return result;
+            }
+        result = new ConstantUtf8(s);
+        cache.put(s, result);
+        return result;
+    }
+
+    private static ConstantUtf8 getInstance(String s) {
+        return getCachedInstance(s);
+    }
+
+    static ConstantUtf8 getInstance(DataInputStream file) throws IOException {
+        return getInstance(file.readUTF());
+    }
 
     /**
      * Initialize instance from file data.
@@ -49,6 +87,18 @@ public final class ConstantUtf8 extends 
 
 
     /**
+     * @param bytes Data
+     */
+    private ConstantUtf8(String bytes) {
+        super(Constants.CONSTANT_Utf8);
+        if (bytes == null) {
+            throw new IllegalArgumentException("bytes must not be null!");
+        }
+        this.bytes = bytes;
+    }
+
+
+    /**
      * @return Data converted to string.
      */
     public final String getBytes() {

Modified: tomcat/trunk/java/org/apache/tomcat/util/bcel/package.html
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/util/bcel/package.html?rev=1507013&r1=1507012&r2=1507013&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/tomcat/util/bcel/package.html (original)
+++ tomcat/trunk/java/org/apache/tomcat/util/bcel/package.html Thu Jul 25 
15:32:05 2013
@@ -24,7 +24,7 @@ $Id$
 <body bgcolor="white">
 <p>
 This package contains basic classes for the
-<a href="http://jakarta.apache.org/bcel/";>Byte Code Engineering Library</a>
+<a href="http://commons.apache.org/bcel";>Byte Code Engineering Library</a>
  and constants defined by the
 <a href="http://java.sun.com/docs/books/vmspec/html/VMSpecTOC.doc.html";>
  JVM specification</a>.



---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org
For additional commands, e-mail: dev-h...@tomcat.apache.org

Reply via email to