提交 c25f918c 编写于 作者: S Skylot

gui: fix some sonar warnings

上级 6fb1c8d3
...@@ -24,6 +24,10 @@ allprojects { ...@@ -24,6 +24,10 @@ allprojects {
} }
} }
compileJava {
options.encoding = "UTF-8"
}
jar { jar {
version = jadxVersion version = jadxVersion
manifest { manifest {
......
package jadx.core.codegen; package jadx.core.codegen;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.Queue;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import jadx.core.dex.instructions.ArithNode; import jadx.core.dex.instructions.ArithNode;
import jadx.core.dex.instructions.IfOp; import jadx.core.dex.instructions.IfOp;
import jadx.core.dex.instructions.InsnType; import jadx.core.dex.instructions.InsnType;
...@@ -15,13 +22,6 @@ import jadx.core.utils.ErrorsCounter; ...@@ -15,13 +22,6 @@ import jadx.core.utils.ErrorsCounter;
import jadx.core.utils.exceptions.CodegenException; import jadx.core.utils.exceptions.CodegenException;
import jadx.core.utils.exceptions.JadxRuntimeException; import jadx.core.utils.exceptions.JadxRuntimeException;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.Queue;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class ConditionGen extends InsnGen { public class ConditionGen extends InsnGen {
private static final Logger LOG = LoggerFactory.getLogger(ConditionGen.class); private static final Logger LOG = LoggerFactory.getLogger(ConditionGen.class);
...@@ -126,7 +126,7 @@ public class ConditionGen extends InsnGen { ...@@ -126,7 +126,7 @@ public class ConditionGen extends InsnGen {
wrap(code, firstArg); wrap(code, firstArg);
return; return;
} }
LOG.warn(ErrorsCounter.formatErrorMsg(mth, "Unsupported boolean condition " + op.getSymbol())); ErrorsCounter.methodError(mth, "Unsupported boolean condition " + op.getSymbol());
} }
addArg(code, firstArg, isArgWrapNeeded(firstArg)); addArg(code, firstArg, isArgWrapNeeded(firstArg));
...@@ -179,6 +179,9 @@ public class ConditionGen extends InsnGen { ...@@ -179,6 +179,9 @@ public class ConditionGen extends InsnGen {
case DIV: case DIV:
case REM: case REM:
return false; return false;
default:
return true;
} }
} else { } else {
switch (insnType) { switch (insnType) {
...@@ -189,10 +192,10 @@ public class ConditionGen extends InsnGen { ...@@ -189,10 +192,10 @@ public class ConditionGen extends InsnGen {
case CONST: case CONST:
case ARRAY_LENGTH: case ARRAY_LENGTH:
return false; return false;
default: default:
return true; return true;
} }
} }
return true;
} }
} }
...@@ -14,7 +14,7 @@ public class NameMapper { ...@@ -14,7 +14,7 @@ public class NameMapper {
"(" + VALID_JAVA_IDENTIFIER + "\\.)*" + VALID_JAVA_IDENTIFIER); "(" + VALID_JAVA_IDENTIFIER + "\\.)*" + VALID_JAVA_IDENTIFIER);
private static final Set<String> RESERVED_NAMES = new HashSet<>( private static final Set<String> RESERVED_NAMES = new HashSet<>(
Arrays.asList(new String[]{ Arrays.asList(
"abstract", "abstract",
"assert", "assert",
"boolean", "boolean",
...@@ -67,8 +67,8 @@ public class NameMapper { ...@@ -67,8 +67,8 @@ public class NameMapper {
"try", "try",
"void", "void",
"volatile", "volatile",
"while", "while"
}) )
); );
public static boolean isReserved(String str) { public static boolean isReserved(String str) {
...@@ -96,4 +96,7 @@ public class NameMapper { ...@@ -96,4 +96,7 @@ public class NameMapper {
} }
return true; return true;
} }
private NameMapper() {
}
} }
package jadx.core.dex.nodes; package jadx.core.dex.nodes;
import jadx.core.dex.info.ClassInfo;
import jadx.core.dex.info.FieldInfo;
import jadx.core.dex.info.MethodInfo;
import jadx.core.dex.instructions.args.ArgType;
import jadx.core.utils.exceptions.DecodeException;
import jadx.core.utils.files.DexFile;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collections; import java.util.Collections;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import com.android.dex.ClassData; import com.android.dex.ClassData;
import com.android.dex.ClassData.Method; import com.android.dex.ClassData.Method;
import com.android.dex.ClassDef; import com.android.dex.ClassDef;
...@@ -26,6 +16,14 @@ import com.android.dex.FieldId; ...@@ -26,6 +16,14 @@ import com.android.dex.FieldId;
import com.android.dex.MethodId; import com.android.dex.MethodId;
import com.android.dex.ProtoId; import com.android.dex.ProtoId;
import com.android.dex.TypeList; import com.android.dex.TypeList;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import jadx.core.dex.info.ClassInfo;
import jadx.core.dex.info.FieldInfo;
import jadx.core.dex.info.MethodInfo;
import jadx.core.dex.instructions.args.ArgType;
import jadx.core.utils.files.DexFile;
public class DexNode implements IDexNode { public class DexNode implements IDexNode {
......
...@@ -17,7 +17,7 @@ public class DepthTraversal { ...@@ -17,7 +17,7 @@ public class DepthTraversal {
visit(visitor, mth); visit(visitor, mth);
} }
} }
} catch (Throwable e) { } catch (Exception e) {
ErrorsCounter.classError(cls, ErrorsCounter.classError(cls,
e.getClass().getSimpleName() + " in pass: " + visitor.getClass().getSimpleName(), e); e.getClass().getSimpleName() + " in pass: " + visitor.getClass().getSimpleName(), e);
} }
...@@ -29,7 +29,7 @@ public class DepthTraversal { ...@@ -29,7 +29,7 @@ public class DepthTraversal {
} }
try { try {
visitor.visit(mth); visitor.visit(mth);
} catch (Throwable e) { } catch (Exception e) {
ErrorsCounter.methodError(mth, ErrorsCounter.methodError(mth,
e.getClass().getSimpleName() + " in pass: " + visitor.getClass().getSimpleName(), e); e.getClass().getSimpleName() + " in pass: " + visitor.getClass().getSimpleName(), e);
} }
......
...@@ -6,6 +6,7 @@ import java.util.HashSet; ...@@ -6,6 +6,7 @@ import java.util.HashSet;
import java.util.List; import java.util.List;
import java.util.Set; import java.util.Set;
import org.jetbrains.annotations.Nullable;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
...@@ -26,12 +27,12 @@ public class ErrorsCounter { ...@@ -26,12 +27,12 @@ public class ErrorsCounter {
return errorsCount; return errorsCount;
} }
private void addError(IAttributeNode node, String msg, Throwable e) { private synchronized void addError(IAttributeNode node, String msg, @Nullable Throwable e) {
errorNodes.add(node); errorNodes.add(node);
errorsCount++; errorsCount++;
if (e != null) { if (e != null) {
if (e.getClass() == JadxOverflowException.class) { if (e instanceof JadxOverflowException) {
// don't print full stack trace // don't print full stack trace
e = new JadxOverflowException(e.getMessage()); e = new JadxOverflowException(e.getMessage());
LOG.error("{}, message: {}", msg, e.getMessage()); LOG.error("{}, message: {}", msg, e.getMessage());
......
...@@ -195,8 +195,8 @@ public class FileUtils { ...@@ -195,8 +195,8 @@ public class FileUtils {
makeDirs(testDir); makeDirs(testDir);
if (caseCheckUpper.createNewFile()) { if (caseCheckUpper.createNewFile()) {
boolean caseSensitive = !caseCheckLow.exists(); boolean caseSensitive = !caseCheckLow.exists();
LOG.debug("Filesystem at {} is {} case-sensitive", testDir.getAbsolutePath(), LOG.debug("Filesystem at {} is {}case-sensitive", testDir.getAbsolutePath(),
(caseSensitive ? "" : "NOT")); (caseSensitive ? "" : "NOT "));
return caseSensitive; return caseSensitive;
} else { } else {
LOG.debug("Failed to create file: {}", caseCheckUpper.getAbsolutePath()); LOG.debug("Failed to create file: {}", caseCheckUpper.getAbsolutePath());
......
...@@ -10,11 +10,17 @@ import jadx.core.dex.instructions.args.LiteralArg; ...@@ -10,11 +10,17 @@ import jadx.core.dex.instructions.args.LiteralArg;
import jadx.core.dex.regions.conditions.Compare; import jadx.core.dex.regions.conditions.Compare;
import jadx.core.dex.regions.conditions.IfCondition; import jadx.core.dex.regions.conditions.IfCondition;
import static jadx.core.dex.instructions.args.LiteralArg.TRUE;
import static jadx.core.dex.regions.conditions.IfCondition.Mode; import static jadx.core.dex.regions.conditions.IfCondition.Mode;
import static jadx.core.dex.regions.conditions.IfCondition.Mode.AND;
import static jadx.core.dex.regions.conditions.IfCondition.Mode.COMPARE;
import static jadx.core.dex.regions.conditions.IfCondition.Mode.NOT;
import static jadx.core.dex.regions.conditions.IfCondition.Mode.OR;
import static jadx.core.dex.regions.conditions.IfCondition.merge; import static jadx.core.dex.regions.conditions.IfCondition.merge;
import static jadx.core.dex.regions.conditions.IfCondition.not; import static jadx.core.dex.regions.conditions.IfCondition.not;
import static jadx.core.dex.regions.conditions.IfCondition.simplify; import static jadx.core.dex.regions.conditions.IfCondition.simplify;
import static org.junit.Assert.assertEquals; import static org.hamcrest.Matchers.is;
import static org.junit.Assert.assertThat;
public class TestIfCondition { public class TestIfCondition {
...@@ -41,10 +47,10 @@ public class TestIfCondition { ...@@ -41,10 +47,10 @@ public class TestIfCondition {
IfCondition c = makeCondition(IfOp.NE, a, LiteralArg.FALSE); IfCondition c = makeCondition(IfOp.NE, a, LiteralArg.FALSE);
IfCondition simp = simplify(c); IfCondition simp = simplify(c);
assertEquals(simp.getMode(), Mode.COMPARE); assertThat(simp.getMode(), is(COMPARE));
Compare compare = simp.getCompare(); Compare compare = simp.getCompare();
assertEquals(compare.getA(), a); assertThat(compare.getA(), is(a));
assertEquals(compare.getB(), LiteralArg.TRUE); assertThat(compare.getB(), is(TRUE));
} }
@Test @Test
...@@ -53,23 +59,23 @@ public class TestIfCondition { ...@@ -53,23 +59,23 @@ public class TestIfCondition {
IfCondition b = makeSimpleCondition(); IfCondition b = makeSimpleCondition();
IfCondition c = merge(Mode.OR, a, b); IfCondition c = merge(Mode.OR, a, b);
assertEquals(c.getMode(), Mode.OR); assertThat(c.getMode(), is(OR));
assertEquals(c.first(), a); assertThat(c.first(), is(a));
assertEquals(c.second(), b); assertThat(c.second(), is(b));
} }
@Test @Test
public void testSimplifyNot() { public void testSimplifyNot() {
// !(!a) => a // !(!a) => a
IfCondition a = not(not(makeSimpleCondition())); IfCondition a = not(not(makeSimpleCondition()));
assertEquals(simplify(a), a); assertThat(simplify(a), is(a));
} }
@Test @Test
public void testSimplifyNot2() { public void testSimplifyNot2() {
// !(!a) => a // !(!a) => a
IfCondition a = not(makeNegCondition()); IfCondition a = not(makeNegCondition());
assertEquals(simplify(a), a); assertThat(simplify(a), is(a));
} }
@Test @Test
...@@ -80,9 +86,9 @@ public class TestIfCondition { ...@@ -80,9 +86,9 @@ public class TestIfCondition {
IfCondition c = not(merge(Mode.OR, not(a), not(b))); IfCondition c = not(merge(Mode.OR, not(a), not(b)));
IfCondition simp = simplify(c); IfCondition simp = simplify(c);
assertEquals(simp.getMode(), Mode.AND); assertThat(simp.getMode(), is(AND));
assertEquals(simp.first(), a); assertThat(simp.first(), is(a));
assertEquals(simp.second(), b); assertThat(simp.second(), is(b));
} }
@Test @Test
...@@ -94,12 +100,12 @@ public class TestIfCondition { ...@@ -94,12 +100,12 @@ public class TestIfCondition {
IfCondition cond = merge(Mode.AND, merge(Mode.OR, not(a), not(b)), not(c)); IfCondition cond = merge(Mode.AND, merge(Mode.OR, not(a), not(b)), not(c));
IfCondition simp = simplify(cond); IfCondition simp = simplify(cond);
assertEquals(simp.getMode(), Mode.NOT); assertThat(simp.getMode(), is(NOT));
IfCondition f = simp.first(); IfCondition f = simp.first();
assertEquals(f.getMode(), Mode.OR); assertThat(f.getMode(), is(OR));
assertEquals(f.first().getMode(), Mode.AND); assertThat(f.first().getMode(), is(AND));
assertEquals(f.first().first(), a); assertThat(f.first().first(), is(a));
assertEquals(f.first().second(), b); assertThat(f.first().second(), is(b));
assertEquals(f.second(), c); assertThat(f.second(), is(c));
} }
} }
...@@ -12,7 +12,8 @@ import jadx.core.dex.nodes.MethodNode; ...@@ -12,7 +12,8 @@ import jadx.core.dex.nodes.MethodNode;
import jadx.tests.api.IntegrationTest; import jadx.tests.api.IntegrationTest;
import static org.hamcrest.CoreMatchers.containsString; import static org.hamcrest.CoreMatchers.containsString;
import static org.junit.Assert.assertEquals; import static org.hamcrest.Matchers.hasSize;
import static org.hamcrest.Matchers.is;
import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertThat; import static org.junit.Assert.assertThat;
import static org.junit.Assert.assertTrue; import static org.junit.Assert.assertTrue;
...@@ -39,12 +40,12 @@ public class TestDuplicateCast extends IntegrationTest { ...@@ -39,12 +40,12 @@ public class TestDuplicateCast extends IntegrationTest {
assertThat(code, containsString("return (int[]) o;")); assertThat(code, containsString("return (int[]) o;"));
List<InsnNode> insns = mth.getBasicBlocks().get(1).getInstructions(); List<InsnNode> insns = mth.getBasicBlocks().get(1).getInstructions();
assertEquals(insns.size(), 1); assertThat(insns, hasSize(1));
InsnNode insnNode = insns.get(0); InsnNode insnNode = insns.get(0);
assertEquals(InsnType.RETURN, insnNode.getType()); assertThat(insnNode.getType(), is(InsnType.RETURN));
assertTrue(insnNode.getArg(0).isInsnWrap()); assertTrue(insnNode.getArg(0).isInsnWrap());
InsnNode wrapInsn = ((InsnWrapArg) insnNode.getArg(0)).getWrapInsn(); InsnNode wrapInsn = ((InsnWrapArg) insnNode.getArg(0)).getWrapInsn();
assertEquals(InsnType.CHECK_CAST, wrapInsn.getType()); assertThat(wrapInsn.getType(), is(InsnType.CHECK_CAST));
assertFalse(wrapInsn.getArg(0).isInsnWrap()); assertFalse(wrapInsn.getArg(0).isInsnWrap());
} }
} }
package jadx.gui.jobs; package jadx.gui.jobs;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutorService; import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors; import java.util.concurrent.Executors;
import java.util.concurrent.Future; import java.util.concurrent.Future;
...@@ -39,13 +38,10 @@ public abstract class BackgroundJob { ...@@ -39,13 +38,10 @@ public abstract class BackgroundJob {
private class ShutdownTask extends FutureTask<Boolean> { private class ShutdownTask extends FutureTask<Boolean> {
public ShutdownTask() { public ShutdownTask() {
super(new Callable<Boolean>() { super(() -> {
@Override
public Boolean call() throws Exception {
runJob(); runJob();
executor.shutdown(); executor.shutdown();
return executor.awaitTermination(5, TimeUnit.MINUTES); return executor.awaitTermination(1, TimeUnit.HOURS);
}
}); });
} }
......
...@@ -12,8 +12,10 @@ import java.awt.event.MouseAdapter; ...@@ -12,8 +12,10 @@ import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent; import java.awt.event.MouseEvent;
import java.awt.event.WindowAdapter; import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent; import java.awt.event.WindowEvent;
import java.util.*; import java.util.ArrayList;
import java.util.List; import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
import org.fife.ui.rsyntaxtextarea.RSyntaxTextArea; import org.fife.ui.rsyntaxtextarea.RSyntaxTextArea;
import org.fife.ui.rsyntaxtextarea.SyntaxConstants; import org.fife.ui.rsyntaxtextarea.SyntaxConstants;
...@@ -143,7 +145,7 @@ public abstract class CommonSearchDialog extends JDialog { ...@@ -143,7 +145,7 @@ public abstract class CommonSearchDialog extends JDialog {
protected JPanel initResultsTable() { protected JPanel initResultsTable() {
ResultsTableCellRenderer renderer = new ResultsTableCellRenderer(); ResultsTableCellRenderer renderer = new ResultsTableCellRenderer();
resultsModel = new ResultsModel(renderer); resultsModel = new ResultsModel(renderer);
resultsModel.addTableModelListener((e) -> updateProgressLabel()); resultsModel.addTableModelListener(e -> updateProgressLabel());
resultsTable = new ResultsTable(resultsModel); resultsTable = new ResultsTable(resultsModel);
resultsTable.setShowHorizontalLines(false); resultsTable.setShowHorizontalLines(false);
resultsTable.setDragEnabled(false); resultsTable.setDragEnabled(false);
...@@ -183,24 +185,24 @@ public abstract class CommonSearchDialog extends JDialog { ...@@ -183,24 +185,24 @@ public abstract class CommonSearchDialog extends JDialog {
ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED)); ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED));
JPanel paginationPanel = new JPanel(); JPanel paginationPanel = new JPanel();
paginationPanel.setAlignmentX( Component.LEFT_ALIGNMENT ); paginationPanel.setAlignmentX(Component.LEFT_ALIGNMENT);
paginationPanel.setLayout(new BoxLayout(paginationPanel, BoxLayout.X_AXIS)); paginationPanel.setLayout(new BoxLayout(paginationPanel, BoxLayout.X_AXIS));
resultsInfoLabel = new JLabel(""); resultsInfoLabel = new JLabel("");
JButton nextPageButton = new JButton("->"); JButton nextPageButton = new JButton("->");
nextPageButton.setToolTipText(NLS.str("search_dialog.next_page")); nextPageButton.setToolTipText(NLS.str("search_dialog.next_page"));
nextPageButton.addActionListener((e) -> { nextPageButton.addActionListener(e -> {
resultsModel.nextPage(); resultsModel.nextPage();
resultsTable.updateTable(); resultsTable.updateTable();
resultsTable.scrollRectToVisible(new Rectangle(0,0,1,1)); resultsTable.scrollRectToVisible(new Rectangle(0, 0, 1, 1));
}); });
JButton prevPageButton = new JButton("<-"); JButton prevPageButton = new JButton("<-");
prevPageButton.setToolTipText(NLS.str("search_dialog.prev_page")); prevPageButton.setToolTipText(NLS.str("search_dialog.prev_page"));
prevPageButton.addActionListener((e) -> { prevPageButton.addActionListener(e -> {
resultsModel.prevPage(); resultsModel.prevPage();
resultsTable.updateTable(); resultsTable.updateTable();
resultsTable.scrollRectToVisible(new Rectangle(0,0,1,1)); resultsTable.scrollRectToVisible(new Rectangle(0, 0, 1, 1));
}); });
paginationPanel.add(prevPageButton); paginationPanel.add(prevPageButton);
...@@ -309,8 +311,9 @@ public abstract class CommonSearchDialog extends JDialog { ...@@ -309,8 +311,9 @@ public abstract class CommonSearchDialog extends JDialog {
} }
public int getDisplayedResultsStart() { public int getDisplayedResultsStart() {
if (rows.size() == 0) if (rows.isEmpty()) {
return 0; return 0;
}
return start + 1; return start + 1;
} }
......
...@@ -27,8 +27,6 @@ import java.util.Arrays; ...@@ -27,8 +27,6 @@ import java.util.Arrays;
import java.util.EnumSet; import java.util.EnumSet;
import java.util.Timer; import java.util.Timer;
import java.util.TimerTask; import java.util.TimerTask;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
...@@ -501,12 +499,7 @@ public class MainWindow extends JFrame { ...@@ -501,12 +499,7 @@ public class MainWindow extends JFrame {
flatPkgButton = new JToggleButton(ICON_FLAT_PKG); flatPkgButton = new JToggleButton(ICON_FLAT_PKG);
flatPkgButton.setSelected(isFlattenPackage); flatPkgButton.setSelected(isFlattenPackage);
ActionListener flatPkgAction = new ActionListener() { ActionListener flatPkgAction = e -> toggleFlattenPackage();
@Override
public void actionPerformed(ActionEvent e) {
toggleFlattenPackage();
}
};
flatPkgMenuItem.addActionListener(flatPkgAction); flatPkgMenuItem.addActionListener(flatPkgAction);
flatPkgButton.addActionListener(flatPkgAction); flatPkgButton.addActionListener(flatPkgAction);
flatPkgButton.setToolTipText(NLS.str("menu.flatten")); flatPkgButton.setToolTipText(NLS.str("menu.flatten"));
...@@ -660,7 +653,7 @@ public class MainWindow extends JFrame { ...@@ -660,7 +653,7 @@ public class MainWindow extends JFrame {
} }
@Override @Override
public void menuSelected(MenuEvent e) { public void menuSelected(MenuEvent menuEvent) {
recentFiles.removeAll(); recentFiles.removeAll();
File openFile = wrapper.getOpenFile(); File openFile = wrapper.getOpenFile();
String currentFile = openFile == null ? "" : openFile.getAbsolutePath(); String currentFile = openFile == null ? "" : openFile.getAbsolutePath();
...@@ -670,12 +663,7 @@ public class MainWindow extends JFrame { ...@@ -670,12 +663,7 @@ public class MainWindow extends JFrame {
} }
JMenuItem menuItem = new JMenuItem(file); JMenuItem menuItem = new JMenuItem(file);
recentFiles.add(menuItem); recentFiles.add(menuItem);
menuItem.addActionListener(new ActionListener() { menuItem.addActionListener(e -> openFile(new File(file)));
@Override
public void actionPerformed(ActionEvent e) {
openFile(new File(file));
}
});
} }
if (recentFiles.getItemCount() == 0) { if (recentFiles.getItemCount() == 0) {
recentFiles.add(new JMenuItem(NLS.str("menu.no_recent_files"))); recentFiles.add(new JMenuItem(NLS.str("menu.no_recent_files")));
......
...@@ -6,11 +6,8 @@ import javax.swing.event.DocumentListener; ...@@ -6,11 +6,8 @@ import javax.swing.event.DocumentListener;
import java.awt.*; import java.awt.*;
import java.awt.event.ActionEvent; import java.awt.event.ActionEvent;
import java.awt.event.ActionListener; import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.awt.event.KeyAdapter; import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent; import java.awt.event.KeyEvent;
import java.util.EnumSet;
import java.util.Set; import java.util.Set;
import jadx.gui.utils.NLS; import jadx.gui.utils.NLS;
...@@ -28,7 +25,7 @@ public class SearchDialog extends CommonSearchDialog { ...@@ -28,7 +25,7 @@ public class SearchDialog extends CommonSearchDialog {
CODE CODE
} }
private Set<SearchOptions> options = EnumSet.allOf(SearchOptions.class); private Set<SearchOptions> options;
private JTextField searchField; private JTextField searchField;
private JCheckBox caseChBox; private JCheckBox caseChBox;
...@@ -87,7 +84,6 @@ public class SearchDialog extends CommonSearchDialog { ...@@ -87,7 +84,6 @@ public class SearchDialog extends CommonSearchDialog {
} }
private class SearchFieldListener implements DocumentListener, ActionListener { private class SearchFieldListener implements DocumentListener, ActionListener {
private Timer timer; private Timer timer;
private synchronized void change() { private synchronized void change() {
...@@ -126,11 +122,7 @@ public class SearchDialog extends CommonSearchDialog { ...@@ -126,11 +122,7 @@ public class SearchDialog extends CommonSearchDialog {
new TextStandardActions(searchField); new TextStandardActions(searchField);
caseChBox = new JCheckBox(NLS.str("search_dialog.ignorecase")); caseChBox = new JCheckBox(NLS.str("search_dialog.ignorecase"));
caseChBox.addItemListener(new ItemListener() { caseChBox.addItemListener(e -> performSearch());
public void itemStateChanged(ItemEvent e) {
performSearch();
}
});
JCheckBox clsChBox = makeOptionsCheckBox(NLS.str("search_dialog.class"), SearchOptions.CLASS); JCheckBox clsChBox = makeOptionsCheckBox(NLS.str("search_dialog.class"), SearchOptions.CLASS);
JCheckBox mthChBox = makeOptionsCheckBox(NLS.str("search_dialog.method"), SearchOptions.METHOD); JCheckBox mthChBox = makeOptionsCheckBox(NLS.str("search_dialog.method"), SearchOptions.METHOD);
...@@ -196,15 +188,13 @@ public class SearchDialog extends CommonSearchDialog { ...@@ -196,15 +188,13 @@ public class SearchDialog extends CommonSearchDialog {
final JCheckBox chBox = new JCheckBox(name); final JCheckBox chBox = new JCheckBox(name);
chBox.setAlignmentX(LEFT_ALIGNMENT); chBox.setAlignmentX(LEFT_ALIGNMENT);
chBox.setSelected(options.contains(opt)); chBox.setSelected(options.contains(opt));
chBox.addItemListener(new ItemListener() { chBox.addItemListener(e -> {
public void itemStateChanged(ItemEvent e) {
if (chBox.isSelected()) { if (chBox.isSelected()) {
options.add(opt); options.add(opt);
} else { } else {
options.remove(opt); options.remove(opt);
} }
performSearch(); performSearch();
}
}); });
return chBox; return chBox;
} }
......
...@@ -7,7 +7,7 @@ import java.util.List; ...@@ -7,7 +7,7 @@ import java.util.List;
public class CodeIndex<T> implements SearchIndex<T> { public class CodeIndex<T> implements SearchIndex<T> {
private final List<StringRef> keys = new ArrayList<>(); private final List<StringRef> keys = new ArrayList<>();
private final List<T> values = new ArrayList<T>(); private final List<T> values = new ArrayList<>();
@Override @Override
public void put(String str, T value) { public void put(String str, T value) {
......
...@@ -7,7 +7,7 @@ import java.util.List; ...@@ -7,7 +7,7 @@ import java.util.List;
public class SimpleIndex<T> implements SearchIndex<T> { public class SimpleIndex<T> implements SearchIndex<T> {
private final List<String> keys = new ArrayList<>(); private final List<String> keys = new ArrayList<>();
private final List<T> values = new ArrayList<T>(); private final List<T> values = new ArrayList<>();
@Override @Override
public void put(String str, T value) { public void put(String str, T value) {
......
package jadx.gui.utils.search; package jadx.gui.utils.search;
import static jadx.gui.utils.Utils.caseChar;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.List;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import static jadx.gui.utils.Utils.caseChar;
public class StringRef implements CharSequence { public class StringRef implements CharSequence {
private final String refStr; private final String refStr;
...@@ -187,5 +188,4 @@ public class StringRef implements CharSequence { ...@@ -187,5 +188,4 @@ public class StringRef implements CharSequence {
int offset = this.offset; int offset = this.offset;
return refStr.substring(offset, offset + len); return refStr.substring(offset, offset + len);
} }
} }
package jadx.gui.treemodel; package jadx.gui.treemodel;
import java.util.Arrays; import java.util.Collections;
import java.util.List; import java.util.List;
import org.junit.Before; import org.junit.Before;
...@@ -12,10 +12,12 @@ import jadx.api.JadxDecompiler; ...@@ -12,10 +12,12 @@ import jadx.api.JadxDecompiler;
import jadx.api.JavaClass; import jadx.api.JavaClass;
import jadx.api.JavaPackage; import jadx.api.JavaPackage;
import jadx.core.dex.nodes.ClassNode; import jadx.core.dex.nodes.ClassNode;
import jadx.core.utils.exceptions.JadxException;
import jadx.gui.JadxWrapper; import jadx.gui.JadxWrapper;
import static org.junit.Assert.assertEquals; import static java.util.Arrays.asList;
import static org.hamcrest.Matchers.hasSize;
import static org.hamcrest.Matchers.is;
import static org.junit.Assert.assertThat;
import static org.mockito.Mockito.mock; import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when; import static org.mockito.Mockito.when;
...@@ -25,7 +27,7 @@ public class JSourcesTest { ...@@ -25,7 +27,7 @@ public class JSourcesTest {
private JadxDecompiler decompiler; private JadxDecompiler decompiler;
@Before @Before
public void init() throws JadxException { public void init() {
JRoot root = mock(JRoot.class); JRoot root = mock(JRoot.class);
when(root.isFlatPackages()).thenReturn(false); when(root.isFlatPackages()).thenReturn(false);
JadxWrapper wrapper = mock(JadxWrapper.class); JadxWrapper wrapper = mock(JadxWrapper.class);
...@@ -37,50 +39,50 @@ public class JSourcesTest { ...@@ -37,50 +39,50 @@ public class JSourcesTest {
public void testHierarchyPackages() { public void testHierarchyPackages() {
String pkgName = "a.b.c.d.e"; String pkgName = "a.b.c.d.e";
List<JavaPackage> packages = Arrays.asList(newPkg(pkgName)); List<JavaPackage> packages = Collections.singletonList(newPkg(pkgName));
List<JPackage> out = sources.getHierarchyPackages(packages); List<JPackage> out = sources.getHierarchyPackages(packages);
assertEquals(out.size(), 1); assertThat(out, hasSize(1));
JPackage jpkg = out.get(0); JPackage jPkg = out.get(0);
assertEquals(jpkg.getName(), pkgName); assertThat(jPkg.getName(), is(pkgName));
assertEquals(jpkg.getClasses().size(), 1); assertThat(jPkg.getClasses(), hasSize(1));
} }
@Test @Test
public void testHierarchyPackages2() { public void testHierarchyPackages2() {
List<JavaPackage> packages = Arrays.asList( List<JavaPackage> packages = asList(
newPkg("a.b"), newPkg("a.b"),
newPkg("a.c"), newPkg("a.c"),
newPkg("a.d") newPkg("a.d")
); );
List<JPackage> out = sources.getHierarchyPackages(packages); List<JPackage> out = sources.getHierarchyPackages(packages);
assertEquals(out.size(), 1); assertThat(out, hasSize(1));
JPackage jpkg = out.get(0); JPackage jPkg = out.get(0);
assertEquals(jpkg.getName(), "a"); assertThat(jPkg.getName(), is("a"));
assertEquals(jpkg.getClasses().size(), 0); assertThat(jPkg.getClasses(), hasSize(0));
assertEquals(jpkg.getInnerPackages().size(), 3); assertThat(jPkg.getInnerPackages(), hasSize(3));
} }
@Test @Test
public void testHierarchyPackages3() { public void testHierarchyPackages3() {
List<JavaPackage> packages = Arrays.asList( List<JavaPackage> packages = asList(
newPkg("a.b.p1"), newPkg("a.b.p1"),
newPkg("a.b.p2"), newPkg("a.b.p2"),
newPkg("a.b.p3") newPkg("a.b.p3")
); );
List<JPackage> out = sources.getHierarchyPackages(packages); List<JPackage> out = sources.getHierarchyPackages(packages);
assertEquals(out.size(), 1); assertThat(out, hasSize(1));
JPackage jpkg = out.get(0); JPackage jPkg = out.get(0);
assertEquals(jpkg.getName(), "a.b"); assertThat(jPkg.getName(), is("a.b"));
assertEquals(jpkg.getClasses().size(), 0); assertThat(jPkg.getClasses(), hasSize(0));
assertEquals(jpkg.getInnerPackages().size(), 3); assertThat(jPkg.getInnerPackages(), hasSize(3));
} }
@Test @Test
public void testHierarchyPackages4() { public void testHierarchyPackages4() {
List<JavaPackage> packages = Arrays.asList( List<JavaPackage> packages = asList(
newPkg("a.p1"), newPkg("a.p1"),
newPkg("a.b.c.p2"), newPkg("a.b.c.p2"),
newPkg("a.b.c.p3"), newPkg("a.b.c.p3"),
...@@ -89,19 +91,18 @@ public class JSourcesTest { ...@@ -89,19 +91,18 @@ public class JSourcesTest {
); );
List<JPackage> out = sources.getHierarchyPackages(packages); List<JPackage> out = sources.getHierarchyPackages(packages);
assertEquals(out.size(), 2); assertThat(out, hasSize(2));
assertEquals(out.get(0).getName(), "a"); assertThat(out.get(0).getName(), is("a"));
assertEquals(out.get(0).getInnerPackages().size(), 2); assertThat(out.get(0).getInnerPackages(), hasSize(2));
assertEquals(out.get(1).getName(), "d"); assertThat(out.get(1).getName(), is("d"));
assertEquals(out.get(1).getInnerPackages().size(), 2); assertThat(out.get(1).getInnerPackages(), hasSize(2));
} }
private JavaPackage newPkg(String name) { private JavaPackage newPkg(String name) {
return Factory.newPackage(name, Arrays.asList(newClass())); return Factory.newPackage(name, Collections.singletonList(newClass()));
} }
private JavaClass newClass() { private JavaClass newClass() {
return Factory.newClass(decompiler, mock(ClassNode.class)); return Factory.newClass(decompiler, mock(ClassNode.class));
} }
} }
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册