forked from deepakazad/eclipse.platform.text
-
Notifications
You must be signed in to change notification settings - Fork 0
/
ProblemMarkerCodeMining.java
154 lines (138 loc) · 4.35 KB
/
ProblemMarkerCodeMining.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
package org.eclipse.ui.internal.genericeditor;
import org.eclipse.core.resources.IMarker;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.jface.text.BadLocationException;
import org.eclipse.jface.text.IDocument;
import org.eclipse.jface.text.codemining.ICodeMiningProvider;
import org.eclipse.jface.text.codemining.LineHeaderCodeMining;
import org.eclipse.swt.custom.StyledText;
import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.graphics.GC;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.graphics.Point;
import org.eclipse.ui.internal.ide.IDEInternalWorkbenchImages;
public class ProblemMarkerCodeMining extends LineHeaderCodeMining
{
public static final int SEVERITY_UNKNOWN = -1;
private int severity = SEVERITY_UNKNOWN;
public ProblemMarkerCodeMining(IDocument document, IMarker marker, ICodeMiningProvider provider) throws IllegalArgumentException, BadLocationException
{
super(extractLineNumber(marker), document, provider);
setLabel(convertMarkerToLabel(marker));
extractSeverity(marker);
}
@Override
public Point draw(GC gc, StyledText textWidget, Color color, int x, int y)
{
int textX = x;
ImageDescriptor imageDescriptor;
switch (this.severity)
{
case IMarker.SEVERITY_INFO:
imageDescriptor = IDEInternalWorkbenchImages.getImageDescriptor(IDEInternalWorkbenchImages.IMG_OBJS_INFO_PATH);
break;
case IMarker.SEVERITY_WARNING:
imageDescriptor = IDEInternalWorkbenchImages.getImageDescriptor(IDEInternalWorkbenchImages.IMG_OBJS_WARNING_PATH);
break;
case IMarker.SEVERITY_ERROR:
imageDescriptor = IDEInternalWorkbenchImages.getImageDescriptor(IDEInternalWorkbenchImages.IMG_OBJS_ERROR_PATH);
break;
default:
imageDescriptor = null;
break;
}
if (imageDescriptor != null)
{
Image image = null;
final int zoom = textWidget.getMonitor().getZoom();
textX = x + imageDescriptor.getImageData(zoom).width + 2;
image = imageDescriptor.createImage();
if (image != null)
{
try
{
gc.drawImage(image, x, y);
}
finally
{
image.dispose();
}
}
}
return super.draw(gc, textWidget, color, textX, y);
}
private static int extractLineNumber(IMarker marker) throws IllegalArgumentException
{
try
{
Object lineNum = marker.getAttribute(IMarker.LINE_NUMBER);
if (lineNum instanceof Integer)
{
final int result = Math.max(0, (Integer)lineNum - 1);
return result;
}
}
catch (CoreException e)
{
// do nothing
}
throw new IllegalArgumentException("cannot retrieve line number from " + marker); //$NON-NLS-1$
}
private void extractSeverity(IMarker marker)
{
try
{
Object severityObject = marker.getAttribute(IMarker.SEVERITY);
if (severityObject instanceof Integer)
{
this.severity = (Integer)severityObject;
}
}
catch (CoreException e)
{
// do nothing
}
}
private String convertMarkerToLabel(IMarker marker) throws IllegalArgumentException
{
try
{
Object message = marker.getAttribute(IMarker.MESSAGE);
if (message != null)
{
return message.toString();
// StringBuilder result = new StringBuilder();
// prependSeveritySymbol(marker, result);
// result.append(message);
// return result.toString();
}
}
catch (CoreException e)
{
// do nothing
}
throw new IllegalArgumentException("cannot retrieve message from " + marker); //$NON-NLS-1$
}
// private void prependSeveritySymbol(IMarker m, StringBuilder result) throws CoreException
// {
// Object severity = m.getAttribute(IMarker.SEVERITY);
// if (severity instanceof Integer)
// {
// switch ((Integer)severity)
// {
// case IMarker.SEVERITY_ERROR:
// result.append("⛔ "); //$NON-NLS-1$
// break;
// case IMarker.SEVERITY_WARNING:
// result.append("⚠️ "); //$NON-NLS-1$
// break;
// case IMarker.SEVERITY_INFO:
// result.append("ℹ️ "); //$NON-NLS-1$
// break;
// default:
// break;
// }
// }
// }
}