From f44c7697cb9ef37901abb6b9cae498a4a0797d70 Mon Sep 17 00:00:00 2001 From: Jan Peter Stotz Date: Sat, 23 Apr 2022 13:40:15 +0200 Subject: [PATCH 1/3] fix(gui): NullPointerException on project save --- jadx-gui/src/main/java/jadx/gui/ui/MainWindow.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/jadx-gui/src/main/java/jadx/gui/ui/MainWindow.java b/jadx-gui/src/main/java/jadx/gui/ui/MainWindow.java index 02f48f66bb0..d6ed38f0d2c 100644 --- a/jadx-gui/src/main/java/jadx/gui/ui/MainWindow.java +++ b/jadx-gui/src/main/java/jadx/gui/ui/MainWindow.java @@ -367,7 +367,7 @@ private void saveProjectAs() { if (currentDirectory != null) { fileChooser.setCurrentDirectory(currentDirectory.toFile()); } - if (this.project.getFilePaths().size() == 1) { + if (this.project != null && this.project.getFilePaths() != null && this.project.getFilePaths().size() == 1) { // If there is only one file loaded we suggest saving the jadx project file next to the loaded file Path loadedFile = this.project.getFilePaths().get(0); String fileName = loadedFile.getFileName() + "." + JadxProject.PROJECT_EXTENSION; From 4f02ba0c9592052c92d2d4f33be44effca67dda4 Mon Sep 17 00:00:00 2001 From: Jan Peter Stotz Date: Sat, 23 Apr 2022 14:07:34 +0200 Subject: [PATCH 2/3] chore(gui): ensure MainWindow.project is never null --- jadx-gui/src/main/java/jadx/gui/ui/MainWindow.java | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/jadx-gui/src/main/java/jadx/gui/ui/MainWindow.java b/jadx-gui/src/main/java/jadx/gui/ui/MainWindow.java index d6ed38f0d2c..f4d783e44c5 100644 --- a/jadx-gui/src/main/java/jadx/gui/ui/MainWindow.java +++ b/jadx-gui/src/main/java/jadx/gui/ui/MainWindow.java @@ -76,6 +76,7 @@ import javax.swing.tree.TreeSelectionModel; import org.fife.ui.rsyntaxtextarea.Theme; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -178,7 +179,8 @@ public class MainWindow extends JFrame { private final transient JadxSettings settings; private final transient CacheObject cacheObject; private final transient BackgroundExecutor backgroundExecutor; - private transient JadxProject project; + @NotNull + private transient JadxProject project = new JadxProject(); private transient Action newProjectAction; private transient Action saveProjectAction; @@ -367,7 +369,7 @@ private void saveProjectAs() { if (currentDirectory != null) { fileChooser.setCurrentDirectory(currentDirectory.toFile()); } - if (this.project != null && this.project.getFilePaths() != null && this.project.getFilePaths().size() == 1) { + if (this.project.getFilePaths() != null && this.project.getFilePaths().size() == 1) { // If there is only one file loaded we suggest saving the jadx project file next to the loaded file Path loadedFile = this.project.getFilePaths().get(0); String fileName = loadedFile.getFileName() + "." + JadxProject.PROJECT_EXTENSION; @@ -516,7 +518,7 @@ private List openProject(Path path) { return jadxProject.getFilePaths(); } - public void updateProject(JadxProject jadxProject) { + public void updateProject(@NotNull JadxProject jadxProject) { jadxProject.setSettings(settings); jadxProject.setMainWindow(this); this.project = jadxProject; From 7d072a9872c929ed432ed80c88ee32483d760d64 Mon Sep 17 00:00:00 2001 From: Skylot Date: Sat, 23 Apr 2022 17:35:23 +0100 Subject: [PATCH 3/3] ensure `files` in `ProjectData` in not null --- .../src/main/java/jadx/gui/settings/data/ProjectData.java | 5 +++-- jadx-gui/src/main/java/jadx/gui/ui/MainWindow.java | 2 +- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/jadx-gui/src/main/java/jadx/gui/settings/data/ProjectData.java b/jadx-gui/src/main/java/jadx/gui/settings/data/ProjectData.java index cc84ff23865..ae61884dc40 100644 --- a/jadx-gui/src/main/java/jadx/gui/settings/data/ProjectData.java +++ b/jadx-gui/src/main/java/jadx/gui/settings/data/ProjectData.java @@ -4,13 +4,14 @@ import java.util.ArrayList; import java.util.Collections; import java.util.List; +import java.util.Objects; import jadx.api.data.impl.JadxCodeData; public class ProjectData { private int projectVersion = 1; - private List files; + private List files = new ArrayList<>(); private List treeExpansions = new ArrayList<>(); private JadxCodeData codeData = new JadxCodeData(); private List openTabs = Collections.emptyList(); @@ -21,7 +22,7 @@ public List getFiles() { } public void setFiles(List files) { - this.files = files; + this.files = Objects.requireNonNull(files); } public List getTreeExpansions() { diff --git a/jadx-gui/src/main/java/jadx/gui/ui/MainWindow.java b/jadx-gui/src/main/java/jadx/gui/ui/MainWindow.java index f4d783e44c5..fa12bcece9c 100644 --- a/jadx-gui/src/main/java/jadx/gui/ui/MainWindow.java +++ b/jadx-gui/src/main/java/jadx/gui/ui/MainWindow.java @@ -369,7 +369,7 @@ private void saveProjectAs() { if (currentDirectory != null) { fileChooser.setCurrentDirectory(currentDirectory.toFile()); } - if (this.project.getFilePaths() != null && this.project.getFilePaths().size() == 1) { + if (this.project.getFilePaths().size() == 1) { // If there is only one file loaded we suggest saving the jadx project file next to the loaded file Path loadedFile = this.project.getFilePaths().get(0); String fileName = loadedFile.getFileName() + "." + JadxProject.PROJECT_EXTENSION;