fix(gui): another try to fix code search
This commit is contained in:
@@ -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++;
|
||||
|
||||
Reference in New Issue
Block a user