Added a CompilerProgressListenerList to the EditorStatus class so you can add a listener for compiler progress from an external tool. To enable this the build method in the compiler class had to be changed

This commit is contained in:
tomneutens 2016-12-13 11:51:27 +01:00 committed by Cristian Maglie
parent 9f0eaafed4
commit 938df21778
5 changed files with 38 additions and 9 deletions

View File

@ -29,6 +29,7 @@ import cc.arduino.packages.uploaders.SerialUploader;
import cc.arduino.view.GoToLineNumber; import cc.arduino.view.GoToLineNumber;
import cc.arduino.view.StubMenuListener; import cc.arduino.view.StubMenuListener;
import cc.arduino.view.findreplace.FindReplace; import cc.arduino.view.findreplace.FindReplace;
import cc.arduino.CompilerProgressListener;
import com.jcraft.jsch.JSchException; import com.jcraft.jsch.JSchException;
import jssc.SerialPortException; import jssc.SerialPortException;
import processing.app.debug.RunnerException; import processing.app.debug.RunnerException;
@ -65,6 +66,7 @@ import java.util.List;
import java.util.function.Predicate; import java.util.function.Predicate;
import java.util.zip.ZipEntry; import java.util.zip.ZipEntry;
import java.util.zip.ZipFile; import java.util.zip.ZipFile;
import java.util.ArrayList;
import static processing.app.I18n.tr; import static processing.app.I18n.tr;
import static processing.app.Theme.scale; import static processing.app.Theme.scale;
@ -2691,5 +2693,8 @@ public class Editor extends JFrame implements RunnerListener {
lineStatus.repaint(); lineStatus.repaint();
} }
public void addCompilerProgressListener(CompilerProgressListener listener){
this.status.addCompilerProgressListener(listener);
}
} }

View File

@ -24,6 +24,7 @@
package processing.app; package processing.app;
import processing.app.helpers.OSUtils; import processing.app.helpers.OSUtils;
import cc.arduino.CompilerProgressListener;
import javax.swing.*; import javax.swing.*;
import java.awt.*; import java.awt.*;
@ -31,6 +32,7 @@ import java.awt.datatransfer.Clipboard;
import java.awt.datatransfer.StringSelection; import java.awt.datatransfer.StringSelection;
import java.awt.event.KeyAdapter; import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent; import java.awt.event.KeyEvent;
import java.util.ArrayList;
import static processing.app.I18n.tr; import static processing.app.I18n.tr;
import static processing.app.Theme.scale; import static processing.app.Theme.scale;
@ -88,12 +90,16 @@ public class EditorStatus extends JPanel {
private JTextField editField; private JTextField editField;
private JProgressBar progressBar; private JProgressBar progressBar;
private JButton copyErrorButton; private JButton copyErrorButton;
private ArrayList<CompilerProgressListener> compilerProgressListeners;
public EditorStatus(Editor editor) { public EditorStatus(Editor editor) {
this.editor = editor; this.editor = editor;
this.message = NO_MESSAGE; this.message = NO_MESSAGE;
this.mode = NOTICE; this.mode = NOTICE;
this.font = Theme.getFont("status.font"); this.font = Theme.getFont("status.font");
this.compilerProgressListeners = new ArrayList<CompilerProgressListener>();
this.compilerProgressListeners.add(this::progressUpdate);
initialize(); initialize();
} }
@ -409,5 +415,13 @@ public class EditorStatus extends JPanel {
public boolean isErr() { public boolean isErr() {
return mode == ERR; return mode == ERR;
} }
public void addCompilerProgressListener(CompilerProgressListener listener){
compilerProgressListeners.add(listener);
}
public ArrayList<CompilerProgressListener> getCompilerProgressListeners(){
return compilerProgressListeners;
}
} }

View File

