Skip to content

Commit b41fc73

Browse files
committed
syntax highlighting for all open documents
1 parent 8c74da4 commit b41fc73

File tree

2 files changed

+75
-3
lines changed

2 files changed

+75
-3
lines changed

drjava/src/edu/rice/cs/drjava/ui/ReportGenerator.java

Lines changed: 29 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,9 @@ public class ReportGenerator {
5858
private final ArrayList<String> targetNames;
5959
private final String mainClassFileName;
6060

61+
private CoverageBuilder cb;
62+
63+
6164
/**
6265
* A class loader that loads classes from in-memory data.
6366
*/
@@ -151,7 +154,7 @@ public ReportGenerator(final SingleDisplayModel _model, final List<OpenDefinitio
151154

152155
List<File> targets = new ArrayList<File>();
153156
for(File dir:CollectUtil.makeList(_model.getClassPath())){
154-
if( dir.getName().equals("lib") || dir.getName().equals("base") || dir.getName().equals("test"))
157+
if(!dir.isDirectory() || dir.getName().equals("lib") || dir.getName().equals("base") || dir.getName().equals("test"))
155158
continue;
156159
targets.addAll(rec_init_target(dir));
157160
}
@@ -280,6 +283,7 @@ public void create() throws Exception {
280283
analyzer.analyzeClass(getTargetClass(targets.get(i)), targetNames.get(i));
281284
}
282285

286+
this.cb = coverageBuilder;
283287
printCoverage(coverageBuilder);
284288

285289
// Run the structure analyzer on a single class folder to build up
@@ -316,6 +320,30 @@ private void createReport(final IBundleCoverage bundleCoverage, ExecutionDataSto
316320

317321
}
318322

323+
324+
public ArrayList<String> getLineColorsForClass(String className) {
325+
326+
ArrayList<String> lineColors = new ArrayList<String>();
327+
328+
for (final IClassCoverage cc : cb.getClasses()) {
329+
if (!cc.getName().equals(className)) {
330+
continue;
331+
}
332+
333+
for (int i = 0; i < cc.getFirstLine(); i++) {
334+
lineColors.add("");
335+
336+
}
337+
338+
for (int i = cc.getFirstLine(); i <= cc.getLastLine(); i++) {
339+
lineColors.add(getColor(cc.getLine(i).getStatus()));
340+
}
341+
}
342+
343+
return lineColors;
344+
}
345+
346+
319347
private void printCoverage(CoverageBuilder coverageBuilder){
320348
for (final IClassCoverage cc : coverageBuilder.getClasses()) {
321349
System.out.printf("Coverage of class %s%n", cc.getName());

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

Lines changed: 46 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -43,14 +43,18 @@
4343
import java.io.PrintWriter;
4444
import java.io.StringWriter;
4545
import java.util.ArrayList;
46+
import java.util.Iterator;
4647
import java.util.Vector;
4748
import java.util.Map;
4849
import java.util.HashMap;
50+
4951
import javax.swing.*;
5052
import javax.swing.event.*;
5153
import javax.swing.border.EmptyBorder;
5254

55+
import edu.rice.cs.drjava.model.OpenDefinitionsDocument;
5356
import edu.rice.cs.drjava.model.SingleDisplayModel;
57+
import edu.rice.cs.drjava.model.definitions.ClassNameNotFoundException;
5458
import edu.rice.cs.drjava.config.Option;
5559
import edu.rice.cs.drjava.config.OptionParser;
5660
import edu.rice.cs.drjava.config.OptionConstants;
@@ -59,12 +63,10 @@
5963
import edu.rice.cs.drjava.ui.config.*;
6064
import edu.rice.cs.drjava.ui.*;
6165
import edu.rice.cs.drjava.DrJava;
62-
6366
import edu.rice.cs.plt.iter.IterUtil;
6467
import edu.rice.cs.plt.collect.CollectUtil;
6568
import edu.rice.cs.plt.lambda.Runnable1;
6669
import edu.rice.cs.plt.lambda.LambdaUtil;
67-
6870
import edu.rice.cs.util.FileOps;
6971
import edu.rice.cs.util.AbsRelFile;
7072
import edu.rice.cs.util.swing.FileSelectorComponent;
@@ -75,6 +77,7 @@
7577
import edu.rice.cs.util.swing.Utilities;
7678

7779
import javax.swing.filechooser.FileFilter;
80+
7881
import java.awt.Desktop;
7982
import java.net.URI;
8083
import java.net.URISyntaxException;;
@@ -207,9 +210,12 @@ public boolean generateReport(){
207210
if(_useCurrentFile.isSelected()){
208211
final ReportGenerator generator = new ReportGenerator(_model, _model.getDocumentNavigator().getSelectedDocuments(), _outputDirSelector.getFileFromField());
209212
generator.create();
213+
highlight(generator);
214+
210215
}else{
211216
final ReportGenerator generator = new ReportGenerator(_model, _srcRootSelector.getFileFromField(), _mainDocumentSelector.getText(), _outputDirSelector.getFileFromField());
212217
generator.create();
218+
highlight(generator);
213219
}
214220

215221
} catch (Exception e){
@@ -220,6 +226,44 @@ public boolean generateReport(){
220226
return true;
221227
}
222228

229+
230+
private void highlight(ReportGenerator generator) {
231+
232+
Iterator<OpenDefinitionsDocument> iter = _model.getDocumentNavigator().getDocuments().iterator();
233+
while (iter.hasNext()) {
234+
OpenDefinitionsDocument o = iter.next();
235+
DefinitionsPane pane = _mainFrame.getDefPaneGivenODD(o);
236+
try {
237+
ArrayList<String> colors = generator.getLineColorsForClass(o.getQualifiedClassName());
238+
239+
for (int i = 0; i < colors.size(); i ++) {
240+
String color = colors.get(i);
241+
242+
Color c = Color.black;
243+
if (color.equals("")) {
244+
continue;
245+
}
246+
if (color.equals("green")) {
247+
c = Color.green;
248+
}
249+
if (color.equals("red")) {
250+
c = Color.red;
251+
}
252+
if (color.equals("yellow")) {
253+
c = Color.yellow;
254+
}
255+
256+
257+
pane.getHighlightManager().
258+
addHighlight(o._getOffset(i), o._getOffset(i+1), new ReverseHighlighter.DrJavaHighlightPainter(c));
259+
}
260+
}
261+
catch (ClassNameNotFoundException e) {
262+
continue;
263+
}
264+
265+
}
266+
}
223267

224268
/** Caches the settings in the global model */
225269
public boolean saveSettings() {//throws IOException {

0 commit comments

Comments
 (0)