// INSPECTION_CLASS: com.android.tools.idea.lint.AndroidLintJavascriptInterfaceInspection import android.annotation.SuppressLint import android.webkit.JavascriptInterface import android.webkit.WebView @Suppress("UsePropertyAccessSyntax", "UNUSED_VARIABLE", "UNUSED_VALUE", "unused", "UNUSED_PARAMETER", "DEPRECATION") class JavaScriptTestK { fun test(webview: WebView) { webview.addJavascriptInterface(AnnotatedObject(), "myobj") webview.addJavascriptInterface(InheritsFromAnnotated(), "myobj") webview.addJavascriptInterface(NonAnnotatedObject(), "myobj") webview.addJavascriptInterface(null, "nothing") webview.addJavascriptInterface(object : Any() { @JavascriptInterface fun method() {} }, "nothing") webview.addJavascriptInterface(JavascriptFace(), "nothing") var o: Any = NonAnnotatedObject() webview.addJavascriptInterface(o, "myobj") o = InheritsFromAnnotated() webview.addJavascriptInterface(o, "myobj") } fun test(webview: WebView, object1: AnnotatedObject, object2: NonAnnotatedObject) { webview.addJavascriptInterface(object1, "myobj") webview.addJavascriptInterface(object2, "myobj") } @SuppressLint("JavascriptInterface") fun testSuppressed(webview: WebView) { webview.addJavascriptInterface(NonAnnotatedObject(), "myobj") } fun testLaterReassignment(webview: WebView) { var o: Any = NonAnnotatedObject() val t = o webview.addJavascriptInterface(t, "myobj") o = AnnotatedObject() } class NonAnnotatedObject() { fun test1() {} fun test2() {} } open class AnnotatedObject { @JavascriptInterface open fun test1() {} open fun test2() {} @JavascriptInterface fun test3() {} } class InheritsFromAnnotated : AnnotatedObject() { override fun test1() {} override fun test2() {} } } class JavascriptFace { fun method() {} }