refactor: use package nodes in api and ui

This commit is contained in:
Skylot
2022-08-10 13:35:56 +01:00
parent d4927db52b
commit cb1f3e9843
30 changed files with 832 additions and 518 deletions
@@ -1,16 +0,0 @@
package jadx.api;
import java.util.List;
import jadx.core.dex.nodes.ClassNode;
public class Factory {
public static JavaPackage newPackage(String name, List<JavaClass> classes) {
return new JavaPackage(name, classes);
}
public static JavaClass newClass(JadxDecompiler decompiler, ClassNode classNode) {
return new JavaClass(classNode, decompiler);
}
}
@@ -1,105 +0,0 @@
package jadx.gui.treemodel;
import java.util.Collections;
import java.util.List;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import jadx.api.Factory;
import jadx.api.JadxArgs;
import jadx.api.JadxDecompiler;
import jadx.api.JavaClass;
import jadx.api.JavaPackage;
import jadx.core.dex.nodes.ClassNode;
import jadx.gui.JadxWrapper;
import static java.util.Arrays.asList;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.hasSize;
import static org.hamcrest.Matchers.is;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
public class JSourcesTest {
private JSources sources;
private JadxDecompiler decompiler;
@BeforeEach
public void init() {
JRoot root = mock(JRoot.class);
when(root.isFlatPackages()).thenReturn(false);
JadxWrapper wrapper = mock(JadxWrapper.class);
sources = new JSources(root, wrapper);
decompiler = new JadxDecompiler(new JadxArgs());
}
@Test
public void testHierarchyPackages() {
String pkgName = "a.b.c.d.e";
List<JavaPackage> packages = Collections.singletonList(newPkg(pkgName));
List<JPackage> out = sources.getHierarchyPackages(packages);
assertThat(out, hasSize(1));
JPackage jPkg = out.get(0);
assertThat(jPkg.getName(), is(pkgName));
assertThat(jPkg.getClasses(), hasSize(1));
}
@Test
public void testHierarchyPackages2() {
List<JavaPackage> packages = asList(
newPkg("a.b"),
newPkg("a.c"),
newPkg("a.d"));
List<JPackage> out = sources.getHierarchyPackages(packages);
assertThat(out, hasSize(1));
JPackage jPkg = out.get(0);
assertThat(jPkg.getName(), is("a"));
assertThat(jPkg.getClasses(), hasSize(0));
assertThat(jPkg.getInnerPackages(), hasSize(3));
}
@Test
public void testHierarchyPackages3() {
List<JavaPackage> packages = asList(
newPkg("a.b.p1"),
newPkg("a.b.p2"),
newPkg("a.b.p3"));
List<JPackage> out = sources.getHierarchyPackages(packages);
assertThat(out, hasSize(1));
JPackage jPkg = out.get(0);
assertThat(jPkg.getName(), is("a.b"));
assertThat(jPkg.getClasses(), hasSize(0));
assertThat(jPkg.getInnerPackages(), hasSize(3));
}
@Test
public void testHierarchyPackages4() {
List<JavaPackage> packages = asList(
newPkg("a.p1"),
newPkg("a.b.c.p2"),
newPkg("a.b.c.p3"),
newPkg("d.e"),
newPkg("d.f.a"));
List<JPackage> out = sources.getHierarchyPackages(packages);
assertThat(out, hasSize(2));
assertThat(out.get(0).getName(), is("a"));
assertThat(out.get(0).getInnerPackages(), hasSize(2));
assertThat(out.get(1).getName(), is("d"));
assertThat(out.get(1).getInnerPackages(), hasSize(2));
}
private JavaPackage newPkg(String name) {
return Factory.newPackage(name, Collections.singletonList(newClass()));
}
private JavaClass newClass() {
return Factory.newClass(decompiler, mock(ClassNode.class));
}
}
@@ -0,0 +1,34 @@
package jadx.gui.utils.pkgs;
import org.junit.jupiter.api.Test;
import static org.assertj.core.api.Assertions.assertThat;
class TestJRenamePackage {
@Test
void isValidName() {
valid("foo");
valid("foo.bar");
valid("foo.bar.");
invalid("");
invalid("0foo");
invalid(".foo");
invalid("do");
invalid("foo.if");
invalid("foo.if.bar");
}
private void valid(String name) {
assertThat(JRenamePackage.isValidPackageName(name))
.as("expect valid: %s", name)
.isEqualTo(true);
}
private void invalid(String name) {
assertThat(JRenamePackage.isValidPackageName(name))
.as("expect invalid: %s", name)
.isEqualTo(false);
}
}