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



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


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





BIN
javassist.jar View File


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



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


{ {
while (handler != null) { while (handler != null) {
TypedBlock tb = (TypedBlock)handler.body; TypedBlock tb = (TypedBlock)handler.body;
if (tb.alreadySet())
if (tb.alreadySet()) {
mergeMap(tb, false); 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 { else {
recordStackMap(tb, handler.typeIndex); recordStackMap(tb, handler.typeIndex);
MapMaker maker = new MapMaker(this); MapMaker maker = new MapMaker(this);
throws BadBytecode throws BadBytecode
{ {
TypeData[] tStackTypes = TypeData.make(stackTypes.length); TypeData[] tStackTypes = TypeData.make(stackTypes.length);
tStackTypes[0] = toExceptionType(exceptionType).join();
recordStackMap0(target, 1, tStackTypes);
}

private TypeData.ClassName toExceptionType(int exceptionType) {
String type; String type;
if (exceptionType == 0) // for finally clauses if (exceptionType == 0) // for finally clauses
type = "java.lang.Throwable";
type= "java.lang.Throwable";
else else
type = cpool.getClassInfo(exceptionType); 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) private void recordStackMap0(TypedBlock target, int st, TypeData[] tStackTypes)

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

Object obj = make(cc.getName()); Object obj = make(cc.getName());
assertEquals(1, invoke(obj, "test")); 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

package test4;

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

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

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