Browse Source

fixed a bug in CodeConverter#replaceFieldRead/Write() on field shadowing


git-svn-id: http://anonsvn.jboss.org/repos/javassist/trunk@323 30ef5769-5b8d-40dd-aea6-55b5d6557bb3
tags/rel_3_17_1_ga
chiba 17 years ago
parent
commit
baa647c760
2 changed files with 19 additions and 1 deletions
  1. 6
    0
      Readme.html
  2. 13
    1
      src/main/javassist/convert/TransformReadField.java

+ 6
- 0
Readme.html View File

@@ -281,6 +281,12 @@ see javassist.Dump.

<h2>Changes</h2>

<p>-version 3.4
<ul>
<li>A bug in CodeConverter#replaceFieldRead() and CodeConverter#replaceFieldWrite()
was fixed. <a href="http://jira.jboss.com/jira/browse/JBAOP-284">JBAOP-284</a>.
</ul>

<p>-version 3.3 on August 17, 2006
<ul>
<li>CtClass#toClass() and ClassPool#toClass() were modified to accept a

+ 13
- 1
src/main/javassist/convert/TransformReadField.java View File

@@ -46,13 +46,25 @@ public class TransformReadField extends Transformer {

try {
CtClass c = pool.get(cp.getFieldrefClassName(index));
if (is_private ? c == fclass : c.subclassOf(fclass))
if (c == fclass || (!is_private && isFieldInSuper(c, fclass, fname)))
return cp.getFieldrefType(index);
}
catch (NotFoundException e) {}
return null;
}

static boolean isFieldInSuper(CtClass clazz, CtClass fclass, String fname) {
if (!clazz.subclassOf(fclass))
return false;

try {
CtField f = clazz.getField(fname);
return f.getDeclaringClass() == fclass;
}
catch (NotFoundException e) {}
return false;
}

public int transform(CtClass tclazz, int pos, CodeIterator iterator,
ConstPool cp) throws BadBytecode
{

Loading…
Cancel
Save