From 7eba8bd6832ec4b4e35cdc89d595dc28de09f2af Mon Sep 17 00:00:00 2001 From: Vasil Trifonov Date: Thu, 17 Jan 2019 19:00:30 +0200 Subject: [PATCH 1/3] fixed a problem with finding class in inner classes upgraded bcel library --- .../android-metadata-generator/build.gradle | 2 +- .../com/telerik/metadata/bcl/ClassInfo.java | 26 +++++++++++++------ 2 files changed, 19 insertions(+), 9 deletions(-) diff --git a/test-app/build-tools/android-metadata-generator/build.gradle b/test-app/build-tools/android-metadata-generator/build.gradle index 9bcb52ff5..b884acbf6 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..414ca6408 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,14 @@ private void init() { return; } boolean found = false; + String fullClassName = this.getClassName(clazz.getClassNameIndex()); for (Attribute a : clazz.getAttributes()) { if (a instanceof InnerClasses) { InnerClass[] i = ((InnerClasses) a).getInnerClasses(); for (InnerClass ic : i) { + String innerClassName = this.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 +60,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(); From bab667854594d38e514602b62507a6c0fd095237 Mon Sep 17 00:00:00 2001 From: Vasil Trifonov Date: Fri, 18 Jan 2019 14:34:46 +0200 Subject: [PATCH 2/3] add a check for null fullClassName --- .../src/src/com/telerik/metadata/bcl/ClassInfo.java | 4 ++++ 1 file changed, 4 insertions(+) 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 414ca6408..fde5c5c00 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 @@ -39,6 +39,10 @@ private void init() { } boolean found = false; String fullClassName = this.getClassName(clazz.getClassNameIndex()); + if (fullClassName == null) { + return; + } + for (Attribute a : clazz.getAttributes()) { if (a instanceof InnerClasses) { InnerClass[] i = ((InnerClasses) a).getInnerClasses(); From b4ebcc37f174098d0cc6cb1a77ee0f437261ab6e Mon Sep 17 00:00:00 2001 From: Vasil Trifonov Date: Mon, 21 Jan 2019 10:55:00 +0200 Subject: [PATCH 3/3] removed this from method call --- .../src/src/com/telerik/metadata/bcl/ClassInfo.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) 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 fde5c5c00..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 @@ -38,7 +38,7 @@ private void init() { return; } boolean found = false; - String fullClassName = this.getClassName(clazz.getClassNameIndex()); + String fullClassName = getClassName(clazz.getClassNameIndex()); if (fullClassName == null) { return; } @@ -47,7 +47,7 @@ private void init() { if (a instanceof InnerClasses) { InnerClass[] i = ((InnerClasses) a).getInnerClasses(); for (InnerClass ic : i) { - String innerClassName = this.getClassName(ic.getInnerClassIndex()); + String innerClassName = getClassName(ic.getInnerClassIndex()); if (fullClassName.equals(innerClassName)) { int flags = ic.getInnerAccessFlags();