gpt4 book ai didi

android - 自定义Android Lint访问方式引用

转载 作者:行者123 更新时间:2023-11-28 20:48:30 25 4
gpt4 key购买 nike

我有 Detector 的工作示例,它通过引用访问方法调用,但它不适用于通过方法引用的调用。

class RxOnErrorDetector : Detector(), Detector.UastScanner {
override fun getApplicableMethodNames() = listOf("onError")

override fun visitMethod(context: JavaContext, node: UCallExpression, method: PsiMethod) {
if (context.evaluator.isMemberInClass(method, "io.reactivex.Emitter")) {
context.report(ISSUE_ON_ERROR_CALL, node, context.getNameLocation(node), "onError method was called.")
}
}
}

带有方法引用调用的代码示例。

public class ObservableMethodReferenceProducer {

private Listener listener = new Listener();

public Observable<Integer> produceObservable() {
return Observable.create(e -> {
listener.doOnError(e::onError);
});
}

class Listener {
void doOnError(ErrorListener errorListener) {

}
}

interface ErrorListener {
void onError(Exception e);
}
}

在 Android Lint 中检测特定类型的方法引用调用的最佳方法是什么?

最佳答案

你需要寻找UCallableReferenceExpression:

override fun getApplicableUastTypes(): List<Class<out UElement>> {
return listOf(UCallableReferenceExpression::class.java)
}

override fun createUastHandler(context: JavaContext): UElementHandler? {
return object : UElementHandler() {
override fun visitCallableReferenceExpression(node: UCallableReferenceExpression) {
// your logic here
}
}
}

关于android - 自定义Android Lint访问方式引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56208394/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com