Browse Source

fixed JASSIST-190

git-svn-id: http://anonsvn.jboss.org/repos/javassist/trunk@703 30ef5769-5b8d-40dd-aea6-55b5d6557bb3
tags/log
chiba 11 years ago
parent
commit
fc4e2231b3

+ 2
- 2
Readme.html View File

@@ -283,12 +283,12 @@ see javassist.Dump.

<p>-version 3.18
<ul>
JIRA JASSIST-183, 189, 162.
JIRA JASSIST-183, 184, 189, 162, 186, 190.
</ul>

<p>-version 3.17.1 on December 3, 2012
<ul>
<li>JIRA JASSIST-177, 178, 182
<li>JIRA JASSIST-177, 178, 182.
</ul>



BIN
javassist.jar View File


+ 15
- 4
src/main/javassist/bytecode/stackmap/MapMaker.java View File

@@ -18,6 +18,7 @@ package javassist.bytecode.stackmap;

import java.util.ArrayList;
import javassist.ClassPool;
import javassist.CtClass;
import javassist.NotFoundException;
import javassist.bytecode.*;

@@ -205,8 +206,14 @@ public class MapMaker extends Tracer {
{
while (handler != null) {
TypedBlock tb = (TypedBlock)handler.body;
if (tb.alreadySet())
if (tb.alreadySet()) {
mergeMap(tb, false);
if (tb.stackTop < 1)
throw new BadBytecode("bad catch clause: " + handler.typeIndex);

tb.stackTypes[0] = merge(toExceptionType(handler.typeIndex),
tb.stackTypes[0]);
}
else {
recordStackMap(tb, handler.typeIndex);
MapMaker maker = new MapMaker(this);
@@ -256,14 +263,18 @@ public class MapMaker extends Tracer {
throws BadBytecode
{
TypeData[] tStackTypes = TypeData.make(stackTypes.length);
tStackTypes[0] = toExceptionType(exceptionType).join();
recordStackMap0(target, 1, tStackTypes);
}

private TypeData.ClassName toExceptionType(int exceptionType) {
String type;
if (exceptionType == 0) // for finally clauses
type = "java.lang.Throwable";
type= "java.lang.Throwable";
else
type = cpool.getClassInfo(exceptionType);

tStackTypes[0] = new TypeData.ClassName(type);
recordStackMap0(target, 1, tStackTypes);
return new TypeData.ClassName(type);
}

private void recordStackMap0(TypedBlock target, int st, TypeData[] tStackTypes)

+ 10
- 0
src/test/javassist/JvstTest4.java View File

@@ -828,4 +828,14 @@ public class JvstTest4 extends JvstTestRoot {
Object obj = make(cc.getName());
assertEquals(1, invoke(obj, "test"));
}

// JASSIST-190
public void testMultipleCatch() throws Exception {
CtClass cc = sloader.get("test4.MultiCatch");
CtMethod m1 = cc.getDeclaredMethod("m1");
m1.insertAfter("print();");
cc.writeFile();
Object obj = make(cc.getName());
assertEquals(12, invoke(obj, "test1"));
}
}

+ 7
- 0
src/test/test4/JIRA186.java View File

@@ -0,0 +1,7 @@
package test4;

public class JIRA186 {
public int test() {
return 1;
}
}

+ 23
- 0
src/test/test4/MultiCatch.java View File

@@ -0,0 +1,23 @@
package test4;

public class MultiCatch {
public void print() { System.out.println("MultiCatch"); }
public int test1() { return m1(1); }
public int m1(int i) {
// Java 7 syntax
try {
return foo(i);
}
catch (java.io.IOException | NullPointerException e) {
return e.getMessage().length();
}
}
public int foo(int i) throws java.io.IOException {
if (i < 0)
throw new java.io.IOException("negative");
else if (i < 10)
throw new NullPointerException("less than 10");
else
return i;
}
}

Loading…
Cancel
Save