[Clirr-devel] CVS: clirr/core/src/java/net/sf/clirr/core ScopeSelector.java,1.3,1.4
Status: Alpha
Brought to you by:
lkuehne
From: <lk...@us...> - 2004-09-02 04:21:42
|
Update of /cvsroot/clirr/clirr/core/src/java/net/sf/clirr/core In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv15139/src/java/net/sf/clirr/core Modified Files: ScopeSelector.java Log Message: fixed ScopeSelector failure with named inner classes defined inside a method body Index: ScopeSelector.java =================================================================== RCS file: /cvsroot/clirr/clirr/core/src/java/net/sf/clirr/core/ScopeSelector.java,v retrieving revision 1.3 retrieving revision 1.4 diff -u -r1.3 -r1.4 --- ScopeSelector.java 18 Jul 2004 01:06:10 -0000 1.3 +++ ScopeSelector.java 2 Sep 2004 04:21:32 -0000 1.4 @@ -18,16 +18,16 @@ ////////////////////////////////////////////////////////////////////////////// package net.sf.clirr.core; -import org.apache.bcel.classfile.JavaClass; +import org.apache.bcel.Constants; import org.apache.bcel.classfile.AccessFlags; import org.apache.bcel.classfile.Attribute; -import org.apache.bcel.classfile.InnerClasses; -import org.apache.bcel.classfile.InnerClass; +import org.apache.bcel.classfile.ConstantClass; import org.apache.bcel.classfile.ConstantPool; -import org.apache.bcel.classfile.Constant; import org.apache.bcel.classfile.ConstantUtf8; +import org.apache.bcel.classfile.InnerClass; +import org.apache.bcel.classfile.InnerClasses; +import org.apache.bcel.classfile.JavaClass; import org.apache.bcel.util.Repository; -import org.apache.bcel.Constants; /** * Selects zero or more java scope values (public, protected, package, @@ -332,8 +332,6 @@ // ok this is a nested class String jclassName = jclass.getClassName(); String enclosingClassName = jclassName.substring(0, dollarPos); - String jclassNestedName = jclassName.substring(dollarPos + 1); - Repository repo = jclass.getRepository(); JavaClass enclosingClass = repo.findClass(enclosingClassName); @@ -354,17 +352,18 @@ InnerClass[] icarray = ics.getInnerClasses(); for (int j = 0; j < icarray.length; ++j) { + // in the code below, instanceof checks should not be necessary + // before casting Constants because the classfile format ensures + // that instanceof would always be true InnerClass ic = icarray[j]; - int nameIndex = ic.getInnerNameIndex(); - - Constant nameconst = pool.getConstant(nameIndex); - if (nameconst instanceof ConstantUtf8) + int classIndex = ic.getInnerClassIndex(); + ConstantClass constClass = (ConstantClass) pool.getConstant(classIndex); + int nameIndex = constClass.getNameIndex(); + ConstantUtf8 nameconst = (ConstantUtf8) pool.getConstant(nameIndex); + String classname = nameconst.getBytes().replace('/', '.'); + if (jclassName.equals(classname)) { - String classname = ((ConstantUtf8) nameconst).getBytes(); - if (jclassNestedName.equals(classname)) - { - return getScope(ic.getInnerAccessFlags()); - } + return getScope(ic.getInnerAccessFlags()); } } } |