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.

Package Classes Methods NCSS Javadocs Javadoc lines Single lines comment Multi lines comment
eu.emi.security.authn.x509.impl 20 143 1243 131 1238 6 144
eu.emi.security.authn.x509.proxy 15 118 896 112 833 11 170
eu.emi.security.authn.x509.helpers.proxy 14 81 773 69 599 5 256
eu.emi.security.authn.x509.helpers.pkipath 11 77 752 38 312 25 195
eu.emi.security.authn.x509.helpers.ocsp 12 53 721 26 158 6 47
eu.emi.security.authn.x509.helpers.ns 15 79 691 32 216 11 68
eu.emi.security.authn.x509.helpers.trust 13 74 631 21 139 6 51
eu.emi.security.authn.x509.helpers 15 81 620 71 452 10 99
eu.emi.security.authn.x509.helpers.crl 6 40 348 15 117 6 27
eu.emi.security.authn.x509 17 87 336 84 431 0 215
eu.emi.security.authn.x509.helpers.ssl 4 21 151 9 79 0 18
eu.emi.security.authn.x509.helpers.revocation 3 3 43 3 16 0 33
Classes total Methods total NCSS total Javadocs Javadoc lines Single lines comment Multi lines comment
145 857 7205 611 4590 86 1323

Objects

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

TOP 30 classes containing the most NCSS.

Object NCSS Methods Classes Javadocs
eu.emi.security.authn.x509.impl.CertificateUtils 249 25 1 19
eu.emi.security.authn.x509.helpers.pkipath.BCCertPathValidator 242 11 0 6
eu.emi.security.authn.x509.helpers.ocsp.OCSPClientImpl 239 13 0 4
eu.emi.security.authn.x509.proxy.ProxyChainInfo 230 20 0 20
eu.emi.security.authn.x509.helpers.proxy.ProxyGeneratorHelper 167 13 0 6
eu.emi.security.authn.x509.helpers.ns.GlobusNamespacesParser 164 12 0 2
eu.emi.security.authn.x509.proxy.BaseProxyCertificateOptions 150 41 0 42
eu.emi.security.authn.x509.impl.X509Formatter 143 5 0 5
eu.emi.security.authn.x509.helpers.crl.PlainCRLStoreSpi 133 17 1 9
eu.emi.security.authn.x509.helpers.CertificateHelpers 128 10 1 7
eu.emi.security.authn.x509.proxy.ProxyCSRInfo 113 13 0 11
eu.emi.security.authn.x509.helpers.ns.EuGridPmaNamespacesParser 113 6 0 1
eu.emi.security.authn.x509.helpers.proxy.ProxyAddressRestrictionData 102 14 0 11
eu.emi.security.authn.x509.impl.KeystoreCredential 100 7 0 3
eu.emi.security.authn.x509.impl.OpensslNameUtils 99 7 0 5
eu.emi.security.authn.x509.helpers.trust.DirectoryTrustAnchorStore 99 12 0 4
eu.emi.security.authn.x509.helpers.trust.OpensslTruststoreHelper 94 11 1 4
eu.emi.security.authn.x509.proxy.ProxyCSRGenerator 93 4 0 3
eu.emi.security.authn.x509.helpers.JavaAndBCStyle 85 7 0 5
eu.emi.security.authn.x509.helpers.pkipath.AbstractValidator 85 16 0 14
eu.emi.security.authn.x509.helpers.trust.LazyOpensslTrustAnchorStoreImpl 84 11 0 2
eu.emi.security.authn.x509.helpers.ocsp.OCSPResponsesCache 78 7 1 3
eu.emi.security.authn.x509.helpers.ssl.HostnameToCertificateChecker 76 7 1 4
eu.emi.security.authn.x509.helpers.ocsp.OCSPVerifier 70 3 0 1
eu.emi.security.authn.x509.helpers.ocsp.OCSPRespondersCache 67 7 1 3
eu.emi.security.authn.x509.impl.X500NameUtils 65 14 0 13
eu.emi.security.authn.x509.helpers.pkipath.ExtPKIXParameters2 65 9 1 1
eu.emi.security.authn.x509.helpers.proxy.X509v3CertificateBuilder 59 6 0 5
eu.emi.security.authn.x509.helpers.crl.LazyOpensslCRLStoreSpi 58 9 0 2
eu.emi.security.authn.x509.ValidationResult 58 11 0 11

