diff --git a/app/src/processing/app/ui/PreferencesFrame.java b/app/src/processing/app/ui/PreferencesFrame.java index b2075ec93..f475f6bf3 100644 --- a/app/src/processing/app/ui/PreferencesFrame.java +++ b/app/src/processing/app/ui/PreferencesFrame.java @@ -65,7 +65,7 @@ public class PreferencesFrame { ColorChooser selector; -// JCheckBox errorCheckerBox; + JCheckBox errorCheckerBox; JCheckBox warningsCheckerBox; JCheckBox codeCompletionBox; JCheckBox importSuggestionsBox; @@ -270,8 +270,11 @@ public class PreferencesFrame { // [ ] Continuously check for errors - PDE X -// errorCheckerBox = -// new JCheckBox(Language.text("preferences.continuously_check")); + errorCheckerBox = + new JCheckBox(Language.text("preferences.continuously_check")); + errorCheckerBox.addItemListener(e -> { + warningsCheckerBox.setEnabled(errorCheckerBox.isSelected()); + }); // [ ] Show Warnings - PDE X @@ -407,9 +410,9 @@ public class PreferencesFrame { .addComponent(presentColor, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)) .addComponent(editorAntialiasBox) .addComponent(inputMethodBox) -// .addGroup(layout.createSequentialGroup() -// .addComponent(errorCheckerBox) -// .addComponent(warningsCheckerBox)) + .addGroup(layout.createSequentialGroup() + .addComponent(errorCheckerBox) + .addComponent(warningsCheckerBox)) .addComponent(warningsCheckerBox) .addComponent(codeCompletionBox) .addComponent(importSuggestionsBox) @@ -465,10 +468,9 @@ public class PreferencesFrame { .addComponent(presentColor)) .addComponent(editorAntialiasBox) .addComponent(inputMethodBox) -// .addGroup(layout.createParallelGroup() -// .addComponent(errorCheckerBox) -// .addComponent(warningsCheckerBox)) - .addComponent(warningsCheckerBox) + .addGroup(layout.createParallelGroup() + .addComponent(errorCheckerBox) + .addComponent(warningsCheckerBox)) .addComponent(codeCompletionBox) .addComponent(importSuggestionsBox) .addGroup(layout.createParallelGroup(GroupLayout.Alignment.CENTER) @@ -655,7 +657,7 @@ public class PreferencesFrame { autoAssociateBox.isSelected()); } -// Preferences.setBoolean("pdex.errorCheckEnabled", errorCheckerBox.isSelected()); + Preferences.setBoolean("pdex.errorCheckEnabled", errorCheckerBox.isSelected()); Preferences.setBoolean("pdex.warningsEnabled", warningsCheckerBox.isSelected()); Preferences.setBoolean("pdex.completion", codeCompletionBox.isSelected()); // Preferences.setBoolean("pdex.completion.trigger", codeCompletionTriggerBox.isSelected()); @@ -670,8 +672,9 @@ public class PreferencesFrame { public void showFrame() { editorAntialiasBox.setSelected(Preferences.getBoolean("editor.smooth")); //$NON-NLS-1$ inputMethodBox.setSelected(Preferences.getBoolean("editor.input_method_support")); //$NON-NLS-1$ -// errorCheckerBox.setSelected(Preferences.getBoolean("pdex.errorCheckEnabled")); + errorCheckerBox.setSelected(Preferences.getBoolean("pdex.errorCheckEnabled")); warningsCheckerBox.setSelected(Preferences.getBoolean("pdex.warningsEnabled")); + warningsCheckerBox.setEnabled(errorCheckerBox.isSelected()); codeCompletionBox.setSelected(Preferences.getBoolean("pdex.completion")); //codeCompletionTriggerBox.setSelected(Preferences.getBoolean("pdex.completion.trigger")); //codeCompletionTriggerBox.setEnabled(codeCompletionBox.isSelected()); diff --git a/java/src/processing/mode/java/JavaMode.java b/java/src/processing/mode/java/JavaMode.java index 7e3a07ef2..365fa3e6d 100644 --- a/java/src/processing/mode/java/JavaMode.java +++ b/java/src/processing/mode/java/JavaMode.java @@ -306,7 +306,7 @@ public class JavaMode extends Mode { // } -// static public volatile boolean errorCheckEnabled = true; + static public volatile boolean errorCheckEnabled = true; static public volatile boolean warningsEnabled = true; static public volatile boolean codeCompletionsEnabled = true; static public volatile boolean debugOutputEnabled = false; @@ -325,7 +325,7 @@ public class JavaMode extends Mode { */ volatile public static int codeCompletionTriggerLength = 1; -// static public final String prefErrorCheck = "pdex.errorCheckEnabled"; + static public final String prefErrorCheck = "pdex.errorCheckEnabled"; static public final String prefWarnings = "pdex.warningsEnabled"; static public final String prefDebugOP = "pdex.dbgOutput"; static public final String prefErrorLogs = "pdex.writeErrorLogs"; @@ -351,7 +351,7 @@ public class JavaMode extends Mode { public void loadPreferences() { Messages.log("Load PDEX prefs"); ensurePrefsExist(); -// errorCheckEnabled = Preferences.getBoolean(prefErrorCheck); + errorCheckEnabled = Preferences.getBoolean(prefErrorCheck); warningsEnabled = Preferences.getBoolean(prefWarnings); codeCompletionsEnabled = Preferences.getBoolean(COMPLETION_PREF); // DEBUG = Preferences.getBoolean(prefDebugOP); @@ -370,7 +370,7 @@ public class JavaMode extends Mode { public void savePreferences() { Messages.log("Saving PDEX prefs"); -// Preferences.setBoolean(prefErrorCheck, errorCheckEnabled); + Preferences.setBoolean(prefErrorCheck, errorCheckEnabled); Preferences.setBoolean(prefWarnings, warningsEnabled); Preferences.setBoolean(COMPLETION_PREF, codeCompletionsEnabled); // Preferences.setBoolean(prefDebugOP, DEBUG); @@ -429,8 +429,8 @@ public class JavaMode extends Mode { public void ensurePrefsExist() { //TODO: Need to do a better job of managing prefs. Think lists. -// if (Preferences.get(prefErrorCheck) == null) -// Preferences.setBoolean(prefErrorCheck, errorCheckEnabled); + if (Preferences.get(prefErrorCheck) == null) + Preferences.setBoolean(prefErrorCheck, errorCheckEnabled); if (Preferences.get(prefWarnings) == null) Preferences.setBoolean(prefWarnings, warningsEnabled); if (Preferences.get(COMPLETION_PREF) == null) diff --git a/java/src/processing/mode/java/pdex/PDEX.java b/java/src/processing/mode/java/pdex/PDEX.java index b30294ea7..b2ebd32c8 100644 --- a/java/src/processing/mode/java/pdex/PDEX.java +++ b/java/src/processing/mode/java/pdex/PDEX.java @@ -152,6 +152,7 @@ public class PDEX { public void preferencesChanged() { + errorChecker.preferencesChanged(); sketchChanged(); } @@ -1026,16 +1027,22 @@ public class PDEX { private ScheduledExecutorService scheduler; private volatile ScheduledFuture scheduledUiUpdate = null; private volatile long nextUiUpdate = 0; + private volatile boolean enabled = true; private final Consumer errorHandlerListener = this::handleSketchProblems; private JavaEditor editor; + private PreprocessingService pps; public ErrorChecker(JavaEditor editor, PreprocessingService pps) { this.editor = editor; + this.pps = pps; scheduler = Executors.newSingleThreadScheduledExecutor(); - pps.registerListener(errorHandlerListener); + this.enabled = JavaMode.errorCheckEnabled; + if (enabled) { + pps.registerListener(errorHandlerListener); + } } @@ -1044,6 +1051,20 @@ public class PDEX { } + public void preferencesChanged() { + if (enabled != JavaMode.errorCheckEnabled) { + enabled = JavaMode.errorCheckEnabled; + if (enabled) { + pps.registerListener(errorHandlerListener); + } else { + pps.unregisterListener(errorHandlerListener); + editor.setProblemList(Collections.emptyList()); + nextUiUpdate = 0; + } + } + } + + public void dispose() { if (scheduler != null) { scheduler.shutdownNow();