File Complexity Overall
  • There are 232 files with units, with 29,868 lines of code.
    • 0 very complex files (McCabe index sum 251+; 0 lines of code)
    • 2 complex files (McCabe index sum 126-250; 1,405 lines of code)
    • 29 medium complex files (McCabe index sum 51-125; 9,970 lines of code)
    • 51 slightly complex files (McCabe index sum 26-50; 8,967 lines of code)
    • 150 simple files (McCabe index sum 1-25; 9,526 lines of code)
  • 29 main files have no units (e.g. languages without unit analysis, or files without functions) and are not classified.
system0% | 4% | 33% | 30% | 31%
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
java0% | 4% | 33% | 29% | 32%
scala0% | 0% | 0% | 100% | 0%
File Complexity per Logical Decomposition
primary
251+
126-250
51-125
26-50
1-25
spark0% | 14% | 26% | 40% | 18%
api0% | 10% | 28% | 20% | 40%
core0% | 0% | 30% | 31% | 38%
parquet0% | 0% | 54% | 22% | 23%
common0% | 0% | 65% | 28% | 6%
pig0% | 0% | 38% | 39% | 21%
data0% | 0% | 23% | 41% | 35%
hive0% | 0% | 0% | 61% | 38%
orc0% | 0% | 0% | 31% | 68%
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
SparkOrcReader.java
in spark/src/main/java/com/netflix/iceberg/spark/data
752 43 187 25 26
Types.java
in api/src/main/java/com/netflix/iceberg/types
653 116 161 25 7
ParquetValueReaders.java
in parquet/src/main/java/com/netflix/iceberg/parquet
562 75 106 19 11
SparkParquetReaders.java
in spark/src/main/java/com/netflix/iceberg/spark/data
595 62 106 18 31
Tasks.java
in core/src/main/java/com/netflix/iceberg/util
441 31 103 23 24
Literals.java
in api/src/main/java/com/netflix/iceberg/expressions
439 37 92 21 11
ValueReaders.java
in core/src/main/java/com/netflix/iceberg/avro
496 62 89 18 7
Truncate.java
in api/src/main/java/com/netflix/iceberg/transforms
329 48 87 26 9
ValueWriters.java
in core/src/main/java/com/netflix/iceberg/avro
372 58 72 19 4
MergingSnapshotUpdate.java
in core/src/main/java/com/netflix/iceberg
359 20 71 20 19
ScanSummary.java
in core/src/main/java/com/netflix/iceberg
292 22 65 22 16
TableMetadata.java
in core/src/main/java/com/netflix/iceberg
357 36 64 18 6
PigParquetReader.java
in pig/src/main/java/com/netflix/iceberg/pig
356 25 63 18 30
ParquetDictionaryRowGroupFilter.java
in parquet/src/main/java/com/netflix/iceberg/parquet
278 21 63 23 10
GenericParquetReaders.java
in data/src/main/java/com/netflix/iceberg/data/parquet
346 24 62 18 32
SparkOrcWriter.java
in spark/src/main/java/com/netflix/iceberg/spark/data
360 21 62 17 19
ParquetValueWriters.java
in parquet/src/main/java/com/netflix/iceberg/parquet
363 43 61 17 5
TypeUtil.java
in api/src/main/java/com/netflix/iceberg/types
269 35 60 22 7
ParquetMetricsRowGroupFilter.java
in parquet/src/main/java/com/netflix/iceberg/parquet
251 21 60 24 7
DynMethods.java
in common/src/main/java/com/netflix/iceberg/common
258 40 58 22 3
GenericDataFile.java
in core/src/main/java/com/netflix/iceberg
326 23 57 17 16
ParquetAvro.java
in parquet/src/main/java/com/netflix/iceberg/parquet
274 28 57 21 6
BaseTransaction.java
in core/src/main/java/com/netflix/iceberg
284 39 56 20 8
Parquet.java
in parquet/src/main/java/com/netflix/iceberg/parquet
329 39 56 17 11
ParquetAvroValueReaders.java
in parquet/src/main/java/com/netflix/iceberg/parquet
331 18 56 17 32
StrictMetricsEvaluator.java
in api/src/main/java/com/netflix/iceberg/expressions
197 19 55 28 7
PartitionSpec.java
in api/src/main/java/com/netflix/iceberg
293 31 55 19 6
Reader.java
in spark/src/main/java/com/netflix/iceberg/spark/source
425 27 55 13 5
Bucket.java
in api/src/main/java/com/netflix/iceberg/transforms
237 35 54 23 11
DynFields.java
in common/src/main/java/com/netflix/iceberg/common
223 35 52 23 4
PageIterator.java
in parquet/src/main/java/com/netflix/iceberg/parquet
328 25 52 16 8
ParquetFilters.java
in parquet/src/main/java/com/netflix/iceberg/parquet
203 14 50 25 16
GenericManifestFile.java
in core/src/main/java/com/netflix/iceberg
242 22 49 20 10
InclusiveMetricsEvaluator.java
in api/src/main/java/com/netflix/iceberg/expressions
180 19 49 27 7
DataFiles.java
in core/src/main/java/com/netflix/iceberg
253 31 48 19 5
SchemaUpdate.java
in core/src/main/java/com/netflix/iceberg
256 16 47 18 9
AvroSchemaUtil.java
in core/src/main/java/com/netflix/iceberg/avro
206 24 47 23 5
Conversions.java
in api/src/main/java/com/netflix/iceberg/types
136 4 47 35 17
GenericParquetWriter.java
in data/src/main/java/com/netflix/iceberg/data/parquet
222 19 44 20 25
DynConstructors.java
in common/src/main/java/com/netflix/iceberg/common
208 24 43 21 4
MessageTypeToType.java
in parquet/src/main/java/com/netflix/iceberg/parquet
168 11 43 26 25
PartitionKey.java
in spark/src/main/java/com/netflix/iceberg/spark/source
275 25 42 15 4
SchemaToType.java
in core/src/main/java/com/netflix/iceberg/avro
172 10 41 24 20
Writer.java
in spark/src/main/java/com/netflix/iceberg/spark/source
384 19 41 11 5
TypeConversion.java
in orc/src/main/java/com/netflix/iceberg/orc
145 4 40 28 19
Files.java
in api/src/main/java/com/netflix/iceberg
163 29 38 23 5
ExpressionVisitors.java
in api/src/main/java/com/netflix/iceberg/expressions
117 20 37 32 11
GenericAvroReader.java
in core/src/main/java/com/netflix/iceberg/avro
164 13 36 22 18
InclusiveManifestEvaluator.java
in api/src/main/java/com/netflix/iceberg/expressions
157 19 36 23 4
ParquetAvroWriter.java
in parquet/src/main/java/com/netflix/iceberg/parquet
169 11 36 21 25
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...