mirror of
https://github.com/arduino/Arduino.git
synced 2025-03-15 12:29:26 +01:00
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:
parent
9f0eaafed4
commit
938df21778
@ -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);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -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;
|
||||||
@ -89,11 +91,15 @@ public class EditorStatus extends JPanel {
|
|||||||
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();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -410,4 +416,12 @@ public class EditorStatus extends JPanel {
|
|||||||
return mode == ERR;
|
return mode == ERR;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void addCompilerProgressListener(CompilerProgressListener listener){
|
||||||
|
compilerProgressListeners.add(listener);
|
||||||
|
}
|
||||||
|
|
||||||
|
public ArrayList<CompilerProgressListener> getCompilerProgressListeners(){
|
||||||
|
return compilerProgressListeners;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -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)
|
||||||
|
@ -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);
|
||||||
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user