From cf918a897ff7295d93098b7202240d836e759298 Mon Sep 17 00:00:00 2001 From: Skylot Date: Fri, 12 Nov 2021 18:01:52 +0000 Subject: [PATCH] fix(gui): collect FlatLaf themes without reflection --- jadx-gui/build.gradle | 1 - .../java/jadx/gui/settings/JadxSettings.java | 18 ++++++-- .../gui/settings/JadxSettingsAdapter.java | 1 + .../main/java/jadx/gui/utils/LafManager.java | 46 +++++++------------ 4 files changed, 33 insertions(+), 33 deletions(-) diff --git a/jadx-gui/build.gradle b/jadx-gui/build.gradle index 0282d703c..aca5ad536 100644 --- a/jadx-gui/build.gradle +++ b/jadx-gui/build.gradle @@ -19,7 +19,6 @@ dependencies { implementation 'com.formdev:flatlaf-intellij-themes:1.6.1' implementation 'com.formdev:flatlaf-extras:1.6.1' implementation 'com.formdev:svgSalamander:1.1.2.4' - implementation 'org.reflections:reflections:0.10.2' implementation 'com.google.code.gson:gson:2.8.9' implementation 'org.apache.commons:commons-lang3:3.12.0' diff --git a/jadx-gui/src/main/java/jadx/gui/settings/JadxSettings.java b/jadx-gui/src/main/java/jadx/gui/settings/JadxSettings.java index ca773e57c..dde3436ee 100644 --- a/jadx-gui/src/main/java/jadx/gui/settings/JadxSettings.java +++ b/jadx-gui/src/main/java/jadx/gui/settings/JadxSettings.java @@ -43,7 +43,7 @@ public class JadxSettings extends JadxCLIArgs { private static final Path USER_HOME = Paths.get(System.getProperty("user.home")); private static final int RECENT_PROJECTS_COUNT = 15; - private static final int CURRENT_SETTINGS_VERSION = 13; + private static final int CURRENT_SETTINGS_VERSION = 14; private static final Font DEFAULT_FONT = new RSyntaxTextArea().getFont(); @@ -62,10 +62,10 @@ public class JadxSettings extends JadxCLIArgs { private String fontStr = ""; private String smaliFontStr = ""; private String editorThemePath = ""; - private String lafTheme = LafManager.SYSTEM_THEME_NAME; + private String lafTheme = LafManager.INITIAL_THEME_NAME; private LangLocale langLocale = NLS.defaultLocale(); private boolean autoStartJobs = false; - protected String excludedPackages = ""; + private String excludedPackages = ""; private boolean autoSaveProject = false; private boolean showHeapUsageBar = false; @@ -130,6 +130,14 @@ public class JadxSettings extends JadxCLIArgs { } } + public int getSettingsVersion() { + return settingsVersion; + } + + public void setSettingsVersion(int settingsVersion) { + this.settingsVersion = settingsVersion; + } + public String getCmdSelectClass() { return cmdSelectClass; } @@ -635,6 +643,10 @@ public class JadxSettings extends JadxCLIArgs { alwaysSelectOpened = false; fromVersion++; } + if (fromVersion == 13) { + lafTheme = LafManager.INITIAL_THEME_NAME; + fromVersion++; + } if (fromVersion != CURRENT_SETTINGS_VERSION) { throw new JadxRuntimeException("Incorrect settings upgrade"); } diff --git a/jadx-gui/src/main/java/jadx/gui/settings/JadxSettingsAdapter.java b/jadx-gui/src/main/java/jadx/gui/settings/JadxSettingsAdapter.java index fc4752aaa..e9c0bcb82 100644 --- a/jadx-gui/src/main/java/jadx/gui/settings/JadxSettingsAdapter.java +++ b/jadx-gui/src/main/java/jadx/gui/settings/JadxSettingsAdapter.java @@ -37,6 +37,7 @@ public class JadxSettingsAdapter { return JadxSettings.SKIP_FIELDS.contains(f.getName()) || f.hasModifier(Modifier.PUBLIC) || f.hasModifier(Modifier.TRANSIENT) + || f.hasModifier(Modifier.STATIC) || (f.getAnnotation(GsonExclude.class) != null); } diff --git a/jadx-gui/src/main/java/jadx/gui/utils/LafManager.java b/jadx-gui/src/main/java/jadx/gui/utils/LafManager.java index ad6c84036..cbd763b41 100644 --- a/jadx-gui/src/main/java/jadx/gui/utils/LafManager.java +++ b/jadx-gui/src/main/java/jadx/gui/utils/LafManager.java @@ -1,31 +1,29 @@ package jadx.gui.utils; -import java.util.ArrayList; -import java.util.Comparator; import java.util.LinkedHashMap; -import java.util.List; import java.util.Map; -import java.util.Set; -import javax.swing.LookAndFeel; import javax.swing.UIManager; -import org.reflections.Reflections; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import com.formdev.flatlaf.FlatDarculaLaf; +import com.formdev.flatlaf.FlatDarkLaf; +import com.formdev.flatlaf.FlatIntelliJLaf; import com.formdev.flatlaf.FlatLaf; +import com.formdev.flatlaf.FlatLightLaf; import com.formdev.flatlaf.extras.FlatAnimatedLafChange; +import com.formdev.flatlaf.intellijthemes.FlatAllIJThemes; -import ch.qos.logback.classic.Level; - -import jadx.cli.LogHelper; import jadx.gui.settings.JadxSettings; public class LafManager { private static final Logger LOG = LoggerFactory.getLogger(LafManager.class); public static final String SYSTEM_THEME_NAME = "default"; + public static final String INITIAL_THEME_NAME = FlatLightLaf.NAME; + private static final Map THEMES_MAP = initThemesMap(); public static void init(JadxSettings settings) { @@ -66,30 +64,20 @@ public class LafManager { private static Map initThemesMap() { Map map = new LinkedHashMap<>(); map.put(SYSTEM_THEME_NAME, SYSTEM_THEME_NAME); - for (FlatLaf flatLafTheme : collectFlatLafThemes()) { - map.put(flatLafTheme.getName(), flatLafTheme.getClass().getName()); + + // default flatlaf themes + map.put(FlatLightLaf.NAME, FlatLightLaf.class.getName()); + map.put(FlatDarkLaf.NAME, FlatDarkLaf.class.getName()); + map.put(FlatIntelliJLaf.NAME, FlatIntelliJLaf.class.getName()); + map.put(FlatDarculaLaf.NAME, FlatDarculaLaf.class.getName()); + + // themes from flatlaf-intellij-themes + for (FlatAllIJThemes.FlatIJLookAndFeelInfo themeInfo : FlatAllIJThemes.INFOS) { + map.put(themeInfo.getName(), themeInfo.getClassName()); } return map; } - private static List collectFlatLafThemes() { - LogHelper.setLevelForPackage("org.reflections", Level.WARN); - Reflections reflections = new Reflections("com.formdev.flatlaf"); - Set> lafClasses = reflections.getSubTypesOf(FlatLaf.class); - - List themes = new ArrayList<>(lafClasses.size()); - for (Class lafClass : lafClasses) { - try { - themes.add(lafClass.getDeclaredConstructor().newInstance()); - } catch (Exception e) { - // some classes not themes, ignore them - LOG.trace("Failed make instance for class: {}", lafClass.getName(), e); - } - } - themes.sort(Comparator.comparing(LookAndFeel::getName)); - return themes; - } - private static boolean applyLaf(String theme) { try { FlatAnimatedLafChange.showSnapshot();