[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