diff --git a/CHANGELOG.md b/CHANGELOG.md index 4604a63..c0d239a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,7 @@ ### Changed - Updated dependencies +- Load translations even if ui tool window is not opened ### Fixed - NullPointerException's on translation annotation / completion inside editor diff --git a/src/main/java/de/marhali/easyi18n/TranslatorToolWindowFactory.java b/src/main/java/de/marhali/easyi18n/TranslatorToolWindowFactory.java index 38efd01..9a2ed43 100644 --- a/src/main/java/de/marhali/easyi18n/TranslatorToolWindowFactory.java +++ b/src/main/java/de/marhali/easyi18n/TranslatorToolWindowFactory.java @@ -54,11 +54,9 @@ public class TranslatorToolWindowFactory implements ToolWindowFactory { // Initialize Window Manager WindowManager.getInstance().initialize(toolWindow, treeView, tableView); - // Initialize data store and load from disk + // Synchronize ui with underlying data DataStore store = DataStore.getInstance(project); store.addSynchronizer(treeView); store.addSynchronizer(tableView); - - store.reloadFromDisk(); } } \ No newline at end of file diff --git a/src/main/java/de/marhali/easyi18n/model/Translations.java b/src/main/java/de/marhali/easyi18n/model/Translations.java index 0d84dd5..44bd03f 100644 --- a/src/main/java/de/marhali/easyi18n/model/Translations.java +++ b/src/main/java/de/marhali/easyi18n/model/Translations.java @@ -14,6 +14,10 @@ import java.util.List; */ public class Translations { + public static Translations empty() { + return new Translations(new ArrayList<>(), new LocalizedNode(LocalizedNode.ROOT_KEY, new ArrayList<>())); + } + @NotNull private final List locales; @@ -34,7 +38,7 @@ public class Translations { return locales; } - public LocalizedNode getNodes() { + public @NotNull LocalizedNode getNodes() { return nodes; } diff --git a/src/main/java/de/marhali/easyi18n/service/DataStore.java b/src/main/java/de/marhali/easyi18n/service/DataStore.java index 3fd77b8..93331ce 100644 --- a/src/main/java/de/marhali/easyi18n/service/DataStore.java +++ b/src/main/java/de/marhali/easyi18n/service/DataStore.java @@ -1,5 +1,7 @@ package de.marhali.easyi18n.service; +import com.intellij.openapi.application.ApplicationManager; +import com.intellij.openapi.application.ModalityState; import com.intellij.openapi.project.Project; import de.marhali.easyi18n.model.LocalizedNode; @@ -40,8 +42,10 @@ public class DataStore { private DataStore(@NotNull Project project) { this.project = project; this.synchronizer = new ArrayList<>(); + this.translations = Translations.empty(); - reloadFromDisk(); + // Load data after first initialization + ApplicationManager.getApplication().invokeLater(this::reloadFromDisk, ModalityState.NON_MODAL); } /** @@ -59,10 +63,8 @@ public class DataStore { String localesPath = SettingsService.getInstance(project).getState().getLocalesPath(); if(localesPath == null || localesPath.isEmpty()) { - translations = new Translations(new ArrayList<>(), - new LocalizedNode(LocalizedNode.ROOT_KEY, new ArrayList<>())); - - // Propagate changes + // Propagate empty state + translations = Translations.empty(); synchronizer.forEach(synchronizer -> synchronizer.synchronize(translations, searchQuery, null)); } else { @@ -78,8 +80,7 @@ public class DataStore { } else { // If state cannot be loaded from disk, show empty instance - this.translations = new Translations(new ArrayList<>(), - new LocalizedNode(LocalizedNode.ROOT_KEY, new ArrayList<>())); + this.translations = Translations.empty(); // Propagate changes synchronizer.forEach(synchronizer -> @@ -87,6 +88,8 @@ public class DataStore { } }); } + + System.out.println("reloadFromDisk()"); } /**