Why is this an issue?

Kotlin supports getters and setters for properties. Because this is a built-in language feature, it should be the idiom used to implement the getter and setter pattern instead of using custom idioms.

What is the potential impact?

Readability and Understanding

This change makes it easier to understand the code because this is how delegation is to be used in Kotlin. When developers share common standards and idioms, they need to spend less effort understanding each other’s code.

Code Redundancy

Using a built-in language feature or a standard API is always better than a custom implementation, because the reimplementation of something that already exists is unnecessary.

How to fix it

Replace explicit functions that serve as getters and setters with property getters and setters.

Code examples

Noncompliant code example

internal class GettersSetters {
    private val length = 100
    private var index: Int = 0
    private var finished: Boolean = false

    fun getIndex(): Int { // Noncomplient, use property getter
        return min(max(0 ,index), length)
    }

    fun setIndex(value: Int) { // Noncompliant, use property setter
        seek(value)
        index = value
        finished = value >= length
    }

    fun isFinished(): Boolean { // Noncomplient, use property getter
        return finished
    }
}

Compliant solution

internal class GettersSetters {
    private val length = 100
    private var _index: Int = 0
    private var _finished: Boolean = false

    var index: Int // Compliant
        get() = min(max(0 ,index), length)
        set(value: Int) {
            seek(value)
            _index = value
            _finished = value >= length
        }

    val finished: Boolean // Compliant
        get() = _finished
}

Resources

Documentation