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