summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorchiba <chiba@30ef5769-5b8d-40dd-aea6-55b5d6557bb3>2012-06-06 14:34:02 +0000
committerchiba <chiba@30ef5769-5b8d-40dd-aea6-55b5d6557bb3>2012-06-06 14:34:02 +0000
commite75c12e0964f27abb798393473913307d24efe61 (patch)
tree49a585a8a8abe9b76556b516054d9a071b367136
parent12d5a5f3ccaec717942009a56089eaf34d4783d7 (diff)
downloadjavassist-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.html3
-rw-r--r--src/main/javassist/compiler/TypeChecker.java3
-rw-r--r--src/test/javassist/JvstTest4.java13
-rw-r--r--src/test/test4/JIRA166.java12
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;
+ }
+}