use of org.eclipse.jface.text.codemining.ICodeMining in project eclipse.platform.text by eclipse.
the class CodeMiningLineContentAnnotation method redraw.
@Override
public void redraw() {
// redraw codemining annotation is done only if all current minings are resolved.
List<ICodeMining> minings = new ArrayList<>(fMinings);
for (ICodeMining mining : minings) {
if (!mining.isResolved()) {
// one of mining is not resolved, resolve it and then redraw the annotation.
mining.resolve(getViewer(), fMonitor).thenRunAsync(() -> {
this.redraw();
});
return;
}
}
// all minings are resolved, redraw the annotation
super.redraw();
}
use of org.eclipse.jface.text.codemining.ICodeMining in project eclipse.platform.text by eclipse.
the class CodeMiningLineContentAnnotation method update.
@Override
public void update(List<ICodeMining> minings, IProgressMonitor monitor) {
if (fResolvedMinings == null || (fResolvedMinings.length != minings.size())) {
// size of resolved minings are different from size of minings to update, initialize it with size of minings to update
fResolvedMinings = new ICodeMining[minings.size()];
}
// fill valid resolved minings with old minings.
int length = Math.min(fMinings.size(), minings.size());
for (int i = 0; i < length; i++) {
ICodeMining mining = fMinings.get(i);
if (mining.getLabel() != null) {
// mining was resolved without an error.
fResolvedMinings[i] = mining;
}
}
disposeMinings();
fMonitor = monitor;
fMinings.addAll(minings);
}
use of org.eclipse.jface.text.codemining.ICodeMining in project eclipse.platform.text by eclipse.
the class CodeMiningLineContentAnnotation method drawAndComputeWidth.
@Override
protected int drawAndComputeWidth(GC gc, StyledText textWidget, int offset, int length, Color color, int x, int y) {
List<ICodeMining> minings = new ArrayList<>(fMinings);
int nbDraw = 0;
int originalX = x;
int separatorWidth = -1;
boolean redrawn = false;
fBounds.clear();
for (int i = 0; i < minings.size(); i++) {
ICodeMining mining = minings.get(i);
// try to get the last resolved mining.
ICodeMining lastResolvedMining = (fResolvedMinings != null && fResolvedMinings.length > i) ? fResolvedMinings[i] : null;
if (mining.getLabel() != null) {
// mining is resolved without error, update the resolved mining list
fResolvedMinings[i] = mining;
} else if (!mining.isResolved()) {
// the mining is not resolved, draw the last resolved mining
mining = lastResolvedMining;
if (!redrawn) {
// redraw the annotation when mining is resolved.
redraw();
redrawn = true;
}
} else {
// the mining is resolved with error, draw the last resolved mining
mining = lastResolvedMining;
}
if (mining == null) {
// ignore the draw of mining
continue;
}
// draw the mining
if (nbDraw > 0) {
initGC(textWidget, color, gc);
gc.drawText(SEPARATOR, x, y);
if (separatorWidth == -1) {
separatorWidth = gc.stringExtent(SEPARATOR).x;
}
x += separatorWidth;
}
initGC(textWidget, color, gc);
Point loc = mining.draw(gc, textWidget, color, x, y);
fBounds.add(new Rectangle(x, y, loc.x, loc.y));
x += loc.x;
nbDraw++;
}
return x - originalX;
}
use of org.eclipse.jface.text.codemining.ICodeMining in project eclipse.platform.text by eclipse.
the class CodeMiningLineHeaderAnnotation method update.
@Override
public void update(List<ICodeMining> minings, IProgressMonitor monitor) {
if (fResolvedMinings == null || (fResolvedMinings.length != minings.size())) {
// size of resolved minings are different from size of minings to update, initialize it with size of minings to update
fResolvedMinings = new ICodeMining[minings.size()];
}
// fill valid resolved minings with old minings.
int length = Math.min(fMinings.size(), minings.size());
for (int i = 0; i < length; i++) {
ICodeMining mining = fMinings.get(i);
if (mining.getLabel() != null) {
fResolvedMinings[i] = mining;
}
}
disposeMinings();
fMonitor = monitor;
fMinings.addAll(minings);
}
use of org.eclipse.jface.text.codemining.ICodeMining in project eclipse.platform.text by eclipse.
the class CodeMiningLineHeaderAnnotation method redraw.
@Override
public void redraw() {
// redraw codemining annotation is done only if all current minings are resolved.
List<ICodeMining> minings = new ArrayList<>(fMinings);
for (ICodeMining mining : minings) {
if (!mining.isResolved()) {
// one of mining is not resolved, resolve it and then redraw the annotation.
mining.resolve(getViewer(), fMonitor).thenRunAsync(() -> {
this.redraw();
});
return;
}
}
// all minings are resolved, redraw the annotation
super.redraw();
}
Aggregations