From 4488e1df4028a17c8e147377f1913b9db47583d7 Mon Sep 17 00:00:00 2001 From: Jakub Valtar Date: Mon, 21 Sep 2015 11:39:53 -0400 Subject: [PATCH] Synchronize access to ASTGenerator We might want to remove this later --- java/src/processing/mode/java/JavaEditor.java | 11 ++++++++-- .../mode/java/pdex/ASTNodeWrapper.java | 5 ++++- .../mode/java/pdex/CompletionPanel.java | 15 ++++++++++--- .../mode/java/pdex/ErrorCheckerService.java | 21 ++++++++++++++----- .../mode/java/pdex/JavaTextArea.java | 5 ++++- .../mode/java/pdex/JavaTextAreaPainter.java | 17 +++++++++------ 6 files changed, 56 insertions(+), 18 deletions(-) diff --git a/java/src/processing/mode/java/JavaEditor.java b/java/src/processing/mode/java/JavaEditor.java index 33efb289c..03526e69e 100644 --- a/java/src/processing/mode/java/JavaEditor.java +++ b/java/src/processing/mode/java/JavaEditor.java @@ -31,6 +31,7 @@ import processing.app.ui.Toolkit; import processing.mode.java.debug.LineBreakpoint; import processing.mode.java.debug.LineHighlight; import processing.mode.java.debug.LineID; +import processing.mode.java.pdex.ASTGenerator; import processing.mode.java.pdex.ErrorCheckerService; import processing.mode.java.pdex.LineMarker; import processing.mode.java.pdex.ErrorMessageSimplifier; @@ -2674,14 +2675,20 @@ public class JavaEditor extends Editor { /** Handle refactor operation */ private void handleRefactor() { Messages.log("Caret at:" + textarea.getLineText(textarea.getCaretLine())); - errorCheckerService.getASTGenerator().handleRefactor(); + ASTGenerator astGenerator = errorCheckerService.getASTGenerator(); + synchronized (astGenerator) { + astGenerator.handleRefactor(); + } } /** Handle show usage operation */ private void handleShowUsage() { Messages.log("Caret at:" + textarea.getLineText(textarea.getCaretLine())); - errorCheckerService.getASTGenerator().handleShowUsage(); + ASTGenerator astGenerator = errorCheckerService.getASTGenerator(); + synchronized (astGenerator) { + astGenerator.handleShowUsage(); + } } diff --git a/java/src/processing/mode/java/pdex/ASTNodeWrapper.java b/java/src/processing/mode/java/pdex/ASTNodeWrapper.java index aa0461b30..472a943f2 100644 --- a/java/src/processing/mode/java/pdex/ASTNodeWrapper.java +++ b/java/src/processing/mode/java/pdex/ASTNodeWrapper.java @@ -390,7 +390,10 @@ public class ASTNodeWrapper { // Instead of converting pde into java, how can I simply extract the same source // from the java code? Think. TODO String sourceAlt = new String(source); - String sourceJava = ecs.astGenerator.getJavaSourceCodeLine(lineNumber); + String sourceJava; + synchronized (ecs.astGenerator) { + sourceJava = ecs.astGenerator.getJavaSourceCodeLine(lineNumber); + } TreeMap offsetmap = new TreeMap(); if(sourceJava.trim().startsWith("public") && !source.startsWith("public")){ diff --git a/java/src/processing/mode/java/pdex/CompletionPanel.java b/java/src/processing/mode/java/pdex/CompletionPanel.java index e1f0e8cdb..bb4fa1710 100644 --- a/java/src/processing/mode/java/pdex/CompletionPanel.java +++ b/java/src/processing/mode/java/pdex/CompletionPanel.java @@ -129,8 +129,11 @@ public class CompletionPanel { scrollPane.setViewportView(completionList = createSuggestionList(position, items)); popupMenu.add(scrollPane, BorderLayout.CENTER); popupMenu.setPopupSize(calcWidth(), calcHeight(items.getSize())); //TODO: Eradicate this evil - editor.getErrorChecker().getASTGenerator().updateJavaDoc(completionList.getSelectedValue()); textarea.requestFocusInWindow(); + ASTGenerator astGenerator = editor.getErrorChecker().getASTGenerator(); + synchronized (astGenerator) { + astGenerator.updateJavaDoc(completionList.getSelectedValue()); + } popupMenu.show(textarea, location.x, textarea.getBaseline(0, 0) + location.y); //log("Suggestion shown: " + System.currentTimeMillis()); } @@ -506,7 +509,10 @@ public class CompletionPanel { .getVerticalScrollBar() .getValue() - step); - editor.getErrorChecker().getASTGenerator().updateJavaDoc(completionList.getSelectedValue()); + ASTGenerator astGenerator = editor.getErrorChecker().getASTGenerator(); + synchronized (astGenerator) { + astGenerator.updateJavaDoc(completionList.getSelectedValue()); + } } } @@ -523,7 +529,10 @@ public class CompletionPanel { int index = Math.min(completionList.getSelectedIndex() + 1, completionList.getModel().getSize() - 1); selectIndex(index); - editor.getErrorChecker().getASTGenerator().updateJavaDoc(completionList.getSelectedValue()); + ASTGenerator astGenerator = editor.getErrorChecker().getASTGenerator(); + synchronized (astGenerator) { + astGenerator.updateJavaDoc(completionList.getSelectedValue()); + } int step = scrollPane.getVerticalScrollBar().getMaximum() / completionList.getModel().getSize(); scrollPane.getVerticalScrollBar().setValue(scrollPane.getVerticalScrollBar().getValue() + step); } diff --git a/java/src/processing/mode/java/pdex/ErrorCheckerService.java b/java/src/processing/mode/java/pdex/ErrorCheckerService.java index 487583442..4128707a4 100644 --- a/java/src/processing/mode/java/pdex/ErrorCheckerService.java +++ b/java/src/processing/mode/java/pdex/ErrorCheckerService.java @@ -316,7 +316,9 @@ public class ErrorCheckerService implements Runnable { // This is when the loaded sketch already has syntax errors. // Completion wouldn't be complete, but it'd be still something // better than nothing - astGenerator.buildAST(cu); + synchronized (astGenerator) { + astGenerator.buildAST(cu); + } handleErrorCheckingToggle(); while (!stopThread.get()) { try { @@ -349,7 +351,9 @@ public class ErrorCheckerService implements Runnable { } } - astGenerator.disposeAllWindows(); + synchronized (astGenerator) { + astGenerator.disposeAllWindows(); + } compilationChecker = null; checkerClass = null; classLoader = null; @@ -503,7 +507,9 @@ public class ErrorCheckerService implements Runnable { // log(editor.getSketch().getName() + "2 MCO " + mainClassOffset); } - astGenerator.buildAST(cu); + synchronized (astGenerator) { + astGenerator.buildAST(cu); + } if (!JavaMode.errorCheckEnabled) { problemsList.clear(); Messages.log("Error Check disabled, so not updating UI."); @@ -897,7 +903,9 @@ public class ErrorCheckerService implements Runnable { } new Thread(new Runnable() { public void run() { - astGenerator.loadJars(); // update jar file for completion lookup + synchronized (astGenerator) { + astGenerator.loadJars(); // update jar file for completion lookup + } } }).start(); } @@ -956,7 +964,10 @@ public class ErrorCheckerService implements Runnable { String[] args = p.getIProblem().getArguments(); if (args.length > 0) { String missingClass = args[0]; - String[] si = astGenerator.getSuggestImports(missingClass); + String[] si; + synchronized (astGenerator) { + si = astGenerator.getSuggestImports(missingClass); + } if (si != null && si.length > 0) { p.setImportSuggestions(si); // errorData[index][0] = "" + p.getMessage() + diff --git a/java/src/processing/mode/java/pdex/JavaTextArea.java b/java/src/processing/mode/java/pdex/JavaTextArea.java index c4f5936b1..f04f5af77 100644 --- a/java/src/processing/mode/java/pdex/JavaTextArea.java +++ b/java/src/processing/mode/java/pdex/JavaTextArea.java @@ -368,7 +368,10 @@ public class JavaTextArea extends JEditTextArea { return null; } Messages.log("Mouse click, word: " + word.trim()); - editor.getErrorChecker().getASTGenerator().setLastClickedWord(line, word, xLS); + ASTGenerator astGenerator = editor.getErrorChecker().getASTGenerator(); + synchronized (astGenerator) { + astGenerator.setLastClickedWord(line, word, xLS); + } return word.trim(); } } diff --git a/java/src/processing/mode/java/pdex/JavaTextAreaPainter.java b/java/src/processing/mode/java/pdex/JavaTextAreaPainter.java index 752ff2969..8a66452b3 100644 --- a/java/src/processing/mode/java/pdex/JavaTextAreaPainter.java +++ b/java/src/processing/mode/java/pdex/JavaTextAreaPainter.java @@ -207,7 +207,10 @@ public class JavaTextAreaPainter extends TextAreaPainter return; Messages.log(getJavaEditor().getErrorChecker().mainClassOffset + line + "|" + line + "| offset " + xLS + word + " <= \n"); - getJavaEditor().getErrorChecker().getASTGenerator().scrollToDeclaration(line, word, xLS); + ASTGenerator astGenerator = getJavaEditor().getErrorChecker().getASTGenerator(); + synchronized (astGenerator) { + astGenerator.scrollToDeclaration(line, word, xLS); + } } } @@ -515,12 +518,14 @@ public class JavaTextAreaPainter extends TextAreaPainter return super.getToolTipText(event); } ASTGenerator ast = getJavaEditor().getErrorChecker().getASTGenerator(); - String tooltipText = ast.getLabelForASTNode(line, word, xLS); + synchronized (ast) { + String tooltipText = ast.getLabelForASTNode(line, word, xLS); - // log(errorCheckerService.mainClassOffset + " MCO " - // + "|" + line + "| offset " + xLS + word + " <= offf: "+off+ "\n"); - if (tooltipText != null) { - return tooltipText; + // log(errorCheckerService.mainClassOffset + " MCO " + // + "|" + line + "| offset " + xLS + word + " <= offf: "+off+ "\n"); + if (tooltipText != null) { + return tooltipText; + } } } }