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
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
|
/*
* SonarQube
* Copyright (C) 2009-2019 SonarSource SA
* mailto:info AT sonarsource DOT com
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 3 of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program; if not, write to the Free Software Foundation,
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
package org.sonar.api.issue;
import java.io.Serializable;
import java.util.Collection;
import java.util.Date;
import java.util.List;
import java.util.Map;
import javax.annotation.CheckForNull;
import org.sonar.api.rule.RuleKey;
import org.sonar.api.utils.Duration;
import static java.util.Arrays.asList;
/**
* @since 3.6
*/
public interface Issue extends Serializable {
/**
* Maximum number of characters in the message.
* In theory it should be 4_000 UTF-8 characters but unfortunately
* Oracle DB does not support more than 4_000 bytes, even if column
* issues.message is created with type VARCHAR2(4000 CHAR).
* In order to have the same behavior on all databases, message
* is truncated to 4_000 / 3 (maximum bytes per UTF-8 character)
* = 1_333 characters.
*/
int MESSAGE_MAX_SIZE = 1_333;
/**
* Default status when creating an issue.
*/
String STATUS_OPEN = "OPEN";
String STATUS_CONFIRMED = "CONFIRMED";
String STATUS_REOPENED = "REOPENED";
String STATUS_RESOLVED = "RESOLVED";
String STATUS_CLOSED = "CLOSED";
String RESOLUTION_FIXED = "FIXED";
/**
* Resolution when issue is flagged as false positive.
*/
String RESOLUTION_FALSE_POSITIVE = "FALSE-POSITIVE";
/**
* Resolution when rule has been uninstalled or disabled in the Quality profile.
*/
String RESOLUTION_REMOVED = "REMOVED";
/**
* Issue is irrelevant in the context and was muted by user.
* @since 5.1
*/
String RESOLUTION_WONT_FIX = "WONTFIX";
List<String> RESOLUTIONS = asList(RESOLUTION_FALSE_POSITIVE, RESOLUTION_WONT_FIX, RESOLUTION_FIXED, RESOLUTION_REMOVED);
/**
* @since 7.8
*/
String STATUS_TO_REVIEW = "TOREVIEW";
/**
* @since 7.8
*/
String STATUS_IN_REVIEW = "INREVIEW";
/**
* @since 7.8
*/
String STATUS_REVIEWED = "REVIEWED";
/**
* Return all available statuses
*
* @since 4.4
*/
List<String> STATUSES = asList(STATUS_OPEN, STATUS_CONFIRMED, STATUS_REOPENED, STATUS_RESOLVED, STATUS_CLOSED);
/**
* Unique generated key. It looks like "d2de809c-1512-4ae2-9f34-f5345c9f1a13".
*/
String key();
/**
* Components are modules ("my_project"), directories ("my_project:my/dir") or files ("my_project:my/file.c").
* Keys of Java packages and classes are currently in a special format: "my_project:com.company" and "my_project:com.company.Foo".
*/
String componentKey();
RuleKey ruleKey();
String language();
/**
* See constants in {@link org.sonar.api.rule.Severity}.
*/
String severity();
@CheckForNull
String message();
/**
* Optional line number. If set, then it's greater than or equal 1.
*/
@CheckForNull
Integer line();
/**
* Arbitrary distance to threshold for resolving the issue.
* <br>
* For examples:
* <ul>
* <li>for the rule "Avoid too complex methods" : current complexity - max allowed complexity</li>
* <li>for the rule "Avoid Duplications" : number of duplicated blocks</li>
* <li>for the rule "Insufficient Line Coverage" : number of lines to cover to reach the accepted threshold</li>
* </ul>
*
* @since 5.5
*/
@CheckForNull
Double gap();
/**
* See constant values in {@link Issue}.
*/
String status();
/**
* The type of resolution, or null if the issue is not resolved. See constant values in {@link Issue}.
*/
@CheckForNull
String resolution();
/**
* UUID of the user who is assigned to this issue. Null if the issue is not assigned.
*/
@CheckForNull
String assignee();
Date creationDate();
Date updateDate();
/**
* Date when status was set to {@link Issue#STATUS_CLOSED}, else null.
*/
@CheckForNull
Date closeDate();
@CheckForNull
String attribute(String key);
/**
* Empty on batch side since version 5.2. Attributes are moved to server's Compute Engine. No use-case for keeping them
* on batch side for now
*/
Map<String, String> attributes();
/**
* Login of the SCM account that introduced this issue. Requires the
* <a href="http://www.sonarsource.com/products/plugins/developer-tools/developer-cockpit/">Developer Cockpit Plugin</a> to be installed.
*/
@CheckForNull
String authorLogin();
/**
* Non-null list of comments, ordered by chronological order.
*
* @deprecated since 7.2, comments are not more available
*/
@Deprecated
List<IssueComment> comments();
/**
* During a scan return if the current issue is a new one.
* @return always false on server side
* @since 4.0
*/
boolean isNew();
/**
* During a scan returns true if the issue is copied from another branch.
* @since 6.6
*/
boolean isCopied();
/**
* @since 5.5
*/
@CheckForNull
Duration effort();
/**
* @since 5.0
*/
String projectKey();
/**
* @since 5.0
*/
String projectUuid();
/**
* @since 5.0
*/
String componentUuid();
/**
* @since 5.1
*/
Collection<String> tags();
}
|