File Complexity Overall
  • There are 522 files with units, with 65,008 lines of code.
    • 7 very complex files (McCabe index sum 251+; 11,421 lines of code)
    • 13 complex files (McCabe index sum 126-250; 7,118 lines of code)
    • 48 medium complex files (McCabe index sum 51-125; 15,545 lines of code)
    • 51 slightly complex files (McCabe index sum 26-50; 8,732 lines of code)
    • 403 simple files (McCabe index sum 1-25; 22,192 lines of code)
  • 58 main files have no units (e.g. languages without unit analysis, or files without functions) and are not classified.
system17% | 10% | 23% | 13% | 34%
Legend:
251+
126-250
51-125
26-50
1-25


explore: grouped by folders | grouped by complexity
File Complexity per Extension
251+
126-250
51-125
26-50
1-25
h27% | 3% | 14% | 5% | 48%
js17% | 22% | 25% | 11% | 23%
cpp12% | 3% | 27% | 18% | 36%
java11% | 9% | 28% | 18% | 31%
c0% | 0% | 0% | 100% | 0%
File Complexity per Logical Decomposition
primary
251+
126-250
51-125
26-50
1-25
core17% | 10% | 23% | 13% | 34%
Most Complex Files (Top 50)

The McCabe index of a file grows with its size: per 100 lines tells a large but plain file from a dense one, and most complex unit whether the complexity sits in one unit or is spread over many.

File# lines# unitsMcCabe index
(sum)
per 100
lines
most complex
unit
MslControl.js
in core/src/main/javascript/msg
2627 401 773 29 34
MslControl.java
in core/src/main/java/com/netflix/msl/msg
1761 107 528 30 51
MslControl.cpp
in core/src/main/cpp/msg
1773 86 417 24 43
schema.h
in core/src/main/cpp/lib/rapidjson
1606 94 318 20 28
reader.h
in core/src/main/cpp/lib/rapidjson
1367 60 289 21 75
asnjwk.js
in core/src/main/javascript/lib
920 68 261 28 30
document.h
in core/src/main/cpp/lib/rapidjson
1367 185 252 18 18
MessageHeader.js
in core/src/main/javascript/msg
891 106 245 27 33
MessageInputStream.js
in core/src/main/javascript/msg
888 104 217 24 9
clarinet.js
in core/src/main/javascript/lib
577 25 193 33 94
MessageHeader.java
in core/src/main/java/com/netflix/msl/msg
571 25 178 31 57
MessageBuilder.js
in core/src/main/javascript/msg
517 53 159 31 18
MslObject.js
in core/src/main/javascript/io
337 35 154 46 17
MslArray.js
in core/src/main/javascript/io
335 35 153 46 19
MessageBuilder.java
in core/src/main/java/com/netflix/msl/msg
417 45 149 36 20
regex.h
in core/src/main/cpp/lib/rapidjson/internal
554 26 147 27 38
JsonWebKeyLadderExchange.js
in core/src/main/javascript/keyx
550 91 146 27 12
MessageInputStream.java
in core/src/main/java/com/netflix/msl/msg
478 25 141 29 24
MessageBuilder.cpp
in core/src/main/cpp/msg
512 31 132 26 18
JsonWebEncryptionLadderExchange.js
in core/src/main/javascript/keyx
491 76 127 26 12
MessageOutputStream.js
in core/src/main/javascript/msg
416 60 119 29 10
AsymmetricWrappedExchange.js
in core/src/main/javascript/keyx
396 56 109 28 11
ServiceToken.js
in core/src/main/javascript/tokens
357 45 109 31 12
MslArray.java
in core/src/main/java/com/netflix/msl/io
316 40 105 33 17
MessageServiceTokenBuilder.js
in core/src/main/javascript/msg
353 42 102 29 7
MslCrypto.js
in core/src/main/javascript/crypto
293 18 100 34 9
MslObject.java
in core/src/main/java/com/netflix/msl/io
317 39 99 31 14
DiffieHellmanExchange.js
in core/src/main/javascript/keyx
346 58 97 28 9
SymmetricWrappedExchange.js
in core/src/main/javascript/keyx
364 55 97 27 8
MessageInputStream.cpp
in core/src/main/cpp/msg
451 16 96 21 16
encodings.h
in core/src/main/cpp/lib/rapidjson
509 51 90 18 9
pointer.h
in core/src/main/cpp/lib/rapidjson
797 23 90 11 29
ThriftyUtf8Reader.java
in core/src/main/java/com/netflix/msl/io
237 8 87 37 67
MslEncoderUtils.java
in core/src/main/java/com/netflix/msl/io
212 9 87 41 24
writer.h
in core/src/main/cpp/lib/rapidjson
389 43 85 22 14
SimpleMslStore.js
in core/src/main/javascript/util
283 17 85 30 17
MasterToken.js
in core/src/main/javascript/tokens
354 42 85 24 8
UserIdToken.js
in core/src/main/javascript/tokens
320 42 84 26 8
SimpleMslStore.java
in core/src/main/java/com/netflix/msl/util
261 15 83 32 20
AsymmetricWrappedExchange.java
in core/src/main/java/com/netflix/msl/keyx
529 23 81 15 11
JsonWebKey.java
in core/src/main/java/com/netflix/msl/crypto
371 18 80 22 33
SimpleMslStore.cpp
in core/src/main/cpp/util
360 14 76 21 20
AsymmetricWrappedExchange.cpp
in core/src/main/cpp/keyx
499 16 75 15 11
OpenSslLib.cpp
in core/src/main/cpp/crypto
386 24 74 19 29
MslEncoderUtils.js
in core/src/main/javascript/io
156 6 74 47 54
JsonMslObject.js
in core/src/main/javascript/io
216 27 69 32 19
DiffieHellmanExchange.java
in core/src/main/java/com/netflix/msl/keyx
351 23 68 19 9
MslEncoderUtils.cpp
in core/src/main/cpp/io
165 7 68 41 20
MslArray.cpp
in core/src/main/cpp/io
266 22 65 24 5
RsaCryptoContext.js
in core/src/main/javascript/crypto
234 35 65 28 8
About This Analysis
  • File complexity is the sum of the McCabe indexes (conditional complexity) of the units (methods, functions...) in a file.
  • Files are classified in five categories based on that sum: 1-25 (simple files), 26-50 (slightly complex files), 51-125 (medium complex files), 126-250 (complex files), 251+ (very complex files). The default bands are five times the unit complexity bands, as a file is a group of units.
  • Only main code files with units are classified. Files without units (languages without unit analysis, or files without functions) have no complexity to measure and are left out rather than counted as simple.
  • A very complex file holds many decisions, which often means it has too many responsibilities: a candidate to split, and a place where changes need more testing.
Learn more...