Skip to content

Commit 7b5f923

Browse files
committed
Set error checker listeners only once
1 parent 27aaa4f commit 7b5f923

2 files changed

Lines changed: 30 additions & 52 deletions

File tree

java/src/processing/mode/java/JavaEditor.java

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -140,8 +140,15 @@ public void actionPerformed(ActionEvent e) {
140140
hasJavaTabs = checkForJavaTabs();
141141
//initializeErrorChecker();
142142

143-
errorCheckerService = new ErrorCheckerService(this);
144-
errorCheckerService.start();
143+
{ // Init error checker
144+
errorCheckerService = new ErrorCheckerService(this);
145+
Document currentDocument = currentDocument();
146+
if (currentDocument != null) {
147+
errorCheckerService.addListener(currentDocument);
148+
}
149+
errorCheckerService.start();
150+
errorCheckerService.request();
151+
}
145152

146153
// hack to add a JPanel to the right-hand side of the text area
147154
JPanel textAndError = new JPanel();
@@ -2330,10 +2337,18 @@ public boolean isInCurrentTab(LineID line) {
23302337
*/
23312338
@Override
23322339
public void setCode(SketchCode code) {
2340+
2341+
Document oldDoc = code.getDocument();
2342+
23332343
//System.out.println("tab switch: " + code.getFileName());
23342344
// set the new document in the textarea, etc. need to do this first
23352345
super.setCode(code);
23362346

2347+
Document newDoc = code.getDocument();
2348+
if (oldDoc != newDoc && errorCheckerService != null) {
2349+
errorCheckerService.addListener(newDoc);
2350+
}
2351+
23372352
// set line background colors for tab
23382353
final JavaTextArea ta = getJavaTextArea();
23392354
// can be null when setCode is called the first time (in constructor)

java/src/processing/mode/java/pdex/ErrorCheckerService.java

Lines changed: 13 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -235,7 +235,6 @@ public ErrorCheckerService(JavaEditor debugEditor) {
235235
astGenerator = new ASTGenerator(this);
236236
errorMsgSimplifier = new ErrorMessageSimplifier();
237237
tempErrorLog = new TreeMap<>();
238-
sketchChangedListener = new SketchChangedListener();
239238
// for (final SketchCode sc : editor.getSketch().getCode()) {
240239
// sc.getDocument().addDocumentListener(sketchChangedListener);
241240
// }
@@ -287,16 +286,16 @@ public void run() {
287286
try {
288287

289288
Messages.log("Starting error check");
290-
lastCodeCheckResult = checkCode();
289+
CodeCheckResult result = checkCode();
291290

292291
if (!JavaMode.errorCheckEnabled) {
293292
lastCodeCheckResult.problems.clear();
294293
Messages.log("Error Check disabled, so not updating UI.");
295294
}
296295

297-
checkForMissingImports();
296+
lastCodeCheckResult = result;
298297

299-
updateSketchCodeListeners();
298+
checkForMissingImports(lastCodeCheckResult);
300299

301300
if (JavaMode.errorCheckEnabled) {
302301
if (scheduledUiUpdate != null) {
@@ -319,7 +318,6 @@ public void run() {
319318
editor.updateErrorBar(result.problems);
320319
editor.getTextArea().repaint();
321320
editor.updateErrorToggle(result.containsErrors);
322-
updateSketchCodeListeners();
323321
}
324322
});
325323
}
@@ -375,35 +373,15 @@ public void request() {
375373
}
376374

377375

378-
protected void updateSketchCodeListeners() {
379-
for (SketchCode sc : editor.getSketch().getCode()) {
380-
SyntaxDocument doc = (SyntaxDocument) sc.getDocument();
381-
if (!hasSketchChangedListener(doc)) {
382-
doc.addDocumentListener(sketchChangedListener);
383-
}
384-
}
376+
public void addListener(Document doc) {
377+
doc.addDocumentListener(sketchChangedListener);
385378
}
386379

387380

388-
boolean hasSketchChangedListener(SyntaxDocument doc) {
389-
if (doc != null && doc.getDocumentListeners() != null) {
390-
for (DocumentListener dl : doc.getDocumentListeners()) {
391-
if (dl.equals(sketchChangedListener)) {
392-
return true;
393-
}
394-
}
395-
}
396-
return false;
397-
}
398-
399-
400-
protected void checkForMissingImports() {
401-
// Atomic access
402-
CodeCheckResult lastCodeCheckResult = this.lastCodeCheckResult;
403-
381+
protected void checkForMissingImports(CodeCheckResult result) {
404382
if (Preferences.getBoolean(JavaMode.SUGGEST_IMPORTS_PREF)) {
405-
for (Problem p : lastCodeCheckResult.problems) {
406-
if(p.getIProblem().getID() == IProblem.UndefinedType) {
383+
for (Problem p : result.problems) {
384+
if (p.getIProblem().getID() == IProblem.UndefinedType) {
407385
String args[] = p.getIProblem().getArguments();
408386
if (args.length > 0) {
409387
String missingClass = args[0];
@@ -423,37 +401,22 @@ public ASTGenerator getASTGenerator() {
423401
}
424402

425403

426-
protected SketchChangedListener sketchChangedListener;
427-
protected class SketchChangedListener implements DocumentListener{
428-
429-
private SketchChangedListener(){
430-
}
431-
404+
protected final DocumentListener sketchChangedListener = new DocumentListener() {
432405
@Override
433406
public void insertUpdate(DocumentEvent e) {
434-
if (JavaMode.errorCheckEnabled) {
435-
request();
436-
//log("doc insert update, man error check..");
437-
}
407+
if (JavaMode.errorCheckEnabled) request();
438408
}
439409

440410
@Override
441411
public void removeUpdate(DocumentEvent e) {
442-
if (JavaMode.errorCheckEnabled){
443-
request();
444-
//log("doc remove update, man error check..");
445-
}
412+
if (JavaMode.errorCheckEnabled) request();
446413
}
447414

448415
@Override
449416
public void changedUpdate(DocumentEvent e) {
450-
if (JavaMode.errorCheckEnabled){
451-
request();
452-
//log("doc changed update, man error check..");
453-
}
417+
if (JavaMode.errorCheckEnabled) request();
454418
}
455-
456-
}
419+
};
457420

458421
public static class CodeCheckResult {
459422

0 commit comments

Comments
 (0)