[jboss-cvs] javassist SVN: r615 - in trunk: src/main/javassist/bytecode/stackmap and 3 other directories.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Sun Feb 19 07:41:49 EST 2012


Author: chiba
Date: 2012-02-19 07:41:47 -0500 (Sun, 19 Feb 2012)
New Revision: 615

Added:
   trunk/src/test/test4/JIRA152.java
Modified:
   trunk/Readme.html
   trunk/src/main/javassist/bytecode/stackmap/TypeData.java
   trunk/src/test/Jassist150.java
   trunk/src/test/javassist/JvstTest4.java
Log:
fixed JASSIST-152

Modified: trunk/Readme.html
===================================================================
--- trunk/Readme.html	2012-02-15 15:57:19 UTC (rev 614)
+++ trunk/Readme.html	2012-02-19 12:41:47 UTC (rev 615)
@@ -283,7 +283,7 @@
 
 <p>-version 3.16
 <ul>
-	<li>JIRA JASSIST-126, 127, 144, 145, 146, 147, 149, 150, 153, 155.
+	<li>JIRA JASSIST-126, 127, 144, 145, 146, 147, 149, 150, 152, 153, 155.
 	<li><code>javassist.bytecode.analysis.ControlFlow</code> was added.
 </ul>
 

Modified: trunk/src/main/javassist/bytecode/stackmap/TypeData.java
===================================================================
--- trunk/src/main/javassist/bytecode/stackmap/TypeData.java	2012-02-15 15:57:19 UTC (rev 614)
+++ trunk/src/main/javassist/bytecode/stackmap/TypeData.java	2012-02-19 12:41:47 UTC (rev 615)
@@ -284,7 +284,7 @@
             }
         }
 
-        /* See also NullType.getExpected().
+        /* See also {NullType,ArrayElement}.getExpected().
          */
         public String getExpected() throws BadBytecode {
             ArrayList equiv = equivalences;
@@ -410,19 +410,38 @@
         }
 
         public String getName() throws BadBytecode {
-            String name = array.getName();
+            return getName2(array.getName());
+        }
+
+        private String getName2(String name) throws BadBytecode {
             if (name.length() > 1 && name.charAt(0) == '[') {
                 char c = name.charAt(1);
                 if (c == 'L')
-                    return name.substring(2, name.length() - 1).replace('/', '.');                    
+                    return name.substring(2, name.length() - 1).replace('/', '.');
                 else if (c == '[')
                     return name.substring(1);
             }
-    
-            throw new BadBytecode("bad array type for AALOAD: "
+
+            if (array.isNullType())
+                return "java.lang.Object";
+            else
+                throw new BadBytecode("bad array type for AALOAD: "
                                   + name);
         }
 
+        public String getExpected() throws BadBytecode {
+            ArrayList equiv = equivalences;
+            if (equiv.size() == 1)
+                return getName2(array.getExpected());     // not getName();
+            else {
+                String en = expectedName;
+                if (en == null)
+                    return "java.lang.Object";
+                else
+                    return en;
+            }
+        }
+
         public static String getArrayType(String elementType) {
             if (elementType.charAt(0) == '[')
                 return "[" + elementType;

Modified: trunk/src/test/Jassist150.java
===================================================================
--- trunk/src/test/Jassist150.java	2012-02-15 15:57:19 UTC (rev 614)
+++ trunk/src/test/Jassist150.java	2012-02-19 12:41:47 UTC (rev 615)
@@ -3,6 +3,8 @@
 import javassist.CtClass;
 import javassist.CtMethod;
 import javassist.NotFoundException;
+import javassist.expr.ExprEditor;
+import javassist.expr.MethodCall;
 
 public class Jassist150 {
     public static final String BASE_PATH = "./";
@@ -77,7 +79,23 @@
         ccGet.setBody(code3);
     }
 
-    public static void main(String[] args) {
+    public void testJIRA152() throws Exception {
+        CtClass cc = ClassPool.getDefault().get("test4.JIRA152");
+        CtMethod mth = cc.getDeclaredMethod("buildColumnOverride");
+        mth.instrument(new ExprEditor() {
+            public void edit(MethodCall c) throws CannotCompileException {
+                c.replace("try{ $_ = $proceed($$); } catch (Throwable t) { throw t; }");
+            }
+        });
+        mth.getMethodInfo().rebuildStackMap(ClassPool.getDefault());
+        cc.writeFile();
+    }
+
+    public static void main(String[] args) throws Exception {
+        new Jassist150().testJIRA152();
+    }
+
+    public static void main2(String[] args) {
         for (int loop = 0; loop < 5; loop++) {
             try {
                 implTestClassTailCache();

Modified: trunk/src/test/javassist/JvstTest4.java
===================================================================
--- trunk/src/test/javassist/JvstTest4.java	2012-02-15 15:57:19 UTC (rev 614)
+++ trunk/src/test/javassist/JvstTest4.java	2012-02-19 12:41:47 UTC (rev 615)
@@ -85,7 +85,7 @@
                 }
             }
         });
-        // m3.getMethodInfo2().rebuildStackMapIf6(cc.getClassPool(), cc.getClassFile2());
+        m3.getMethodInfo().rebuildStackMapIf6(cc.getClassPool(), cc.getClassFile());
 
         cc.writeFile();
         Object obj = make(cc.getName());
@@ -687,4 +687,18 @@
         System.out.println("JIRA150b " + size);
         assertTrue(size < N - 10);
     }
+
+    public void testJIRA152() throws Exception {
+        CtClass cc = sloader.get("test4.JIRA152");
+        CtMethod mth = cc.getDeclaredMethod("buildColumnOverride");
+        //CtMethod mth = cc.getDeclaredMethod("tested");
+        mth.instrument(new ExprEditor() {
+            public void edit(MethodCall c) throws CannotCompileException {
+                c.replace("try{ $_ = $proceed($$); } catch (Throwable t) { throw t; }");
+            }
+        });
+        cc.writeFile();
+        Object obj = make(cc.getName());
+        assertEquals(1, invoke(obj, "test"));
+    }
 }

