diff options
-rw-r--r-- | Readme.html | 2 | ||||
-rw-r--r-- | src/main/javassist/compiler/CodeGen.java | 3 | ||||
-rw-r--r-- | src/test/javassist/JvstTest5.java | 7 | ||||
-rw-r--r-- | src/test/test5/InvalidCastDollar.java | 11 | ||||
-rw-r--r-- | tutorial/tutorial2.html | 2 |
5 files changed, 22 insertions, 3 deletions
diff --git a/Readme.html b/Readme.html index c3046502..7817178b 100644 --- a/Readme.html +++ b/Readme.html @@ -283,7 +283,7 @@ see javassist.Dump. <p>-version 3.21 <ul> -<li>JIRA JASSIST-244, 248 +<li>JIRA JASSIST-244, 248, 255 </ul> </p> diff --git a/src/main/javassist/compiler/CodeGen.java b/src/main/javassist/compiler/CodeGen.java index d2bdea9a..e02884de 100644 --- a/src/main/javassist/compiler/CodeGen.java +++ b/src/main/javassist/compiler/CodeGen.java @@ -1420,12 +1420,13 @@ public abstract class CodeGen extends Visitor implements Opcode, TokenId { int type = expr.getType(); oprand.accept(this); int srcType = exprType; + int srcDim = arrayDim; if (invalidDim(srcType, arrayDim, className, type, dim, name, true) || srcType == VOID || type == VOID) throw new CompileError(msg); if (type == CLASS) { - if (!isRefType(srcType)) + if (!isRefType(srcType) && srcDim == 0) throw new CompileError(msg); return toJvmArrayName(name, dim); diff --git a/src/test/javassist/JvstTest5.java b/src/test/javassist/JvstTest5.java index 6deffcab..8e1ef8a7 100644 --- a/src/test/javassist/JvstTest5.java +++ b/src/test/javassist/JvstTest5.java @@ -135,4 +135,11 @@ public class JvstTest5 extends JvstTestRoot { Object obj = make(cc.getName()); assertEquals(40271, invoke(obj, "run")); } + + public void testInvalidCastWithDollar() throws Exception { + String code = "{ new JavassistInvalidCastTest().inspectReturn((Object) ($w) $_); } "; + CtClass c = sloader.get("test5.InvalidCastDollar"); + for (CtMethod method : c.getDeclaredMethods()) + method.insertAfter(code); + } } diff --git a/src/test/test5/InvalidCastDollar.java b/src/test/test5/InvalidCastDollar.java new file mode 100644 index 00000000..9633189e --- /dev/null +++ b/src/test/test5/InvalidCastDollar.java @@ -0,0 +1,11 @@ +package test5; + +public class InvalidCastDollar { + public static byte[] arrayReturn() { + return new byte[12]; + } + + public static int intReturn() { + return 23; + } +} diff --git a/tutorial/tutorial2.html b/tutorial/tutorial2.html index 9a962ac3..f92f96e9 100644 --- a/tutorial/tutorial2.html +++ b/tutorial/tutorial2.html @@ -481,7 +481,7 @@ compiled code at the end of the method. In the statement given to available. <p>The variable <code>$_</code> represents the resulting value of the -method. So it is a write-only variable. +method. The type of that variable is the type of the result type (the return type) of the method. If the result type is <code>void</code>, then the type of <code>$_</code> is <code>Object</code> and the value |