Skip to content

Commit 938df21

Browse files
tomneutenscmaglie
authored andcommitted
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
1 parent 9f0eaaf commit 938df21

File tree

5 files changed

+38
-9
lines changed

5 files changed

+38
-9
lines changed

app/src/processing/app/Editor.java

+5
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
import cc.arduino.view.GoToLineNumber;
3030
import cc.arduino.view.StubMenuListener;
3131
import cc.arduino.view.findreplace.FindReplace;
32+
import cc.arduino.CompilerProgressListener;
3233
import com.jcraft.jsch.JSchException;
3334
import jssc.SerialPortException;
3435
import processing.app.debug.RunnerException;
@@ -65,6 +66,7 @@
6566
import java.util.function.Predicate;
6667
import java.util.zip.ZipEntry;
6768
import java.util.zip.ZipFile;
69+
import java.util.ArrayList;
6870

6971
import static processing.app.I18n.tr;
7072
import static processing.app.Theme.scale;
@@ -2691,5 +2693,8 @@ protected void onBoardOrPortChange() {
26912693
lineStatus.repaint();
26922694
}
26932695

2696+
public void addCompilerProgressListener(CompilerProgressListener listener){
2697+
this.status.addCompilerProgressListener(listener);
2698+
}
26942699

26952700
}

app/src/processing/app/EditorStatus.java

+14
Original file line numberDiff line numberDiff line change
@@ -24,13 +24,15 @@
2424
package processing.app;
2525

2626
import processing.app.helpers.OSUtils;
27+
import cc.arduino.CompilerProgressListener;
2728

2829
import javax.swing.*;
2930
import java.awt.*;
3031
import java.awt.datatransfer.Clipboard;
3132
import java.awt.datatransfer.StringSelection;
3233
import java.awt.event.KeyAdapter;
3334
import java.awt.event.KeyEvent;
35+
import java.util.ArrayList;
3436

