-
Notifications
You must be signed in to change notification settings - Fork 0
/
specification.html
309 lines (204 loc) · 8.49 KB
/
specification.html
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
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
<!DOCTYPE html>
<!--
| Generated by Apache Maven Doxia Site Renderer 1.8 from src/site/xhtml/specification.xhtml at 2019-08-07
| Rendered using Apache Maven Fluido Skin 1.7
-->
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="Date-Revision-yyyymmdd" content="20190807" />
<meta http-equiv="Content-Language" content="en" />
<title>JavaNCSS – JavaNCSS - Specification</title>
<link rel="stylesheet" href="./css/apache-maven-fluido-1.7.min.css" />
<link rel="stylesheet" href="./css/site.css" />
<link rel="stylesheet" href="./css/print.css" media="print" />
<script type="text/javascript" src="./js/apache-maven-fluido-1.7.min.js"></script>
<link rel="SHORTCUT ICON" href="favjavancss.ico" /> </head>
<body class="topBarDisabled">
<div class="container-fluid">
<div id="banner">
<div class="pull-left"><a href="http://javancss.github.io/" id="bannerLeft"><h2>JavaNCSS</h2>
</a></div>
<div class="pull-right"></div>
<div class="clear"><hr/></div>
</div>
<div id="breadcrumbs">
<ul class="breadcrumb">
<li class=""><a href="http://www.kclee.de/clemens/java/" class="externalLink" title="Chr. Clemens Lee">Chr. Clemens Lee</a><span class="divider">/</span></li>
<li class=""><a href="http://javancss.github.io/" class="externalLink" title="JavaNCSS">JavaNCSS</a><span class="divider">/</span></li>
<li class="active ">JavaNCSS - Specification</li>
<li id="publishDate" class="pull-right"><span class="divider">|</span> Last Published: 2019-08-07</li>
<li id="projectVersion" class="pull-right"><span class="divider">|</span>Version: 34.55-SNAPSHOT</li>
<li class="pull-right"><span class="divider">|</span>
<a href="http://ant.apache.org/" class="externalLink" title="Ant">Ant</a></li>
<li class="pull-right"><span class="divider">|</span>
<a href="http://maven.apache.org/" class="externalLink" title="Maven">Maven</a></li>
<li class="pull-right"><a href="http://www.mojohaus.org/javancss-maven-plugin/" class="externalLink" title="JavaNCSS Maven Plugin">JavaNCSS Maven Plugin</a></li>
</ul>
</div>
<div class="row-fluid">
<div id="leftColumn" class="span2">
<div class="well sidebar-nav">
<ul class="nav nav-list">
<li class="nav-header">General Information</li>
<li><a href="index.html" title="Home"><span class="none"></span>Home</a></li>
<li><a href="usage.html" title="Usage"><span class="none"></span>Usage</a></li>
<li class="active"><a href="#"><span class="none"></span>Specification</a></li>
<li><a href="release-history.html" title="Release History"><span class="none"></span>Release History</a></li>
<li><a href="credits.html" title="Credits"><span class="none"></span>Credits</a></li>
<li><a href="links.html" title="Related Links"><span class="none"></span>Related Links</a></li>
<li class="nav-header">Development</li>
<li><a href="development.html" title="Development"><span class="none"></span>Development</a></li>
<li><a href="todo.html" title="TODO"><span class="none"></span>TODO</a></li>
<li class="nav-header">Project Documentation</li>
<li><a href="project-info.html" title="Project Information"><span class="icon-chevron-right"></span>Project Information</a></li>
<li><a href="project-reports.html" title="Project Reports"><span class="icon-chevron-right"></span>Project Reports</a></li>
</ul>
<hr />
<div id="poweredBy">
<div class="clear"></div>
<div class="clear"></div>
<div class="clear"></div>
<div class="clear"></div>
<a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"><img class="builtBy" alt="Built by Maven" src="./images/logos/maven-feather.png" /></a>
</div>
</div>
</div>
<div id="bodyColumn" class="span10" >
<table border="0" class="table table-striped">
<tr class="a">
<td>
<center>
<h1>JavaNCSS - Specification</h1></center>
</td>
</tr>
</table>
<div class="section">
<h2><a name="Specification"></a><a name="specification"></a>Specification</h2>
<div class="section">
<h3><a name="Non_Commenting_Source_Statements_.28NCSS.29"></a>Non Commenting Source Statements (NCSS)</h3>
Statements for JavaNCSS are not statements as specified in the Java Language
Specification but include all kinds of declarations too.
<br />Roughly spoken, NCSS is approximately equivalent to counting ';' and
'{' characters in Java source files.
<p>Actually, the NCSS counter gets incremented by one for each:
<br /> 
<br /> </p>
<center>
<table border="0" class="table table-striped">
<tr class="a">
<th></th>
<th>Examples</th>
<th>Comment</th>
</tr>
<tr class="b">
<td>Package declaration</td>
<td><tt>package java.lang;</tt></td>
<td></td>
</tr>
<tr class="a">
<td>Import declaration</td>
<td><tt>import java.awt.*;</tt></td>
<td></td>
</tr>
<tr class="b">
<td valign="top">Class declaration</td>
<td>- <tt>public class Foo {</tt>
<br />- <tt>public class Foo extends Bla {</tt></td>
<td></td>
</tr>
<tr class="a">
<td valign="top">Interface declaration</td>
<td><tt>public interface Able {</tt></td>
<td></td>
</tr>
<tr class="b">
<td valign="top">Field declaration</td>
<td valign="top">- <tt>int a;</tt>
<br />- <tt>int a, b, c = 5, d = 6;</tt></td>
<td>No matter how many fields get actually declared through a comma separated
list, and no matter if these fields get actually initialized, only
one statement is counted. So "int a, b, c = 5, d = 6;" gets only +1 count,
not four or even six (let me know if there is good reason to count it differently).</td>
</tr>
<tr class="a">
<td valign="top">Method declaration</td>
<td>- <tt>public void cry();</tt>
<br />- <tt>public void gib() throws DeadException {</tt></td>
<td></td>
</tr>
<tr class="b">
<td>Constructor declaration</td>
<td valign="top"><tt>public Foo() {</tt></td>
<td></td>
</tr>
<tr class="a">
<td valign="top">Constructor invocation</td>
<td>- <tt>this();</tt>
<br />- <tt>super();</tt></td>
<td></td>
</tr>
<tr class="b">
<td valign="top">Statement</td>
<td>- <tt>i = 0;</tt>
<br />- <tt>if (ok)</tt>
<br />- <tt>if (exit) {</tt>
<br />- <tt>if (3 == 4);</tt>
<br />- <tt>if (4 == 4) { ; }</tt>
<br />- <tt>} else {</tt></td>
<td valign="top">expression, if, else, while, do, for, switch, break,
continue, return, throw, synchronized, catch, finally</td>
</tr>
<tr class="a">
<td>Label</td>
<td><tt>fine :</tt></td>
<td>normal, case, default</td>
</tr>
</table></center>
 <br />
Not counted are empty statements, empty blocks or semicolons after closing
brackets. Of course, comments don't get counted too. Closing brackets also
never get counted, the same applies to blocks in general.
<p>In some cases consecutive semicolons are illegal according to the JLS
but JavaNCSS still tolerates them (thought JavaNCSS is still more strict
as 'javac'). Nevertheless they are never counted as two statements.</p>
</div>
<div class="section">
<h3><a name="Cyclomatic_Complexity_Number_.28CCN.29"></a>Cyclomatic Complexity Number (CCN)</h3>
CCN is also know as McCabe Metric. There exists a much hyped theory behind
it based on graph theory, but it all comes down to simply counting 'if',
'for', 'while' statements etc. in a method. Whenever the control flow of
a method splits, the "CCN counter" gets incremented by one.
<p>Each method has a minimum value of 1 per default. For each of the following
Java keywords/statements this value gets incremented by one:</p>
<ul>
<li><tt>if</tt></li>
<li><tt>for</tt></li>
<li><tt>while</tt></li>
<li><tt>case</tt></li>
<li><tt>catch</tt></li>
<li><tt>&&</tt></li>
<li><tt>||</tt></li>
<li><tt>?</tt></li>
</ul>
Note that <tt>else</tt>, <tt>default</tt>, and <tt>finally</tt> don't increment the CCN
value any further. On the other hand, a simple method with a <tt>switch</tt> statement
and a huge block of <tt>case</tt> statements can have a surprisingly high CCN value (still it has the same value when converting a <tt>switch</tt>
block to an equivalent sequence of <tt>if</tt> statements).
</div></div>
</div>
</div>
</div>
<hr/>
<footer>
<div class="container-fluid">
<div class="row-fluid">
<p>Copyright ©1997–2019
Chr. Clemens Lee and companions.
All rights reserved.</p>
</div>
</div>
</footer>
</body>
</html>