JavaNCSS Metric Results

[ package ] [ object ] [ method ] [ explanation ]

The following document contains the results of a JavaNCSS metric analysis, using JavaNCSS version 32.53.
JavaNCSS web site.

Packages

[ package ] [ object ] [ method ] [ explanation ]

Packages sorted by NCSS.

PackageClassesMethodsNCSSJavadocsJavadoc linesSingle lines commentMulti lines comment
org.apache.commons.ognl1181022624033920611452322
org.apache.commons.ognl.enhance9484004629215209
org.apache.commons.ognl.internal.entry1734323153360
org.apache.commons.ognl.internal166431211350356
Classes totalMethods totalNCSS totalJavadocsJavadoc linesSingle lines commentMulti lines comment
1601168727539723931633247

Objects

[ package ] [ object ] [ method ] [ explanation ]

TOP 30 classes containing the most NCSS.

ObjectNCSSMethodsClassesJavadocs
org.apache.commons.ognl.OgnlRuntime835103040
org.apache.commons.ognl.OgnlOps55174019
org.apache.commons.ognl.OgnlContext33358013
org.apache.commons.ognl.enhance.ExpressionCompiler27320018
org.apache.commons.ognl.ASTProperty2491603
org.apache.commons.ognl.ASTChain2011301
org.apache.commons.ognl.ToStringVisitor1885501
org.apache.commons.ognl.SimpleNode1773205
org.apache.commons.ognl.ASTMethod1561203
org.apache.commons.ognl.OgnlCache1402132
org.apache.commons.ognl.ASTCtor1381003
org.apache.commons.ognl.Ognl12847040
org.apache.commons.ognl.ASTAdd123801
org.apache.commons.ognl.ListPropertyAccessor117601
org.apache.commons.ognl.ObjectPropertyAccessor1121103
org.apache.commons.ognl.Evaluation10125026
org.apache.commons.ognl.internal.entry.PropertyDescriptorCacheEntryFactory82400
org.apache.commons.ognl.ArrayPropertyAccessor81501
org.apache.commons.ognl.ASTList81801
org.apache.commons.ognl.ASTStaticField801304
org.apache.commons.ognl.ASTStaticMethod791104
org.apache.commons.ognl.ASTAnd771003
org.apache.commons.ognl.ASTOr771001
org.apache.commons.ognl.MapPropertyAccessor71401
org.apache.commons.ognl.ASTConst671102
org.apache.commons.ognl.JJTOgnlParserState621201
org.apache.commons.ognl.ASTSequence581201
org.apache.commons.ognl.ASTTest53701
org.apache.commons.ognl.ExpressionNode51702
org.apache.commons.ognl.OgnlParserTreeConstants49001

TOP 30 classes containing the most methods.

ObjectNCSSMethodsClassesJavadocs
org.apache.commons.ognl.OgnlRuntime835103040
org.apache.commons.ognl.OgnlOps55174019
org.apache.commons.ognl.OgnlContext33358013
org.apache.commons.ognl.ToStringVisitor1885501
org.apache.commons.ognl.Ognl12847040
org.apache.commons.ognl.NodeVisitor474600
org.apache.commons.ognl.SimpleNode1773205
org.apache.commons.ognl.Evaluation10125026
org.apache.commons.ognl.OgnlCache1402132
org.apache.commons.ognl.enhance.ExpressionCompiler27320018
org.apache.commons.ognl.ASTProperty2491603
org.apache.commons.ognl.ASTChain2011301
org.apache.commons.ognl.ASTStaticField801304
org.apache.commons.ognl.ASTVarRef481302
org.apache.commons.ognl.ASTMethod1561203
org.apache.commons.ognl.ASTSequence581201
org.apache.commons.ognl.JJTOgnlParserState621201
org.apache.commons.ognl.Node1312011
org.apache.commons.ognl.ASTConst671102
org.apache.commons.ognl.ASTStaticMethod791104
org.apache.commons.ognl.DefaultMemberAccess461102
org.apache.commons.ognl.EvaluationPool2011010
org.apache.commons.ognl.ObjectPropertyAccessor1121103
org.apache.commons.ognl.ASTAnd771003
org.apache.commons.ognl.ASTCtor1381003
org.apache.commons.ognl.ASTInstanceof311001
org.apache.commons.ognl.ASTOr771001
org.apache.commons.ognl.OgnlException4410011
org.apache.commons.ognl.ASTMap42902
org.apache.commons.ognl.ASTAdd123801

Averages.

NCSS averageProgram NCSSClasses averageMethods averageJavadocs average
42.537,275.000.047.302.48

Methods

[ package ] [ object ] [ method ] [ explanation ]

TOP 30 Methods containing the most NCSS.

