Skip to content

Commit a24ffb7

Browse files
committed
remove highlighting upon recompile
1 parent b6f7d94 commit a24ffb7

File tree

1 file changed

+50
-7
lines changed

1 file changed

+50
-7
lines changed

drjava/src/edu/rice/cs/drjava/ui/coverage/CoverageFrame.java

Lines changed: 50 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@
4444
import java.io.StringWriter;
4545
import java.util.ArrayList;
4646
import java.util.Iterator;
47+
import java.util.List;
4748
import java.util.Vector;
4849
import java.util.Map;
4950
import java.util.HashMap;
@@ -54,6 +55,8 @@
5455

5556
import edu.rice.cs.drjava.model.OpenDefinitionsDocument;
5657
import edu.rice.cs.drjava.model.SingleDisplayModel;
58+
import edu.rice.cs.drjava.model.compiler.CompilerListener;
59+
import edu.rice.cs.drjava.model.compiler.DummyCompilerListener;
5760
import edu.rice.cs.drjava.model.definitions.ClassNameNotFoundException;
5861
import edu.rice.cs.drjava.config.Option;
5962
import edu.rice.cs.drjava.config.OptionParser;
@@ -73,6 +76,7 @@
7376
import edu.rice.cs.util.swing.DirectorySelectorComponent;
7477
import edu.rice.cs.util.swing.DirectoryChooser;
7578
import edu.rice.cs.util.swing.FileChooser;
79+
import edu.rice.cs.util.swing.HighlightManager.HighlightInfo;
7680
import edu.rice.cs.util.swing.SwingFrame;
7781
import edu.rice.cs.util.swing.Utilities;
7882

@@ -210,12 +214,12 @@ public boolean generateReport(){
210214
if(_useCurrentFile.isSelected()){
211215
final ReportGenerator generator = new ReportGenerator(_model, _model.getDocumentNavigator().getSelectedDocuments(), _outputDirSelector.getFileFromField());
212216
generator.create();
213-
highlight(generator);
217+
highlight(generator, true);
214218

215219
}else{
216220
final ReportGenerator generator = new ReportGenerator(_model, _srcRootSelector.getFileFromField(), _mainDocumentSelector.getText(), _outputDirSelector.getFileFromField());
217221
generator.create();
218-
highlight(generator);
222+
highlight(generator, false);
219223
}
220224

221225
} catch (Exception e){
@@ -227,12 +231,18 @@ public boolean generateReport(){
227231
}
228232

229233

230-
private void highlight(ReportGenerator generator) {
234+
private void highlight(ReportGenerator generator, boolean selOnly) {
231235

232-
Iterator<OpenDefinitionsDocument> iter = _model.getDocumentNavigator().getDocuments().iterator();
236+
Iterator<OpenDefinitionsDocument> iter;
237+
if (!selOnly) {
238+
iter = _model.getDocumentNavigator().getDocuments().iterator();
239+
}
240+
else {
241+
iter = _model.getDocumentNavigator().getSelectedDocuments().iterator();
242+
}
233243
while (iter.hasNext()) {
234244
OpenDefinitionsDocument o = iter.next();
235-
DefinitionsPane pane = _mainFrame.getDefPaneGivenODD(o);
245+
final DefinitionsPane pane = _mainFrame.getDefPaneGivenODD(o);
236246
try {
237247
ArrayList<String> colors = generator.getLineColorsForClass(o.getQualifiedClassName());
238248

@@ -253,9 +263,42 @@ private void highlight(ReportGenerator generator) {
253263
c = Color.yellow;
254264
}
255265

256-
257-
pane.getHighlightManager().
266+
final HighlightInfo info = pane.getHighlightManager().
258267
addHighlight(o._getOffset(i), o._getOffset(i+1), new ReverseHighlighter.DrJavaHighlightPainter(c));
268+
269+
270+
271+
272+
CompilerListener removeHighlight = new DummyCompilerListener() {
273+
@Override public void compileAborted(Exception e) {
274+
// gets called if there are modified files and the user chooses NOT to save the files
275+
// see bug report 2582488: Hangs If Testing Modified File, But Choose "No" for Saving
276+
final CompilerListener listenerThis = this;
277+
_model.getCompilerModel().removeListener(listenerThis);
278+
}
279+
280+
@Override public void compileEnded(File workDir, List<? extends File> excludedFiles) {
281+
final CompilerListener listenerThis = this;
282+
try {
283+
if (_model.hasOutOfSyncDocuments() || _model.getNumCompilerErrors() > 0) {
284+
return;
285+
}
286+
EventQueue.invokeLater(new Runnable() { // defer running this code; would prefer to waitForInterpreter
287+
public void run() {pane.getHighlightManager().removeHighlight(info);}
288+
});
289+
}
290+
finally { // always remove this listener after its first execution
291+
EventQueue.invokeLater(new Runnable() {
292+
public void run() { _model.getCompilerModel().removeListener(listenerThis); }
293+
});
294+
}
295+
}
296+
297+
298+
}; //end coverage listener
299+
300+
301+
_model.getCompilerModel().addListener(removeHighlight);
259302
}
260303
}
261304
catch (ClassNameNotFoundException e) {

0 commit comments

Comments
 (0)