Skip to content

Commit

Permalink
feat: allow to include/exclude dependencies when saving with class fi…
Browse files Browse the repository at this point in the history
…lter (#1466)(PR #1467)

* feat: Add option to include/exclude dependencies when saving
* fix save skip for class depencencies

Co-authored-by: Skylot <skylot@gmail.com>
  • Loading branch information
NASGregorio and skylot committed Apr 26, 2022
1 parent e02434d commit 357706b
Show file tree
Hide file tree
Showing 3 changed files with 24 additions and 2 deletions.
14 changes: 14 additions & 0 deletions jadx-core/src/main/java/jadx/api/JadxArgs.java
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,11 @@ public class JadxArgs {
*/
private Predicate<String> classFilter = null;

/**
* Save dependencies for classes accepted by {@code classFilter}
*/
private boolean includeDependencies = false;

private boolean deobfuscationOn = false;
private boolean useSourceNameAsClassAlias = false;
private boolean parseKotlinMetadata = false;
Expand Down Expand Up @@ -261,6 +266,14 @@ public void setSkipSources(boolean skipSources) {
this.skipSources = skipSources;
}

public void setIncludeDependencies(boolean includeDependencies) {
this.includeDependencies = includeDependencies;
}

public boolean isIncludeDependencies() {
return includeDependencies;
}

public Predicate<String> getClassFilter() {
return classFilter;
}
Expand Down Expand Up @@ -513,6 +526,7 @@ public String toString() {
+ ", useImports=" + useImports
+ ", skipResources=" + skipResources
+ ", skipSources=" + skipSources
+ ", includeDependencies=" + includeDependencies
+ ", deobfuscationOn=" + deobfuscationOn
+ ", deobfuscationMapFile=" + deobfuscationMapFile
+ ", deobfuscationMapFileMode=" + deobfuscationMapFileMode
Expand Down
8 changes: 6 additions & 2 deletions jadx-core/src/main/java/jadx/api/JadxDecompiler.java
Original file line number Diff line number Diff line change
Expand Up @@ -331,10 +331,14 @@ private void appendSourcesSave(List<Runnable> tasks, File outDir) {
List<JavaClass> classes = getClasses();
List<JavaClass> processQueue = new ArrayList<>(classes.size());
for (JavaClass cls : classes) {
if (cls.getClassNode().contains(AFlag.DONT_GENERATE)) {
ClassNode clsNode = cls.getClassNode();
if (clsNode.contains(AFlag.DONT_GENERATE)) {
continue;
}
if (classFilter != null && !classFilter.test(cls.getFullName())) {
if (classFilter != null && !classFilter.test(clsNode.getClassInfo().getFullName())) {
if (!args.isIncludeDependencies()) {
clsNode.add(AFlag.DONT_GENERATE);
}
continue;
}
processQueue.add(cls);
Expand Down
4 changes: 4 additions & 0 deletions jadx-core/src/main/java/jadx/core/ProcessClass.java
Original file line number Diff line number Diff line change
Expand Up @@ -99,6 +99,10 @@ public ICodeInfo generateCode(ClassNode cls) {
return generateCode(topParentClass);
}
try {
if (cls.contains(AFlag.DONT_GENERATE)) {
process(cls, false);
return ICodeInfo.EMPTY;
}
for (ClassNode depCls : cls.getDependencies()) {
process(depCls, false);
}
Expand Down

0 comments on commit 357706b

Please sign in to comment.