public static String buildJavaClassName(String name) { String res = name.replace('/', '.'); if (res.contains("$")) { // attempt to invoke foreign member // classes correctly StructClass cl = DecompilerContext.getStructContext().getClass(name); if (cl == null || !cl.isOwn()) { res = res.replace('$', '.'); } } return res; }
if (node != null && node.classStruct.isOwn()) { result = node.simpleName;
if (!cl.isOwn()) { continue;
public void reload(LazyLoader loader) throws IOException { List<StructClass> lstClasses = new ArrayList<>(); for (StructClass cl : classes) { String oldName = cl.qualifiedName; StructClass newCl; try (DataInputFullStream in = loader.getClassStream(oldName)) { newCl = new StructClass(in, cl.isOwn(), loader); } lstClasses.add(newCl); Link lnk = loader.getClassLink(oldName); loader.removeClassLink(oldName); loader.addClassLink(newCl.qualifiedName, lnk); } classes = lstClasses; }
if (cl.isOwn() && !mapRootClasses.containsKey(cl.qualifiedName)) { if (bDecompileInner) { StructInnerClassesAttribute inner = cl.getAttribute(StructGeneralAttribute.ATTRIBUTE_INNER_CLASSES); if (enclosingClass != null && enclosingClass.isOwn()) { // own classes only Inner existingRec = mapInnerClasses.get(innerName); if (existingRec == null) {
private void renameClass(StructClass cl) { if (!cl.isOwn()) { return; } String classOldFullName = cl.qualifiedName; // TODO: rename packages String clSimpleName = ConverterHelper.getSimpleClassName(classOldFullName); if (helper.toBeRenamed(IIdentifierRenamer.Type.ELEMENT_CLASS, clSimpleName, null, null)) { String classNewFullName; do { String classname = helper.getNextClassName(classOldFullName, ConverterHelper.getSimpleClassName(classOldFullName)); classNewFullName = ConverterHelper.replaceSimpleClassName(classOldFullName, classname); } while (context.getClasses().containsKey(classNewFullName)); interceptor.addName(classOldFullName, classNewFullName); } }
@Override protected StructGeneralAttribute readAttribute(DataInputFullStream in, ConstantPool pool, String name) throws IOException { if (StructGeneralAttribute.ATTRIBUTE_CODE.getName().equals(name)) { if (!classStruct.isOwn()) { // skip code in foreign classes in.discard(8); in.discard(in.readInt()); in.discard(8 * in.readUnsignedShort()); } else { containsCode = true; in.discard(6); localVariables = in.readUnsignedShort(); codeLength = in.readInt(); in.discard(codeLength); int excLength = in.readUnsignedShort(); in.discard(excLength * 8); codeFullLength = codeLength + excLength * 8 + 2; } codeAttributes = readAttributes(in, pool); return null; } return super.readAttribute(in, pool, name); }
public static String buildJavaClassName(String name) { String res = name.replace('/', '.'); if (res.contains("$")) { // attempt to invoke foreign member // classes correctly StructClass cl = DecompilerContext.getStructContext().getClass(name); if (cl == null || !cl.isOwn()) { res = res.replace('$', '.'); } } return res; }
if (node != null && node.classStruct.isOwn()) { result = node.simpleName;
if (!cl.isOwn()) { continue;
public void reload(LazyLoader loader) throws IOException { List<StructClass> lstClasses = new ArrayList<>(); for (StructClass cl : classes) { String oldName = cl.qualifiedName; StructClass newCl; try (DataInputFullStream in = loader.getClassStream(oldName)) { newCl = new StructClass(in, cl.isOwn(), loader); } lstClasses.add(newCl); Link lnk = loader.getClassLink(oldName); loader.removeClassLink(oldName); loader.addClassLink(newCl.qualifiedName, lnk); } classes = lstClasses; }
private void renameClass(StructClass cl) { if (!cl.isOwn()) { return; } String classOldFullName = cl.qualifiedName; // TODO: rename packages String clSimpleName = ConverterHelper.getSimpleClassName(classOldFullName); if (helper.toBeRenamed(IIdentifierRenamer.Type.ELEMENT_CLASS, clSimpleName, null, null)) { String classNewFullName; do { String classname = helper.getNextClassName(classOldFullName, ConverterHelper.getSimpleClassName(classOldFullName)); classNewFullName = ConverterHelper.replaceSimpleClassName(classOldFullName, classname); } while (context.getClasses().containsKey(classNewFullName)); interceptor.addName(classOldFullName, classNewFullName); } }
@Override protected StructGeneralAttribute readAttribute(DataInputFullStream in, ConstantPool pool, String name) throws IOException { if (StructGeneralAttribute.ATTRIBUTE_CODE.equals(name)) { if (!classStruct.isOwn()) { // skip code in foreign classes in.discard(8); in.discard(in.readInt()); in.discard(8 * in.readUnsignedShort()); } else { containsCode = true; in.discard(6); localVariables = in.readUnsignedShort(); codeLength = in.readInt(); in.discard(codeLength); int excLength = in.readUnsignedShort(); in.discard(excLength * 8); codeFullLength = codeLength + excLength * 8 + 2; } codeAttributes = readAttributes(in, pool); return null; } return super.readAttribute(in, pool, name); }