@ -627,11 +627,12 @@ public class SketchController {
*/ */
public String build(boolean verbose, boolean save) throws RunnerException, PreferencesMapException, IOException { public String build(boolean verbose, boolean save) throws RunnerException, PreferencesMapException, IOException {
// run the preprocessor // run the preprocessor
editor.status.progressUpdate(20); for (CompilerProgressListener progressListener : editor.status.getCompilerProgressListeners()){
progressListener.progress(20);
}
ensureExistence(); ensureExistence();
CompilerProgressListener progressListener = editor.status::progressUpdate;
boolean deleteTemp = false; boolean deleteTemp = false;
File pathToSketch = sketch.getPrimaryFile().getFile(); File pathToSketch = sketch.getPrimaryFile().getFile();
@ -643,7 +644,7 @@ public class SketchController {
} }
try { try {
return new Compiler(pathToSketch, sketch).build(progressListener, save); return new Compiler(pathToSketch, sketch).build(editor.status.getCompilerProgressListeners(), save);
} finally { } finally {
// Make sure we clean up any temporary sketch copy // Make sure we clean up any temporary sketch copy
if (deleteTemp) if (deleteTemp)

View File

@ -152,6 +152,12 @@ public class Compiler implements MessageConsumer {
} }
public String build(CompilerProgressListener progListener, boolean exportHex) throws RunnerException, PreferencesMapException, IOException { public String build(CompilerProgressListener progListener, boolean exportHex) throws RunnerException, PreferencesMapException, IOException {
ArrayList<CompilerProgressListener> listeners = new ArrayList<CompilerProgressListener>();
listeners.add(progListener);
return this.build(listeners, exportHex);
}
public String build(ArrayList<CompilerProgressListener> progListeners, boolean exportHex) throws RunnerException, PreferencesMapException, IOException {
this.buildPath = sketch.getBuildPath().getAbsolutePath(); this.buildPath = sketch.getBuildPath().getAbsolutePath();
TargetBoard board = BaseNoGui.getTargetBoard(); TargetBoard board = BaseNoGui.getTargetBoard();
@ -165,7 +171,7 @@ public class Compiler implements MessageConsumer {
PreferencesMap prefs = loadPreferences(board, platform, aPackage, vidpid); PreferencesMap prefs = loadPreferences(board, platform, aPackage, vidpid);
MessageConsumerOutputStream out = new MessageConsumerOutputStream(new ProgressAwareMessageConsumer(new I18NAwareMessageConsumer(System.out, System.err), progListener), "\n"); MessageConsumerOutputStream out = new MessageConsumerOutputStream(new ProgressAwareMessageConsumer(new I18NAwareMessageConsumer(System.out, System.err), progListeners), "\n");
MessageConsumerOutputStream err = new MessageConsumerOutputStream(new I18NAwareMessageConsumer(System.err, Compiler.this), "\n"); MessageConsumerOutputStream err = new MessageConsumerOutputStream(new I18NAwareMessageConsumer(System.err, Compiler.this), "\n");
callArduinoBuilder(board, platform, aPackage, vidpid, BuilderAction.COMPILE, out, err); callArduinoBuilder(board, platform, aPackage, vidpid, BuilderAction.COMPILE, out, err);

View File

@ -33,16 +33,17 @@ import cc.arduino.i18n.ExternalProcessOutputParser;
import processing.app.debug.MessageConsumer; import processing.app.debug.MessageConsumer;
import java.util.Map; import java.util.Map;
import java.util.ArrayList;
public class ProgressAwareMessageConsumer implements MessageConsumer { public class ProgressAwareMessageConsumer implements MessageConsumer {
private final MessageConsumer parent; private final MessageConsumer parent;
private final CompilerProgressListener progressListener; private ArrayList<CompilerProgressListener> progressListeners;
private final ExternalProcessOutputParser parser; private final ExternalProcessOutputParser parser;
public ProgressAwareMessageConsumer(MessageConsumer parent, CompilerProgressListener progressListener) { public ProgressAwareMessageConsumer(MessageConsumer parent, ArrayList<CompilerProgressListener> progressListeners) {
this.parent = parent; this.parent = parent;
this.progressListener = progressListener; this.progressListeners = progressListeners;
this.parser = new ExternalProcessOutputParser(); this.parser = new ExternalProcessOutputParser();
} }
@ -51,7 +52,9 @@ public class ProgressAwareMessageConsumer implements MessageConsumer {
if (s.startsWith("===info ||| Progress") || s.startsWith("===Progress")) { if (s.startsWith("===info ||| Progress") || s.startsWith("===Progress")) {
Map<String, Object> parsedMessage = parser.parse(s); Map<String, Object> parsedMessage = parser.parse(s);
Object[] args = (Object[]) parsedMessage.get("args"); Object[] args = (Object[]) parsedMessage.get("args");
progressListener.progress(Double.valueOf(args[0].toString()).intValue()); for (CompilerProgressListener progressListener : progressListeners){
progressListener.progress(Double.valueOf(args[0].toString()).intValue());
}
return; return;
} }