TOP 30 classes containing the most methods.

Object NCSS Methods Classes Javadocs
eu.emi.security.authn.x509.proxy.BaseProxyCertificateOptions 150 41 0 42
eu.emi.security.authn.x509.impl.CertificateUtils 249 25 1 19
eu.emi.security.authn.x509.proxy.ProxyChainInfo 230 20 0 20
eu.emi.security.authn.x509.OCSPParametes 54 19 0 20
eu.emi.security.authn.x509.helpers.crl.PlainCRLStoreSpi 133 17 1 9
eu.emi.security.authn.x509.helpers.pkipath.AbstractValidator 85 16 0 14
eu.emi.security.authn.x509.impl.X500NameUtils 65 14 0 13
eu.emi.security.authn.x509.helpers.proxy.ProxyAddressRestrictionData 102 14 0 11
eu.emi.security.authn.x509.proxy.ProxyCSRInfo 113 13 0 11
eu.emi.security.authn.x509.RevocationParameters 36 13 1 14
eu.emi.security.authn.x509.helpers.proxy.ProxyGeneratorHelper 167 13 0 6
eu.emi.security.authn.x509.helpers.ocsp.OCSPClientImpl 239 13 0 4
eu.emi.security.authn.x509.helpers.ns.GlobusNamespacesParser 164 12 0 2
eu.emi.security.authn.x509.helpers.trust.DirectoryTrustAnchorStore 99 12 0 4
eu.emi.security.authn.x509.impl.CRLParameters 37 11 0 3
eu.emi.security.authn.x509.impl.OpensslCertChainValidator 51 11 0 11
eu.emi.security.authn.x509.helpers.trust.LazyOpensslTrustAnchorStoreImpl 84 11 0 2
eu.emi.security.authn.x509.helpers.trust.OpensslTruststoreHelper 94 11 1 4
eu.emi.security.authn.x509.helpers.pkipath.BCCertPathValidator 242 11 0 6
eu.emi.security.authn.x509.helpers.BinaryCertChainValidator 20 11 0 9
eu.emi.security.authn.x509.helpers.ReaderInputStream 57 11 0 12
eu.emi.security.authn.x509.ValidationResult 58 11 0 11
eu.emi.security.authn.x509.ValidationError 56 10 0 7
eu.emi.security.authn.x509.impl.PEMCredential 34 10 0 10
eu.emi.security.authn.x509.helpers.ns.AbstractNamespacesStore 55 10 0 4
eu.emi.security.authn.x509.helpers.CertificateHelpers 128 10 1 7
eu.emi.security.authn.x509.impl.ValidatorParams 25 9 0 10
eu.emi.security.authn.x509.helpers.ssl.CredentialX509KeyManager 20 9 0 1
eu.emi.security.authn.x509.helpers.crl.AbstractCRLStoreSPI 39 9 0 1
eu.emi.security.authn.x509.helpers.crl.LazyOpensslCRLStoreSpi 58 9 0 2

Averages.

NCSS average Program NCSS Classes average Methods average Javadocs average
40.16 7,205.00 0.08 5.91 4.21

Methods

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

TOP 30 Methods containing the most NCSS.

