diff --git a/test-app/build-tools/android-metadata-generator/build.gradle b/test-app/build-tools/android-metadata-generator/build.gradle index 845fee5b1..c2df40ad3 100644 --- a/test-app/build-tools/android-metadata-generator/build.gradle +++ b/test-app/build-tools/android-metadata-generator/build.gradle @@ -36,7 +36,7 @@ compileJava { compileJava.outputs.dir("$rootDir/dist/classes") dependencies { - compile 'org.apache.bcel:bcel:6.0' + compile 'org.apache.bcel:bcel:6.2' compile files("./src/libs/dx.jar") } diff --git a/test-app/build-tools/android-metadata-generator/src/src/com/telerik/metadata/bcl/ClassInfo.java b/test-app/build-tools/android-metadata-generator/src/src/com/telerik/metadata/bcl/ClassInfo.java index 6082ac788..af70c1e09 100644 --- a/test-app/build-tools/android-metadata-generator/src/src/com/telerik/metadata/bcl/ClassInfo.java +++ b/test-app/build-tools/android-metadata-generator/src/src/com/telerik/metadata/bcl/ClassInfo.java @@ -7,6 +7,8 @@ import com.telerik.metadata.desc.MethodDescriptor; import org.apache.bcel.classfile.Attribute; +import org.apache.bcel.classfile.ConstantClass; +import org.apache.bcel.classfile.ConstantPool; import org.apache.bcel.classfile.ConstantUtf8; import org.apache.bcel.classfile.Field; import org.apache.bcel.classfile.InnerClass; @@ -36,19 +38,18 @@ private void init() { return; } boolean found = false; + String fullClassName = getClassName(clazz.getClassNameIndex()); + if (fullClassName == null) { + return; + } + for (Attribute a : clazz.getAttributes()) { if (a instanceof InnerClasses) { InnerClass[] i = ((InnerClasses) a).getInnerClasses(); for (InnerClass ic : i) { + String innerClassName = getClassName(ic.getInnerClassIndex()); - ConstantUtf8 cname = (ConstantUtf8) clazz - .getConstantPool().getConstant(ic.getInnerNameIndex()); - if (cname == null) { - continue; - } - - String innerClassname = cname.getBytes(); - if (name.equals(innerClassname)) { + if (fullClassName.equals(innerClassName)) { int flags = ic.getInnerAccessFlags(); clazz.setAccessFlags(flags); found = true; @@ -63,6 +64,19 @@ private void init() { } } + private String getClassName(int classIndex) { + ConstantPool constantPool = clazz.getConstantPool(); + ConstantClass innerClassNameIndex = (ConstantClass)constantPool.getConstant(classIndex); + if (innerClassNameIndex == null) { + return null; + } + ConstantUtf8 className = (ConstantUtf8)constantPool.getConstant(innerClassNameIndex.getNameIndex()); + if (className == null) { + return null; + } + return className.getBytes(); + } + @Override public boolean isClass() { return clazz.isClass();