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 142 1241 130 1177 6 144
eu.emi.security.authn.x509.proxy 15 118 888 112 821 11 170
eu.emi.security.authn.x509.helpers.pkipath 10 73 733 41 308 29 195
eu.emi.security.authn.x509.helpers.ocsp 12 53 721 26 152 6 47
eu.emi.security.authn.x509.helpers.proxy 12 76 703 63 543 5 212
eu.emi.security.authn.x509.helpers.ns 15 79 691 32 215 11 68
eu.emi.security.authn.x509.helpers.trust 13 74 626 21 138 6 51
eu.emi.security.authn.x509.helpers 15 81 620 71 451 10 99
eu.emi.security.authn.x509 17 87 336 84 428 0 215
eu.emi.security.authn.x509.helpers.crl 6 36 327 15 115 6 27
eu.emi.security.authn.x509.helpers.ssl 4 21 151 9 74 0 18
eu.emi.security.authn.x509.helpers.revocation 2 1 8 2 12 0 29
Classes total Methods total NCSS total Javadocs Javadoc lines Single lines comment Multi lines comment
141 841 7045 606 4434 90 1275

Objects

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

TOP 30 classes containing the most NCSS.

Object NCSS Methods Classes Javadocs
eu.emi.security.authn.x509.impl.CertificateUtils 247 24 1 18
eu.emi.security.authn.x509.helpers.ocsp.OCSPClientImpl 239 13 0 4
eu.emi.security.authn.x509.helpers.pkipath.BCCertPathValidator 239 11 0 6
eu.emi.security.authn.x509.proxy.ProxyChainInfo 230 20 0 20
eu.emi.security.authn.x509.helpers.ns.GlobusNamespacesParser 164 12 0 2
eu.emi.security.authn.x509.helpers.proxy.ProxyGeneratorHelper 159 13 0 6
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.CertificateHelpers 128 10 1 7
eu.emi.security.authn.x509.helpers.crl.PlainCRLStoreSpi 125 16 1 9
eu.emi.security.authn.x509.helpers.ns.EuGridPmaNamespacesParser 113 6 0 1
eu.emi.security.authn.x509.proxy.ProxyCSRInfo 109 13 0 11
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 98 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.proxy.X509v3CertificateBuilder 59 6 0 5
eu.emi.security.authn.x509.ValidationResult 58 11 0 11
eu.emi.security.authn.x509.helpers.ns.NamespaceChecker 57 3 0 2
eu.emi.security.authn.x509.helpers.ReaderInputStream 57 11 0 12

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 247 24 1 18
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 125 16 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 109 13 0 11
eu.emi.security.authn.x509.RevocationParameters 36 13 1 14
eu.emi.security.authn.x509.helpers.proxy.ProxyGeneratorHelper 159 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 98 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 239 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.helpers.pkipath.ExtPKIXParameters 46 10 0 4
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.pkipath.PlainStoreUtils 54 9 0 3

Averages.

NCSS average Program NCSS Classes average Methods average Javadocs average
40.19 7,045.00 0.08 5.96 4.30

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.proxy.ProxyCSRGenerator.generateAttributes(ProxyCertificateOptions) 51 22 0
eu.emi.security.authn.x509.helpers.proxy.ProxyGeneratorHelper.addExtensions(BaseProxyCertificateOptions) 47 21 0
eu.emi.security.authn.x509.helpers.pkipath.NonValidatingCertPathBuilder.build(X509Certificate,ExtendedPKIXBuilderParameters,X509Certificate,X509Certificate[]) 43 25 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.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[],ExtPKIXParameters,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.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.loadCert(URL) 28 11 0
eu.emi.security.authn.x509.proxy.ProxyCSRInfo.handleRequestedExtension(CertificateExtension) 27 9 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.impl.CertificateUtils.loadCertificateChain(InputStream,Encoding) 25 9 1

Averages.

Program NCSS NCSS average CCN average Javadocs average
7,045.00 6.00 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).