77import com .telerik .metadata .desc .MethodDescriptor ;
88
99import org .apache .bcel .classfile .Attribute ;
10+ import org .apache .bcel .classfile .ConstantClass ;
11+ import org .apache .bcel .classfile .ConstantPool ;
1012import org .apache .bcel .classfile .ConstantUtf8 ;
1113import org .apache .bcel .classfile .Field ;
1214import org .apache .bcel .classfile .InnerClass ;
@@ -36,19 +38,18 @@ private void init() {
3638 return ;
3739 }
3840 boolean found = false ;
41+ String fullClassName = getClassName (clazz .getClassNameIndex ());
42+ if (fullClassName == null ) {
43+ return ;
44+ }
45+
3946 for (Attribute a : clazz .getAttributes ()) {
4047 if (a instanceof InnerClasses ) {
4148 InnerClass [] i = ((InnerClasses ) a ).getInnerClasses ();
4249 for (InnerClass ic : i ) {
50+ String innerClassName = getClassName (ic .getInnerClassIndex ());
4351
44- ConstantUtf8 cname = (ConstantUtf8 ) clazz
45- .getConstantPool ().getConstant (ic .getInnerNameIndex ());
46- if (cname == null ) {
47- continue ;
48- }
49-
50- String innerClassname = cname .getBytes ();
51- if (name .equals (innerClassname )) {
52+ if (fullClassName .equals (innerClassName )) {
5253 int flags = ic .getInnerAccessFlags ();
5354 clazz .setAccessFlags (flags );
5455 found = true ;
@@ -63,6 +64,19 @@ private void init() {
6364 }
6465 }
6566
67+ private String getClassName (int classIndex ) {
68+ ConstantPool constantPool = clazz .getConstantPool ();
69+ ConstantClass innerClassNameIndex = (ConstantClass )constantPool .getConstant (classIndex );
70+ if (innerClassNameIndex == null ) {
71+ return null ;
72+ }
73+ ConstantUtf8 className = (ConstantUtf8 )constantPool .getConstant (innerClassNameIndex .getNameIndex ());
74+ if (className == null ) {
75+ return null ;
76+ }
77+ return className .getBytes ();
78+ }
79+
6680 @ Override
6781 public boolean isClass () {
6882 return clazz .isClass ();
0 commit comments