Migrating a ray tracer from Java and Groovy to Kotlin (part 2)

October 06, 2018

I continued to work on migrating my ray tracer to Kotlin.

I switched the gradle build script to Kotlin. In the build.gradle.kts syntax completion is available for gradle tasks because everything is statically typed now. It took a while to get used to, but in the end it is worthwhile.

One very useful tool for Kotlin development is detekt, a static code analysis tool that operates on the abstract syntax tree of the Kotlin compiler.

Detekt found a lot of issues with my code. I really expected a lot of issues, because the code in some places is very experimental, contains bugs and not tested 100%. Due to time constraints I am not able to work on the ray tracer a lot in my spare time.

You can run the analysis with

$ gradlew detekt

And detekt creates a long report that ends with the following lines.

Overall debt: 11h 20min

Complexity Report:
        - 14,916 lines of code (loc)
        - 10,966 source lines of code (sloc)
        - 7,926 logical lines of code (lloc)
        - 1,261 comment lines of code (cloc)
        - 1,765 cyclomatic complexity (mcc)
        - 1,236 cognitive complexity
        - 97 number of total code smells
        - 11% comment source ratio
        - 222 mcc per 1,000 lloc
        - 12 code smells per 1,000 lloc

Project Statistics:
        - number of properties: 2178
        - number of functions: 882
        - number of classes: 233
        - number of packages: 37
        - number of kt files: 244

Very useful, indeed.