fix(gui): another try to fix code search

This commit is contained in:
Skylot
2023-10-21 23:07:40 +01:00
parent 15d464d620
commit fdffe20c46
6 changed files with 27 additions and 25 deletions
@@ -104,7 +104,6 @@ public class ProcessClass {
try {
if (cls.contains(AFlag.DONT_GENERATE)) {
process(cls, false);
LOG.warn("Requested code for class with DONT_GENERATE flag: {}", cls);
return NOT_GENERATED;
}
for (ClassNode depCls : cls.getDependencies()) {
@@ -1,9 +1,12 @@
package jadx.gui.search.providers;
import java.util.List;
import java.util.Objects;
import jadx.api.JadxDecompiler;
import jadx.api.JavaClass;
import jadx.api.JavaNode;
import jadx.core.dex.nodes.ICodeNode;
import jadx.gui.search.ISearchMethod;
import jadx.gui.search.ISearchProvider;
import jadx.gui.search.SearchSettings;
@@ -15,12 +18,14 @@ import jadx.gui.utils.JNodeCache;
public abstract class BaseSearchProvider implements ISearchProvider {
private final JNodeCache nodeCache;
private final JadxDecompiler decompiler;
protected final ISearchMethod searchMth;
protected final String searchStr;
protected final List<JavaClass> classes;
public BaseSearchProvider(MainWindow mw, SearchSettings searchSettings, List<JavaClass> classes) {
this.nodeCache = mw.getCacheObject().getNodeCache();
this.decompiler = mw.getWrapper().getDecompiler();
this.searchMth = searchSettings.getSearchMethod();
this.searchStr = searchSettings.getSearchString();
this.classes = classes;
@@ -38,6 +43,11 @@ public abstract class BaseSearchProvider implements ISearchProvider {
return nodeCache.makeFrom(cls);
}
protected JNode convert(ICodeNode codeNode) {
JavaNode node = Objects.requireNonNull(decompiler.getJavaNodeByRef(codeNode));
return Objects.requireNonNull(nodeCache.makeFrom(node));
}
@Override
public int total() {
return classes.size();
@@ -1,7 +1,6 @@
package jadx.gui.search.providers;
import java.util.List;
import java.util.stream.Collectors;
import org.jetbrains.annotations.Nullable;
@@ -17,16 +16,7 @@ public final class ClassSearchProvider extends BaseSearchProvider {
private int clsNum = 0;
public ClassSearchProvider(MainWindow mw, SearchSettings searchSettings, List<JavaClass> classes) {
super(mw, searchSettings, filterClasses(classes));
}
/**
* Collect top class with code
*/
private static List<JavaClass> filterClasses(List<JavaClass> classes) {
return classes.stream()
.filter(cls -> !cls.isInner() && !cls.isNoCode())
.collect(Collectors.toList());
super(mw, searchSettings, classes);
}
@Override
@@ -45,12 +45,14 @@ public final class CodeSearchProvider extends BaseSearchProvider {
return null;
}
JavaClass cls = classes.get(clsNum);
if (!cls.getClassNode().isInner()) {
if (code == null) {
code = getClassCode(cls, codeCache);
}
JNode newResult = searchNext(cls, code);
String clsCode = code;
if (clsCode == null && !cls.isInner() && !cls.isNoCode()) {
clsCode = getClassCode(cls, codeCache);
}
if (clsCode != null) {
JNode newResult = searchNext(cls, clsCode);
if (newResult != null) {
code = clsCode;
return newResult;
}
}
@@ -5,8 +5,8 @@ import java.util.List;
import org.jetbrains.annotations.Nullable;
import jadx.api.JavaClass;
import jadx.api.JavaField;
import jadx.core.dex.info.FieldInfo;
import jadx.core.dex.nodes.FieldNode;
import jadx.gui.jobs.Cancelable;
import jadx.gui.search.SearchSettings;
import jadx.gui.treemodel.JNode;
@@ -28,10 +28,10 @@ public final class FieldSearchProvider extends BaseSearchProvider {
return null;
}
JavaClass cls = classes.get(clsNum);
List<JavaField> fields = cls.getFields();
List<FieldNode> fields = cls.getClassNode().getFields();
if (fldNum < fields.size()) {
JavaField fld = fields.get(fldNum++);
if (checkField(fld)) {
FieldNode fld = fields.get(fldNum++);
if (checkField(fld.getFieldInfo())) {
return convert(fld);
}
} else {
@@ -44,9 +44,10 @@ public final class FieldSearchProvider extends BaseSearchProvider {
}
}
private boolean checkField(JavaField field) {
FieldInfo fieldInfo = field.getFieldNode().getFieldInfo();
return isMatch(fieldInfo.getName()) || isMatch(fieldInfo.getAlias());
private boolean checkField(FieldInfo fieldInfo) {
return isMatch(fieldInfo.getName())
|| isMatch(fieldInfo.getAlias())
|| isMatch(fieldInfo.getFullId());
}
@Override
@@ -32,7 +32,7 @@ public final class MethodSearchProvider extends BaseSearchProvider {
if (mthNum < methods.size()) {
MethodNode mth = methods.get(mthNum++);
if (checkMth(mth.getMethodInfo())) {
return convert(mth.getJavaNode());
return convert(mth);
}
} else {
clsNum++;