== Why is this an issue? Some Guava features were really useful for Java 7 application because Guava was bringing APIs missing in the JDK. The introduction of Kotlin and Java 8+ fixed some of these limitations. When migrating an application to Kotlin and/or using a Java 8+ target, it is recommended to prefer the provided native APIs over Guava to ease maintenance: developers don't need to learn how to use two APIs and can stick to the default one. This rule raises an issue when the Guava APIs listed below are used. [frame=all] [cols="^1,^1"] |=== |Guava API | Kotlin API |`com.google.common.base.Joiner.on` | `kotlin.collections.Iterable.joinToString` or `kotlin.Array.joinToString` |`com.google.common.base.Predicate` | Use function with type `(T) -> Boolean` as a replacement for `Predicate` |`com.google.common.base.Function` | Use function with type `(T) -> R` as a replacement for `Function` |`com.google.common.base.Supplier` | Use function with type `() -> T` as a replacement for `Supplier` |`com.google.common.io.Files.createTempDir` | `kotlin.io.path.createTempDirectory` | `com.google.common.collect.ImmutableSet.of` | `kotlin.collections.setOf` | `com.google.common.collect.ImmutableList.of` | `kotlin.collections.listOf` | `com.google.common.collect.ImmutableMap.of` | `kotlin.collections.mapOf` |=== [frame=all] [cols="^1,^1"] |=== |Guava API | Java 8 API |`com.google.common.io.BaseEncoding.base64` | `java.util.Base64` |`com.google.common.io.BaseEncoding.base64Url` | `java.util.Base64` |`com.google.common.base.Optional` | `java.util.Optional`* |`com.google.common.base.Optional.of` | `java.util.Optional.of`* |`com.google.common.base.Optional.absent` | `java.util.Optional.empty`* |`com.google.common.base.Optional.fromNullable` | `java.util.Optional.ofNullable`* |=== *: Note that this rule will also raise issues for the use of Guava `Optional` and recommend using the Java 8+ equivalent instead. In most Kotlin-only cases, you will probably be better off using Kotlin's null-safe type system directly, without wrapping `Optional` constructs. In some cases, such as those involving Java interoperability, it may be necessary to use `Optional` in Kotlin, however.