isVisible is actually an extension property, since it's declared on an existing View class. Extension properties, similar to extension functions, are just syntactic sugar on top of good old Java static methods, with the first method parameter becoming the receiver in the extension function. If we decompile the previous snippet, using the "Show Kotlin Bytecode" feature (if you're in Android Studio, open Tools -> Kotlin -> Show Kotlin Bytecode), we'll see the following Java code:

As expected, the code invokes static isVisible() method in ViewKt class (the file with the extension property is called view.kt), passing button as the first argument. Let's now mark our property's getter with inline and see what it changes:

As you see, the comparison operation has been inlined on the call site, removing the static method invocation. This code looks almost as if you'd write it in Java, but the Kotlin counterpart looks a lot neater.

Declaring Inline Properties

Here are a few notes on the usage of inline properties: with vars, you can mark both the getter and the setter inline:

Conclusion

When used properly, inlining the properties can help the compiler produce more optimal bytecode, removing unnecessary indirections. The trivial example we looked at might give you an idea about which accessors are worth inlining. In any case, rely on the decompiler to see exactly what the Java counterpart of your code looks like.