Added: trunk/src/test/test4/JIRA152.java
===================================================================
--- trunk/src/test/test4/JIRA152.java	                        (rev 0)
+++ trunk/src/test/test4/JIRA152.java	2012-02-19 12:41:47 UTC (rev 615)
@@ -0,0 +1,60 @@
+package test4;
+
+import java.util.Map;
+import java.util.HashMap;
+
+public class JIRA152 {
+    public int foo(int i) { return i; }
+    public int bar(int j) { return j; }
+    public int tested(int k) {
+        String[] p;
+        if (k > 0)
+            p = new String[1];
+        else
+            p = null;
+
+        if (p != null)
+            while (k < p.length)
+                k++;
+
+        return 0;
+    }
+
+    public String put(String s, Object obj) {
+        return s;
+    }
+
+    private static Map<String, String[]> buildColumnOverride(JIRA152 element, String path) {
+        Map<String, String[]> columnOverride = new HashMap<String, String[]>();
+        if ( element == null ) return null;
+        String singleOverride = element.toString();
+        String multipleOverrides = element.toString();
+        String[] overrides;
+        if ( singleOverride != null ) {
+            overrides = new String[] { singleOverride };
+        }
+        /*else if ( multipleOverrides != null ) {
+            // overrides = columnOverride.get("foo");
+            overrides = null;
+        }*/
+        else {
+            overrides = null;
+        }
+
+        if ( overrides != null ) {
+            for (String depAttr : overrides) {
+                columnOverride.put(
+                        element.put(path, depAttr.getClass()),
+                        new String[] { depAttr.toLowerCase() }
+                );
+                //columnOverride.put("a", new String[1]);
+            }
+        }
+        return columnOverride;
+    }
+
+    public int test() {
+        Map<String,String[]> map = buildColumnOverride(this, "foo");
+        return map.size();
+    }
+}


Property changes on: trunk/src/test/test4/JIRA152.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain



More information about the jboss-cvs-commits mailing list