diff options
author | chiba <chiba@30ef5769-5b8d-40dd-aea6-55b5d6557bb3> | 2012-06-06 14:34:02 +0000 |
---|---|---|
committer | chiba <chiba@30ef5769-5b8d-40dd-aea6-55b5d6557bb3> | 2012-06-06 14:34:02 +0000 |
commit | e75c12e0964f27abb798393473913307d24efe61 (patch) | |
tree | 49a585a8a8abe9b76556b516054d9a071b367136 | |
parent | 12d5a5f3ccaec717942009a56089eaf34d4783d7 (diff) | |
download | javassist-e75c12e0964f27abb798393473913307d24efe61.tar.gz javassist-e75c12e0964f27abb798393473913307d24efe61.zip |
fixed JASSIST-166
git-svn-id: http://anonsvn.jboss.org/repos/javassist/trunk@633 30ef5769-5b8d-40dd-aea6-55b5d6557bb3
-rw-r--r-- | Readme.html | 3 | ||||
-rw-r--r-- | src/main/javassist/compiler/TypeChecker.java | 3 | ||||
-rw-r--r-- | src/test/javassist/JvstTest4.java | 13 | ||||
-rw-r--r-- | src/test/test4/JIRA166.java | 12 |
4 files changed, 30 insertions, 1 deletions
diff --git a/Readme.html b/Readme.html index 450b2ec3..ef74f171 100644 --- a/Readme.html +++ b/Readme.html @@ -283,7 +283,8 @@ see javassist.Dump. <p>-version 3.17 <ul> - <li>JIRA JASSIST-168. + <li>OSGi bundle info is now included in the jar file. + <li>JIRA JASSIST-166, 168 have been fixed. </ul> <p>-version 3.16.1 on March 6, 2012 diff --git a/src/main/javassist/compiler/TypeChecker.java b/src/main/javassist/compiler/TypeChecker.java index fc6a567e..35a8e378 100644 --- a/src/main/javassist/compiler/TypeChecker.java +++ b/src/main/javassist/compiler/TypeChecker.java @@ -899,6 +899,9 @@ public class TypeChecker extends Visitor implements Opcode, TokenId { public void atArrayLength(Expr expr) throws CompileError { expr.oprand1().accept(this); + if (arrayDim == 0) + throw new NoFieldException("length", expr); + exprType = INT; arrayDim = 0; } diff --git a/src/test/javassist/JvstTest4.java b/src/test/javassist/JvstTest4.java index f7fcd968..f7319008 100644 --- a/src/test/javassist/JvstTest4.java +++ b/src/test/javassist/JvstTest4.java @@ -711,4 +711,17 @@ public class JvstTest4 extends JvstTestRoot { assertTrue(javassist.runtime.Desc.getClazz("[Ljava.lang.String;") != null); javassist.runtime.Desc.useContextClassLoader = old; } + + public void testJIRA166() throws Exception { + CtClass cc = sloader.get("test4.JIRA166"); + cc.instrument(new ExprEditor() { + public void edit(FieldAccess fa) throws CannotCompileException { + if (fa.isReader() && fa.getFieldName().equals("length")) + fa.replace("length = self().length + \"!\"; $_ = ($r) this.length.substring(1);"); + } + }); + cc.writeFile(); + Object obj = make(cc.getName()); + assertEquals(1, invoke(obj, "run")); + } } diff --git a/src/test/test4/JIRA166.java b/src/test/test4/JIRA166.java new file mode 100644 index 00000000..bbd46efc --- /dev/null +++ b/src/test/test4/JIRA166.java @@ -0,0 +1,12 @@ +package test4; + +public class JIRA166 { + String length = "jira166"; + JIRA166 self() { return this; } + void print() { System.out.println(length); } + public int run() { + print(); + System.out.println(length); + return 1; + } +} |