MethodsNCSSCCNJavadocs
org.apache.commons.ognl.ASTProperty.toSetSourceString(OgnlContext,Object)95440
org.apache.commons.ognl.ASTProperty.toGetSourceString(OgnlContext,Object)86340
org.apache.commons.ognl.ASTCtor.toGetSourceString(OgnlContext,Object)85420
org.apache.commons.ognl.ASTAdd.toGetSourceString(OgnlContext,Object)77640
org.apache.commons.ognl.OgnlOps.convertValue(Object,T,boolean)69460
org.apache.commons.ognl.ASTList.toGetSourceString(OgnlContext,Object)63340
org.apache.commons.ognl.ASTMethod.toGetSourceString(OgnlContext,Object)61310
org.apache.commons.ognl.ASTMethod.toSetSourceString(OgnlContext,Object)60360
org.apache.commons.ognl.ASTChain.setValueBody(OgnlContext,Object,Object)48230
org.apache.commons.ognl.ASTStaticMethod.toGetSourceString(OgnlContext,Object)47230
org.apache.commons.ognl.OgnlOps.getEscapedChar(char)45130
org.apache.commons.ognl.ASTChain.getValueBody(OgnlContext,Object)44200
org.apache.commons.ognl.ASTChain.toGetSourceString(OgnlContext,Object)44280
org.apache.commons.ognl.OgnlRuntime.getMethod(OgnlContext,Class,String,Node[],boolean)44220
org.apache.commons.ognl.OgnlRuntime.callAppropriateMethod(OgnlContext,Object,Object,String,String,Method,Object[])43190
org.apache.commons.ognl.ASTConst.toGetSourceString(OgnlContext,Object)40230
org.apache.commons.ognl.OgnlRuntime.getReadMethod(Class,String,int)40360
org.apache.commons.ognl.enhance.ExpressionCompiler.compileExpression(OgnlContext,Node,Object)39101
org.apache.commons.ognl.OgnlContext.put(String,Object)39140
org.apache.commons.ognl.ASTChain.toSetSourceString(OgnlContext,Object)37260
org.apache.commons.ognl.ASTTest.toGetSourceString(OgnlContext,Object)36250
org.apache.commons.ognl.internal.entry.PropertyDescriptorCacheEntryFactory.findObjectIndexedPropertyDescriptors(Class,PropertyDescriptor)36220
org.apache.commons.ognl.ArrayPropertyAccessor.getProperty(Object,Object,Object)34150
org.apache.commons.ognl.ASTCtor.getValueBody(OgnlContext,Object)34130
org.apache.commons.ognl.enhance.ExpressionCompiler.containsMethod(Method,Class)34191
org.apache.commons.ognl.OgnlRuntime.callConstructor(OgnlContext,String,Object[])33180
org.apache.commons.ognl.ComparisonExpression.toGetSourceString(OgnlContext,Object)32141
org.apache.commons.ognl.ListPropertyAccessor.setProperty(Object,Object,Object,Object)32220
org.apache.commons.ognl.OgnlContext.get(Object)32130
org.apache.commons.ognl.ListPropertyAccessor.getProperty(Object,Object,Object)31230

Averages.

Program NCSSNCSS averageCCN averageJavadocs average
7,275.005.382.990.23

Explanations

[ package ] [ object ] [ method ] [ explanation ]

Non Commenting Source Statements (NCSS)

Statements for JavaNCSS are not statements as specified in the Java Language Specification but include all kinds of declarations too. Roughly spoken, NCSS is approximately equivalent to counting ';' and '{' characters in Java source files.

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.

Examples
Package declarationpackage java.lang;
Import declarationimport java.awt.*;
Class declaration
  • public class Foo {
  • public class Foo extends Bla {
Interface declarationpublic interface Able ; {
Field declaration
  • int a;
  • int a, b, c = 5, d = 6;
Method declaration
  • public void cry();
  • public void gib() throws DeadException {
Constructor declarationpublic Foo() {
Constructor invocation
  • this();
  • super();
Statement declaration
  • i = 0;
  • if (ok)
  • if (exit) {
  • if (3 == 4);
  • if (4 == 4) { ;
  • } else {
Label declarationfine :

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.

Cyclomatic Complexity Number (CCN)

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.

Each method has a minimum value of 1 per default. For each of the following Java keywords/statements this value gets incremented by one:

  • if
  • for
  • while
  • case
  • catch

Also if the control flow of a method returns abortively the CCNvalue will be incremented by one:

  • if
  • for

An ordinary return at the end of method will not be counted.

Note that 'else', 'default', and 'finally' don't increment the CCN value any further. On the other hand, a simple method with a 'switch' statement and a huge block of 'case' statements can have a surprisingly high CCN value (still it has the same value when converting a 'switch' block to an equivalent sequence of 'if' statements).