Commit 62a28c8e authored by Skylot's avatar Skylot

Remove empty public constructors

parent 045a643b
...@@ -98,8 +98,6 @@ public class Main { ...@@ -98,8 +98,6 @@ public class Main {
if (args.isRawCFGOutput()) if (args.isRawCFGOutput())
passes.add(new DotGraphVisitor(args.getOutDir(), false, true)); passes.add(new DotGraphVisitor(args.getOutDir(), false, true));
passes.add(new ClassModifier());
passes.add(new ModVisitor()); passes.add(new ModVisitor());
passes.add(new EnumVisitor()); passes.add(new EnumVisitor());
...@@ -115,6 +113,7 @@ public class Main { ...@@ -115,6 +113,7 @@ public class Main {
if (args.isCFGOutput()) if (args.isCFGOutput())
passes.add(new DotGraphVisitor(args.getOutDir(), true)); passes.add(new DotGraphVisitor(args.getOutDir(), true));
passes.add(new ClassModifier());
passes.add(new CleanRegions()); passes.add(new CleanRegions());
} }
passes.add(new CodeGen(args)); passes.add(new CodeGen(args));
......
...@@ -37,6 +37,18 @@ public class AccessInfo { ...@@ -37,6 +37,18 @@ public class AccessInfo {
return new AccessInfo(f, type); return new AccessInfo(f, type);
} }
public boolean isPublic() {
return (accFlags & AccessFlags.ACC_PUBLIC) != 0;
}
public boolean isProtected() {
return (accFlags & AccessFlags.ACC_PROTECTED) != 0;
}
public boolean isPrivate() {
return (accFlags & AccessFlags.ACC_PRIVATE) != 0;
}
public boolean isAbstract() { public boolean isAbstract() {
return (accFlags & AccessFlags.ACC_ABSTRACT) != 0; return (accFlags & AccessFlags.ACC_ABSTRACT) != 0;
} }
...@@ -87,13 +99,13 @@ public class AccessInfo { ...@@ -87,13 +99,13 @@ public class AccessInfo {
public String makeString() { public String makeString() {
StringBuilder code = new StringBuilder(); StringBuilder code = new StringBuilder();
if ((accFlags & AccessFlags.ACC_PUBLIC) != 0) if (isPublic())
code.append("public "); code.append("public ");
if ((accFlags & AccessFlags.ACC_PRIVATE) != 0) if (isPrivate())
code.append("private "); code.append("private ");
if ((accFlags & AccessFlags.ACC_PROTECTED) != 0) if (isProtected())
code.append("protected "); code.append("protected ");
if (isStatic()) if (isStatic())
......
...@@ -5,12 +5,12 @@ import jadx.dex.instructions.args.ArgType; ...@@ -5,12 +5,12 @@ import jadx.dex.instructions.args.ArgType;
import jadx.dex.nodes.DexNode; import jadx.dex.nodes.DexNode;
import java.io.File; import java.io.File;
import java.util.HashMap;
import java.util.Map; import java.util.Map;
import java.util.WeakHashMap;
public final class ClassInfo { public final class ClassInfo {
private static final Map<ArgType, ClassInfo> CLASSINFO_CACHE = new HashMap<ArgType, ClassInfo>(); private static final Map<ArgType, ClassInfo> CLASSINFO_CACHE = new WeakHashMap<ArgType, ClassInfo>();
private static final String DEFAULT_PACKAGE_NAME = "defpackage"; private static final String DEFAULT_PACKAGE_NAME = "defpackage";
private final String clsName; private final String clsName;
......
package jadx.dex.visitors; package jadx.dex.visitors;
import jadx.dex.info.AccessInfo; import jadx.dex.info.AccessInfo;
import jadx.dex.nodes.BlockNode;
import jadx.dex.nodes.ClassNode; import jadx.dex.nodes.ClassNode;
import jadx.dex.nodes.MethodNode; import jadx.dex.nodes.MethodNode;
import jadx.utils.exceptions.JadxException; import jadx.utils.exceptions.JadxException;
import java.util.Iterator; import java.util.Iterator;
import java.util.List;
public class ClassModifier extends AbstractVisitor { public class ClassModifier extends AbstractVisitor {
...@@ -21,10 +23,32 @@ public class ClassModifier extends AbstractVisitor { ...@@ -21,10 +23,32 @@ public class ClassModifier extends AbstractVisitor {
// remove bridge methods // remove bridge methods
if (af.isBridge() && af.isSynthetic()) { if (af.isBridge() && af.isSynthetic()) {
// TODO make some checks before deleting if (!isMethodIdUniq(cls, mth)) {
// TODO add more checks before method deletion
it.remove(); it.remove();
} }
} }
// remove public empty constructors
if (af.isConstructor()
&& af.isPublic()
&& mth.getArguments(false).isEmpty()) {
List<BlockNode> bb = mth.getBasicBlocks();
if (bb.isEmpty() || (bb.size() == 1 && bb.get(0).getInstructions().isEmpty())) {
it.remove();
}
}
}
return false; return false;
} }
private boolean isMethodIdUniq(ClassNode cls, MethodNode mth) {
String shortId = mth.getMethodInfo().getShortId();
for (MethodNode otherMth : cls.getMethods()) {
if (otherMth.getMethodInfo().getShortId().equals(shortId)
&& otherMth != mth)
return false;
}
return true;
}
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment