mirror of
https://github.com/arduino/Arduino.git
synced 2025-03-13 10:29:35 +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.StubMenuListener;
|
||||
import cc.arduino.view.findreplace.FindReplace;
|
||||
import cc.arduino.CompilerProgressListener;
|
||||
import com.jcraft.jsch.JSchException;
|
||||
import jssc.SerialPortException;
|
||||
import processing.app.debug.RunnerException;
|
||||
@ -65,6 +66,7 @@ import java.util.List;
|
||||
import java.util.function.Predicate;
|
||||
import java.util.zip.ZipEntry;
|
||||
import java.util.zip.ZipFile;
|
||||
import java.util.ArrayList;
|
||||
|
||||
import static processing.app.I18n.tr;
|
||||
import static processing.app.Theme.scale;
|
||||
@ -2691,5 +2693,8 @@ public class Editor extends JFrame implements RunnerListener {
|
||||
lineStatus.repaint();
|
||||
}
|
||||
|
||||
public void addCompilerProgressListener(CompilerProgressListener listener){
|
||||
this.status.addCompilerProgressListener(listener);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -24,6 +24,7 @@
|
||||
package processing.app;
|
||||
|
||||
import processing.app.helpers.OSUtils;
|
||||
import cc.arduino.CompilerProgressListener;
|
||||
|
||||
import javax.swing.*;
|
||||
import java.awt.*;
|
||||
@ -31,6 +32,7 @@ import java.awt.datatransfer.Clipboard;
|
||||
import java.awt.datatransfer.StringSelection;
|
||||
import java.awt.event.KeyAdapter;
|
||||
import java.awt.event.KeyEvent;
|
||||
import java.util.ArrayList;
|
||||
|
||||
import static processing.app.I18n.tr;
|
||||
import static processing.app.Theme.scale;
|
||||
@ -88,12 +90,16 @@ public class EditorStatus extends JPanel {
|
||||
private JTextField editField;
|
||||
private JProgressBar progressBar;
|
||||
private JButton copyErrorButton;
|
||||
|
||||
private ArrayList<CompilerProgressListener> compilerProgressListeners;
|
||||
|
||||
public EditorStatus(Editor editor) {
|
||||
this.editor = editor;
|
||||
this.message = NO_MESSAGE;
|
||||
this.mode = NOTICE;
|
||||
this.font = Theme.getFont("status.font");
|
||||
this.compilerProgressListeners = new ArrayList<CompilerProgressListener>();
|
||||
this.compilerProgressListeners.add(this::progressUpdate);
|
||||
initialize();
|
||||
}
|
||||
|
||||
@ -409,5 +415,13 @@ public class EditorStatus extends JPanel {
|
||||
public boolean isErr() {
|
||||
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 {
|
||||
// run the preprocessor
|
||||
editor.status.progressUpdate(20);
|
||||
for (CompilerProgressListener progressListener : editor.status.getCompilerProgressListeners()){
|
||||
progressListener.progress(20);
|
||||
}
|
||||
|
||||
ensureExistence();
|
||||
|
||||
CompilerProgressListener progressListener = editor.status::progressUpdate;
|
||||
|
||||
|
||||
boolean deleteTemp = false;
|
||||
File pathToSketch = sketch.getPrimaryFile().getFile();
|
||||
@ -643,7 +644,7 @@ public class SketchController {
|
||||
}
|
||||
|
||||
try {
|
||||
return new Compiler(pathToSketch, sketch).build(progressListener, save);
|
||||
return new Compiler(pathToSketch, sketch).build(editor.status.getCompilerProgressListeners(), save);
|
||||
} finally {
|
||||
// Make sure we clean up any temporary sketch copy
|
||||
if (deleteTemp)
|
||||
|
@ -152,6 +152,12 @@ public class Compiler implements MessageConsumer {
|
||||
}
|
||||
|
||||
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();
|
||||
|
||||
TargetBoard board = BaseNoGui.getTargetBoard();
|
||||
@ -165,7 +171,7 @@ public class Compiler implements MessageConsumer {
|
||||
|
||||
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");
|
||||
|
||||
callArduinoBuilder(board, platform, aPackage, vidpid, BuilderAction.COMPILE, out, err);
|
||||
|
@ -33,16 +33,17 @@ import cc.arduino.i18n.ExternalProcessOutputParser;
|
||||
import processing.app.debug.MessageConsumer;
|
||||
|
||||
import java.util.Map;
|
||||
import java.util.ArrayList;
|
||||
|
||||
public class ProgressAwareMessageConsumer implements MessageConsumer {
|
||||
|
||||
private final MessageConsumer parent;
|
||||
private final CompilerProgressListener progressListener;
|
||||
private ArrayList<CompilerProgressListener> progressListeners;
|
||||
private final ExternalProcessOutputParser parser;
|
||||
|
||||
public ProgressAwareMessageConsumer(MessageConsumer parent, CompilerProgressListener progressListener) {
|
||||
public ProgressAwareMessageConsumer(MessageConsumer parent, ArrayList<CompilerProgressListener> progressListeners) {
|
||||
this.parent = parent;
|
||||
this.progressListener = progressListener;
|
||||
this.progressListeners = progressListeners;
|
||||
this.parser = new ExternalProcessOutputParser();
|
||||
}
|
||||
|
||||
@ -51,7 +52,9 @@ public class ProgressAwareMessageConsumer implements MessageConsumer {
|
||||
if (s.startsWith("===info ||| Progress") || s.startsWith("===Progress")) {
|
||||
Map<String, Object> parsedMessage = parser.parse(s);
|
||||
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;
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user