Skip to content

Commit 7eba8bd

Browse files
committed
fixed a problem with finding class in inner classes
upgraded bcel library
1 parent 3aeaa47 commit 7eba8bd

2 files changed

Lines changed: 19 additions & 9 deletions

File tree

test-app/build-tools/android-metadata-generator/build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ compileJava {
3636
compileJava.outputs.dir("$rootDir/dist/classes")
3737

3838
dependencies {
39-
compile 'org.apache.bcel:bcel:6.0'
39+
compile 'org.apache.bcel:bcel:6.2'
4040
compile files("./src/libs/dx.jar")
4141
}
4242

test-app/build-tools/android-metadata-generator/src/src/com/telerik/metadata/bcl/ClassInfo.java

Lines changed: 18 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@
77
import com.telerik.metadata.desc.MethodDescriptor;
88

99
import org.apache.bcel.classfile.Attribute;
10+
import org.apache.bcel.classfile.ConstantClass;
11+
import org.apache.bcel.classfile.ConstantPool;
1012
import org.apache.bcel.classfile.ConstantUtf8;
1113
import org.apache.bcel.classfile.Field;
1214
import org.apache.bcel.classfile.InnerClass;
@@ -36,19 +38,14 @@ private void init() {
3638
return;
3739
}
3840
boolean found = false;
41+
String fullClassName = this.getClassName(clazz.getClassNameIndex());
3942
for (Attribute a : clazz.getAttributes()) {
4043
if (a instanceof InnerClasses) {
4144
InnerClass[] i = ((InnerClasses) a).getInnerClasses();
4245
for (InnerClass ic : i) {
46+
String innerClassName = this.getClassName(ic.getInnerClassIndex());
4347

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)) {
48+
if (fullClassName.equals(innerClassName)) {
5249
int flags = ic.getInnerAccessFlags();
5350
clazz.setAccessFlags(flags);
5451
found = true;
@@ -63,6 +60,19 @@ private void init() {
6360
}
6461
}
6562

63+
private String getClassName(int classIndex) {
64+
ConstantPool constantPool = clazz.getConstantPool();
65+
ConstantClass innerClassNameIndex = (ConstantClass)constantPool.getConstant(classIndex);
66+
if (innerClassNameIndex == null) {
67+
return null;
68+
}
69+
ConstantUtf8 className = (ConstantUtf8)constantPool.getConstant(innerClassNameIndex.getNameIndex());
70+
if (className == null) {
71+
return null;
72+
}
73+
return className.getBytes();
74+
}
75+
6676
@Override
6777
public boolean isClass() {
6878
return clazz.isClass();

0 commit comments

Comments
 (0)