diff --git a/pdex/Todo, GSoC 2013.txt b/pdex/Todo, GSoC 2013.txt index 2079b1b75..da4776a3b 100644 --- a/pdex/Todo, GSoC 2013.txt +++ b/pdex/Todo, GSoC 2013.txt @@ -119,6 +119,8 @@ Suggestion for missing imports 2. Find the class name via astGen, and suggest import as a popup. x Barebones functionality done. x Add imports only to beginning of first tab. +x Search within contributed libraries folder +* Search within code folder of sketch Labels for Java elements ======================== @@ -145,6 +147,8 @@ x boolean warningsEnabled - made it volatile General Stuff ============= +* Disabling Error Checking disables predictions as well! +x Added doc listener for text area updates x Consult Ben on where to save preferences - main preferences.txt or custom one. - Main prefs file x Save preferences to main preference.txt x Hide breakpoint markers when Debugger isn't active diff --git a/pdex/src/processing/mode/experimental/ErrorCheckerService.java b/pdex/src/processing/mode/experimental/ErrorCheckerService.java index 896cd9da5..833a53818 100644 --- a/pdex/src/processing/mode/experimental/ErrorCheckerService.java +++ b/pdex/src/processing/mode/experimental/ErrorCheckerService.java @@ -20,7 +20,10 @@ import java.util.regex.Matcher; import java.util.regex.Pattern; import javax.swing.JCheckBoxMenuItem; +import javax.swing.event.DocumentEvent; +import javax.swing.event.DocumentListener; import javax.swing.table.DefaultTableModel; +import javax.swing.text.AbstractDocument; import org.eclipse.jdt.core.JavaCore; import org.eclipse.jdt.core.compiler.IProblem; @@ -35,6 +38,7 @@ import processing.app.Base; import processing.app.Editor; import processing.app.Library; import processing.app.SketchCode; +import processing.app.syntax.SyntaxDocument; import processing.core.PApplet; import processing.mode.java.preproc.PdePreprocessor; @@ -203,6 +207,10 @@ public class ErrorCheckerService implements Runnable{ containsErrors = new AtomicBoolean(true); errorMsgSimplifier = new ErrorMessageSimplifier(); tempErrorLog = new TreeMap(); + sketchChangedListener = new SketchChangedListener(); +// for (final SketchCode sc : editor.getSketch().getCode()) { +// sc.getDocument().addDocumentListener(sketchChangedListener); +// } } /** @@ -275,7 +283,7 @@ public class ErrorCheckerService implements Runnable{ updatePaintedThingys(); updateEditorStatus(); - + updateSketchCodeListeners(); if (pauseThread.get()) continue; if(textModified.get() == 0) @@ -290,6 +298,22 @@ public class ErrorCheckerService implements Runnable{ logE("Thread stopped: " + editor.getSketch().getName()); } + protected void updateSketchCodeListeners() { + for (final SketchCode sc : editor.getSketch().getCode()) { + boolean flag = false; + for (DocumentListener dl : ((SyntaxDocument)sc.getDocument()).getDocumentListeners()) { + if(dl.equals(sketchChangedListener)){ + flag = true; + break; + } + } + if(!flag){ + log("Adding doc listener to " + sc.getPrettyName()); + sc.getDocument().addDocumentListener(sketchChangedListener); + } + } + } + protected void checkForMissingImports() { for (Problem p : problemsList) { if(p.getMessage().endsWith(" cannot be resolved to a type"));{ @@ -323,6 +347,32 @@ public class ErrorCheckerService implements Runnable{ public void runManualErrorCheck() { textModified.incrementAndGet(); } + + protected SketchChangedListener sketchChangedListener; + protected class SketchChangedListener implements DocumentListener{ + + private SketchChangedListener(){ + } + + @Override + public void insertUpdate(DocumentEvent e) { + runManualErrorCheck(); + log("doc insert update, man error check.."); + } + + @Override + public void removeUpdate(DocumentEvent e) { + runManualErrorCheck(); + log("doc remove update, man error check.."); + } + + @Override + public void changedUpdate(DocumentEvent e) { + runManualErrorCheck(); + log("doc changed update, man error check.."); + } + + } protected boolean checkCode() { //log("checkCode() " + textModified.get() );