`visitmethodcall`在lint中未被调用

ztigrdn8  于 2021-07-03  发布在  Java
关注(0)|答案(0)|浏览(187)

我创建了一个detector类,目的是获取调用方法并对其执行一些操作。但是 visitMethodCall 不是为我在测试用例中添加的链式方法调用的。
这就是测试用例的样子

@Test
    fun `when tags work name is not referenced from RxWorkerTags enum an error is given`() {
        lint()
                .allowMissingSdk()
                .files(kotlin("""
                    package a.b.c.jobScheduler

                    import androidx.work.ExistingWorkPolicy
                    import androidx.work.WorkManager
                    import android.content.Context

                    class InboxSyncJob(private val context: Context) {
                        fun start(interval: Long) {
                            WorkManager
                                .getInstance(context)
                                .beginUniqueWork(
                                    "SyncJobService",
                                    ExistingWorkPolicy.REPLACE,
                                    getWork(interval)
                                )
                                .enqueue()
                        }
                    }
                """.trimIndent()))
                .issues(ISSUE_REFERENCE_RxWORKER_TAGS)
                .run()
                .expectErrorCount(1)
    }

探测器等级

class ReferenceRxWorkerTagsDetector : Detector(), SourceCodeScanner {

    companion object {
        internal const val PRIORITY = 10
        private const val METHOD_BEGIN_UNIQUE_WORK = "beginUniqueWork"
        private const val METHOD_ADD_TAG = "addTag"
    }

    override fun getApplicableMethodNames(): List<String> = listOf(METHOD_BEGIN_UNIQUE_WORK)

    override fun visitMethodCall(context: JavaContext, node: UCallExpression, method: PsiMethod) {
        if (node.methodName == METHOD_BEGIN_UNIQUE_WORK) {
            // Do something
        }
    }
}

理想的, visitMethodCall 应该被要求 beginUniqueWork ,但它没有按预期工作。有人能帮忙吗。

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题