Skip to content

Listening for compiler updates from tool #5716

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 2 commits into from
Mar 15, 2017
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions app/src/processing/app/Editor.java
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@
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;
Expand Down Expand Up @@ -66,6 +67,7 @@
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;
Expand Down Expand Up @@ -2748,5 +2750,8 @@ protected void onBoardOrPortChange() {
lineStatus.repaint();
}

public void addCompilerProgressListener(CompilerProgressListener listener){
this.status.addCompilerProgressListener(listener);
}

}
14 changes: 14 additions & 0 deletions app/src/processing/app/EditorStatus.java
Original file line number Diff line number Diff line change
Expand Up @@ -24,13 +24,15 @@
package processing.app;

import processing.app.helpers.OSUtils;
import cc.arduino.CompilerProgressListener;

import javax.swing.*;
import java.awt.*;
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;
Expand Down Expand Up @@ -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();
}

Expand Down Expand Up @@ -409,5 +415,13 @@ public Dimension getMaximumSize() {
public boolean isErr() {
return mode == ERR;
}

public void addCompilerProgressListener(CompilerProgressListener listener){
compilerProgressListeners.add(listener);
}

public ArrayList<CompilerProgressListener> getCompilerProgressListeners(){
return compilerProgressListeners;
}

}
9 changes: 5 additions & 4 deletions app/src/processing/app/SketchController.java
Original file line number Diff line number Diff line change
Expand Up @@ -624,11 +624,12 @@ public void importLibrary(UserLibrary lib) throws IOException {
*/
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();
Expand All @@ -640,7 +641,7 @@ public String build(boolean verbose, boolean save) throws RunnerException, Prefe
}

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)
Expand Down
8 changes: 7 additions & 1 deletion arduino-core/src/cc/arduino/Compiler.java
Original file line number Diff line number Diff line change
Expand Up @@ -127,6 +127,12 @@ public Compiler(File pathToSketch, Sketch sketch) {
}

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();
Expand All @@ -140,7 +146,7 @@ public String build(CompilerProgressListener progListener, boolean exportHex) th

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);
Expand Down
11 changes: 7 additions & 4 deletions arduino-core/src/cc/arduino/ProgressAwareMessageConsumer.java
Original file line number Diff line number Diff line change
Expand Up @@ -33,16 +33,17 @@
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();
}

Expand All @@ -51,7 +52,9 @@ public void message(String s) {
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;
}

Expand Down