3537
import static processing.app.I18n.tr;
3638
import static processing.app.Theme.scale;
@@ -88,12 +90,16 @@ public class EditorStatus extends JPanel {
8890
private JTextField editField;
8991
private JProgressBar progressBar;
9092
private JButton copyErrorButton;
93+
94+
private ArrayList<CompilerProgressListener> compilerProgressListeners;
9195

9296
public EditorStatus(Editor editor) {
9397
this.editor = editor;
9498
this.message = NO_MESSAGE;
9599
this.mode = NOTICE;
96100
this.font = Theme.getFont("status.font");
101+
this.compilerProgressListeners = new ArrayList<CompilerProgressListener>();
102+
this.compilerProgressListeners.add(this::progressUpdate);
97103
initialize();
98104
}
99105

@@ -409,5 +415,13 @@ public Dimension getMaximumSize() {
409415
public boolean isErr() {
410416
return mode == ERR;
411417
}
418+
419+
public void addCompilerProgressListener(CompilerProgressListener listener){
420+
compilerProgressListeners.add(listener);
421+
}
422+
423+
public ArrayList<CompilerProgressListener> getCompilerProgressListeners(){
424+
return compilerProgressListeners;
425+
}
412426

413427
}

app/src/processing/app/SketchController.java

+5-4
Original file line numberDiff line numberDiff line change
@@ -627,11 +627,12 @@ public void importLibrary(UserLibrary lib) throws IOException {
627627
*/
628628
public String build(boolean verbose, boolean save) throws RunnerException, PreferencesMapException, IOException {
629629
// run the preprocessor
630-
editor.status.progressUpdate(20);
630+
for (CompilerProgressListener progressListener : editor.status.getCompilerProgressListeners()){
631+
progressListener.progress(20);
632+
}
631633

632634
ensureExistence();
633-
634-
CompilerProgressListener progressListener = editor.status::progressUpdate;
635+
635636

636637
boolean deleteTemp = false;
637638
File pathToSketch = sketch.getPrimaryFile().getFile();
@@ -643,7 +644,7 @@ public String build(boolean verbose, boolean save) throws RunnerException, Prefe
643644
}
644645

645646
try {
646-
return new Compiler(pathToSketch, sketch).build(progressListener, save);
647+
return new Compiler(pathToSketch, sketch).build(editor.status.getCompilerProgressListeners(), save);
647648
} finally {
648649
// Make sure we clean up any temporary sketch copy
649650
if (deleteTemp)

arduino-core/src/cc/arduino/Compiler.java

+7-1
Original file line numberDiff line numberDiff line change
@@ -152,6 +152,12 @@ public Compiler(File pathToSketch, Sketch sketch) {
152152
}
153153

154154
public String build(CompilerProgressListener progListener, boolean exportHex) throws RunnerException, PreferencesMapException, IOException {
155+
ArrayList<CompilerProgressListener> listeners = new ArrayList<CompilerProgressListener>();
156+
listeners.add(progListener);
157+
return this.build(listeners, exportHex);
158+
}
159+
160+
public String build(ArrayList<CompilerProgressListener> progListeners, boolean exportHex) throws RunnerException, PreferencesMapException, IOException {
155161
this.buildPath = sketch.getBuildPath().getAbsolutePath();
156162

157163
TargetBoard board = BaseNoGui.getTargetBoard();
@@ -165,7 +171,7 @@ public String build(CompilerProgressListener progListener, boolean exportHex) th
165171

166172
PreferencesMap prefs = loadPreferences(board, platform, aPackage, vidpid);
167173

168-
MessageConsumerOutputStream out = new MessageConsumerOutputStream(new ProgressAwareMessageConsumer(new I18NAwareMessageConsumer(System.out, System.err), progListener), "\n");
174+
MessageConsumerOutputStream out = new MessageConsumerOutputStream(new ProgressAwareMessageConsumer(new I18NAwareMessageConsumer(System.out, System.err), progListeners), "\n");
169175
MessageConsumerOutputStream err = new MessageConsumerOutputStream(new I18NAwareMessageConsumer(System.err, Compiler.this), "\n");
170176

171177
callArduinoBuilder(board, platform, aPackage, vidpid, BuilderAction.COMPILE, out, err);

arduino-core/src/cc/arduino/ProgressAwareMessageConsumer.java

+7-4
Original file line numberDiff line numberDiff line change
@@ -33,16 +33,17 @@
3333
import processing.app.debug.MessageConsumer;
3434

3535
import java.util.Map;
36+
import java.util.ArrayList;
3637

3738
public class ProgressAwareMessageConsumer implements MessageConsumer {
3839

3940
private final MessageConsumer parent;
40-
private final CompilerProgressListener progressListener;
41+
private ArrayList<CompilerProgressListener> progressListeners;
4142
private final ExternalProcessOutputParser parser;
4243

43-
public ProgressAwareMessageConsumer(MessageConsumer parent, CompilerProgressListener progressListener) {
44+
public ProgressAwareMessageConsumer(MessageConsumer parent, ArrayList<CompilerProgressListener> progressListeners) {
4445
this.parent = parent;
45-
this.progressListener = progressListener;
46+
this.progressListeners = progressListeners;
4647
this.parser = new ExternalProcessOutputParser();
4748
}
4849

@@ -51,7 +52,9 @@ public void message(String s) {
5152
if (s.startsWith("===info ||| Progress") || s.startsWith("===Progress")) {
5253
Map<String, Object> parsedMessage = parser.parse(s);
5354
Object[] args = (Object[]) parsedMessage.get("args");
54-
progressListener.progress(Double.valueOf(args[0].toString()).intValue());
55+
for (CompilerProgressListener progressListener : progressListeners){
56+
progressListener.progress(Double.valueOf(args[0].toString()).intValue());
57+
}
5558
return;
5659
}
5760

0 commit comments

Comments
 (0)