Java 如何在最新版本的Android Lint中访问方法调用

Java 如何在最新版本的Android Lint中访问方法调用,java,android,lint,Java,Android,Lint,我正在编写一个新的Android lint规则,它需要访问所有方法调用,然后分析每个方法的注释以决定处理。然而,我在第一步遇到了麻烦:访问所有方法调用 总之,我想要的是,当我有下面的代码时,Android Studio将最后两行(test.testMethod();和testMethod();)突出显示为错误 public class MyClass { class TestClass { void testMethod() {}

我正在编写一个新的Android lint规则,它需要访问所有方法调用,然后分析每个方法的注释以决定处理。然而,我在第一步遇到了麻烦:访问所有方法调用

总之,我想要的是,当我有下面的代码时,Android Studio将最后两行(test.testMethod();和testMethod();)突出显示为错误

    public class MyClass {
        class TestClass {
            void testMethod() {}
        }

        void testMethod() {}

        void testCall() {
            TestClass test = new TestClass();
            test.testMethod(); // expect highlight
            testMethod(); // expect highlight
        }
    }
在旧版本的lint框架中,我认为可以通过以下方式实现这一点:

public class MyDetector extends Detector implements Detector.JavaScanner {

    @Override
    public
    List<Class<? extends Node>> getApplicableNodeTypes() {
        //noinspection unchecked
        return Arrays.<Class<? extends Node>>asList(MethodInvocation.class);
    }

    @Nullable
    @Override
    public AstVisitor createJavaVisitor(@NonNull JavaContext context) {
        return new CallVisitor(context);
    }

    private class CallVisitor extends ForwardingAstVisitor {
        private final JavaContext mContext;

        public CallVisitor(JavaContext context) {
            mContext = context;
        }

        @Override
        public boolean visitMethodInvocation(@NonNull MethodInvocation call) {
            String message = "Nguyen Ha Quang";
            mContext.report(THREAD, call, mContext.getLocation(call), message);
            return false;
        }
    }
}

公共类MyDetector扩展Detector实现Detector.JavaScanner{
@凌驾
公众的
列表
public class ChatWorkerDetector extends Detector implements Detector.UastScanner {

    @Nullable
    @Override
    public List<Class<? extends UElement>> getApplicableUastTypes() {
        return Arrays.<Class<? extends UElement>>asList(
                UCallableReferenceExpression.class
        );
    }

    @Override
    public UElementHandler createUastHandler(JavaContext context) {
        return new CustomElementHandler(context);
    }

    public class CustomElementHandler extends UElementHandler {
        JavaContext mContext;

        public CustomElementHandler(JavaContext mContext) {
            this.mContext = mContext;
        }

        @Override
        public void visitCallableReferenceExpression(UCallableReferenceExpression node) {
            String message = "Nguyen Ha Quang";
            mContext.report(THREAD, node, mContext.getLocation(node), message);
        }
    }
}