private void writeInnerClass(InnerClassesAttribute attr, List obfClassChain, ClassEntry obfClassEntry) {
// get the new inner class name
ClassEntry obfInnerClassEntry = obfClassEntry.buildClassEntry(obfClassChain);
ClassEntry obfOuterClassEntry = obfInnerClassEntry.getOuterClassEntry();
// here's what the JVM spec says about the InnerClasses attribute
// append(inner, parent, 0 if anonymous else simple name, flags);
// update the attribute with this inner class
ConstPool constPool = attr.getConstPool();
int innerClassIndex = constPool.addClassInfo(obfInnerClassEntry.getName());
int parentClassIndex = constPool.addClassInfo(obfOuterClassEntry.getName());
int innerClassNameIndex = 0;
int accessFlags = AccessFlag.PUBLIC;
// TODO: need to figure out if we can put static or not
if (!this.index.isAnonymousClass(obfClassEntry)) {
innerClassNameIndex = constPool.addUtf8Info(obfInnerClassEntry.getInnermostClassName());
}
attr.append(innerClassIndex, parentClassIndex, innerClassNameIndex, accessFlags);
/* DEBUG
System.out.println(String.format("\tOBF: %s -> ATTR: %s,%s,%s (replace %s with %s)",
obfClassEntry,
attr.innerClass(attr.tableLength() - 1),
attr.outerClass(attr.tableLength() - 1),
attr.innerName(attr.tableLength() - 1),
Constants.NonePackage + "/" + obfInnerClassName,
obfClassEntry.getName()
));
*/
}