Methods NCSS CCN Javadocs
eu.emi.security.authn.x509.impl.X509Formatter.format(X509Certificate) 61 21 1
eu.emi.security.authn.x509.helpers.proxy.ProxyGeneratorHelper.addExtensions(BaseProxyCertificateOptions) 53 21 0
eu.emi.security.authn.x509.proxy.ProxyCSRGenerator.generateAttributes(ProxyCertificateOptions) 51 23 0
eu.emi.security.authn.x509.proxy.ProxyChainInfo.intersection(List[][][],List[],List[]) 40 14 1
eu.emi.security.authn.x509.helpers.FlexiblePEMReader.readPemObject() 40 13 1
eu.emi.security.authn.x509.helpers.pkipath.NonValidatingCertPathBuilder.build(X509Certificate,PKIXExtendedBuilderParameters,X509Certificate,X509Certificate[]) 40 23 0
eu.emi.security.authn.x509.impl.X509Formatter.appendAltNames(StringBuilder,String,String,List) 39 14 0
eu.emi.security.authn.x509.helpers.ocsp.OCSPClientImpl.verifyResponse(OCSPResp,X509Certificate,X509Certificate,X509Certificate[]) 39 26 1
eu.emi.security.authn.x509.helpers.ns.GlobusNamespacesParser.makeRegexpClassicWildcard(String) 38 14 1
eu.emi.security.authn.x509.helpers.pkipath.BCCertPathValidator.checkNonProxyChain(X509Certificate[],ExtPKIXParameters2,ValidationError,String,int,X509Certificate[]) 38 18 1
eu.emi.security.authn.x509.impl.CertificateUtils.loadPEMKeystore(InputStream,PasswordFinder,PasswordFinder[]) 37 18 1
eu.emi.security.authn.x509.helpers.ocsp.OCSPClientImpl.send(URL,OCSPReq,int) 37 13 0
eu.emi.security.authn.x509.helpers.ocsp.OCSPVerifier.verify(X509Certificate,X509Certificate) 36 16 0
eu.emi.security.authn.x509.helpers.pkipath.BCCertPathValidator.validate(X509Certificate[],boolean,TrustAnchor,CertStore,RevocationParameters,ObserversHandler) 36 17 1
eu.emi.security.authn.x509.helpers.pkipath.BCCertPathValidator.convertErrors(List[],boolean,int,X509Certificate[]) 36 16 0
eu.emi.security.authn.x509.proxy.ProxyCSRGenerator.generate(ProxyCertificateOptions,PrivateKey) 34 10 1
eu.emi.security.authn.x509.impl.CertificateUtils.savePrivateKey(OutputStream,PrivateKey,Encoding,String,String[],boolean) 33 8 1
eu.emi.security.authn.x509.helpers.ns.EuGridPmaNamespacesParser.parse() 33 10 0
eu.emi.security.authn.x509.helpers.ns.EuGridPmaNamespacesParser.handleEntry(String) 33 7 0
eu.emi.security.authn.x509.helpers.CertificateHelpers.sortChain(X509Certificate) 33 12 1
eu.emi.security.authn.x509.helpers.pkipath.BCCertPathValidator.checkPairWithProxy(X509Certificate,X509Certificate,ValidationError,int,X509Certificate[],Date) 32 18 1
eu.emi.security.authn.x509.proxy.ProxyCSRInfo.handleRequestedExtension(CertificateExtension) 31 9 0
eu.emi.security.authn.x509.proxy.ProxyChainInfo.getProxyType() 29 14 1
eu.emi.security.authn.x509.proxy.ProxyChainInfo.getProxyRestrictions(boolean) 29 9 1
eu.emi.security.authn.x509.helpers.proxy.ProxyAddressRestrictionData.ProxyAddressRestrictionData(GeneralSubtree[]) 29 13 1
eu.emi.security.authn.x509.helpers.trust.DirectoryTrustAnchorStore.loadCerts(URL) 28 12 0
eu.emi.security.authn.x509.helpers.ocsp.OCSPVerifier.getOCSPUrls(X509Certificate,X509Certificate) 27 9 0
eu.emi.security.authn.x509.helpers.ocsp.OCSPClientImpl.createRequest(X509Certificate,X509Certificate,X509Credential,boolean) 26 10 0
eu.emi.security.authn.x509.helpers.crl.PlainCRLStoreSpi.loadCRL(URL) 26 11 0
eu.emi.security.authn.x509.helpers.proxy.DraftRFCProxyCertInfoExtension.DraftRFCProxyCertInfoExtension(ASN1Sequence) 25 16 1

Averages.

Program NCSS NCSS average CCN average Javadocs average
7,205.00 6.02 2.82 0.57

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 declaration package java.lang;
Import declaration import java.awt.*;
Class declaration
  • public class Foo {
  • public class Foo extends Bla {
Interface declaration public interface Able ; {
Field declaration
  • int a;
  • int a, b, c = 5, d = 6;
Method declaration
  • public void cry();
  • public void gib() throws DeadException {
Constructor declaration public Foo() {
Constructor invocation
  • this();
  • super();
Statement declaration
  • i = 0;
  • if (ok)
  • if (exit) {
  • if (3 == 4);
  • if (4 == 4) { ;
  • } else {
Label declaration fine :

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).