commit | 0a9efa914d322810f8dc8d9ba06e79d164c8892d | [log] [tgz] |
---|---|---|
author | Jeremy Woods <[email protected]> | Wed Jun 09 13:01:36 2021 -0700 |
committer | Jeremy Woods <[email protected]> | Wed Jun 09 13:12:22 2021 -0700 |
tree | 326aadf17cf90d00c3446ca152d298287a364f86 | |
parent | 4370e11af6cd76090b442540aadd0bc0e72b7308 [diff] |
Fix lint crashes on kotlin top level properties We need to handle cases where kotlin functions don't have a surrounding class. This change allows the surrounding class to be null and in that case we just skip the check. RelNote: "The `OnCreateDialogIncorrectCallback` lint check will no longer crash when declaring a top level variable." Test: kotlin anonymous object test Bug: 189967522 Change-Id: I62de88c344cee0cb9deda26c9e5fc27247cf2d95
diff --git a/fragment/fragment-lint/src/main/java/androidx/fragment/lint/OnCreateDialogIncorrectCallbackDetector.kt b/fragment/fragment-lint/src/main/java/androidx/fragment/lint/OnCreateDialogIncorrectCallbackDetector.kt index 3fecccc..012ed0a 100644 --- a/fragment/fragment-lint/src/main/java/androidx/fragment/lint/OnCreateDialogIncorrectCallbackDetector.kt +++ b/fragment/fragment-lint/src/main/java/androidx/fragment/lint/OnCreateDialogIncorrectCallbackDetector.kt
@@ -75,7 +75,7 @@ private inner class UastHandler(val context: JavaContext) : UElementHandler() { override fun visitClass(node: UClass) { if (isKotlin(context.psiFile) && - (node as KotlinUClass).ktClass!!.getSuperNames().firstOrNull() != + (node as? KotlinUClass)?.ktClass?.getSuperNames()?.firstOrNull() != DIALOG_FRAGMENT_CLASS ) { return
diff --git a/fragment/fragment-lint/src/test/java/androidx/fragment/lint/OnCreateDialogIncorrectCallbackDetectorTest.kt b/fragment/fragment-lint/src/test/java/androidx/fragment/lint/OnCreateDialogIncorrectCallbackDetectorTest.kt index 322d5c2..73405fd 100644 --- a/fragment/fragment-lint/src/test/java/androidx/fragment/lint/OnCreateDialogIncorrectCallbackDetectorTest.kt +++ b/fragment/fragment-lint/src/test/java/androidx/fragment/lint/OnCreateDialogIncorrectCallbackDetectorTest.kt
@@ -300,4 +300,42 @@ .run() .expectClean() } + + @Test + fun `kotlin anonymous object`() { + lint().files( + kotlin( + """ + package com.example + + val foo = object : Foo() { + override fun test() { } + } + """ + ).indented() + ) + .run() + .expectClean() + } + + @Test + fun `java anonymous object`() { + lint().files( + java( + """ + package com.example; + + interface Foo { + fun test(); + } + + class Bar { + Foo foo = (com.example.Foo)()-> { }; + } + """ + ).indented() + ) + .run() + .expectClean() + } }