package me.ycdev.android.arch.lint; import com.android.tools.lint.detector.api.Category; import com.android.tools.lint.detector.api.Implementation; import com.android.tools.lint.detector.api.Issue; import com.android.tools.lint.detector.api.JavaContext; import com.android.tools.lint.detector.api.Scope; import com.android.tools.lint.detector.api.Severity; import java.util.Arrays; import java.util.List; import lombok.ast.MethodInvocation; import me.ycdev.android.arch.lint.base.WrapperDetectorBase; public class MyBroadcastHelperDetector extends WrapperDetectorBase { public static final Issue ISSUE = Issue.create( "MyBroadcastHelper", "BroadcastHelper should be used.", "Please use the wrapper class 'BroadcastHelper' to register broadcast receivers" + " and send broadcasts to avoid security issues.", Category.CORRECTNESS, 5, Severity.ERROR, new Implementation(MyBroadcastHelperDetector.class, Scope.JAVA_FILE_SCOPE)); /** Constructs a new {@link MyBroadcastHelperDetector} check */ public MyBroadcastHelperDetector() { super(); } @Override protected String getWrapperClassName() { return "me.ycdev.android.arch.wrapper.BroadcastHelper"; } @Override protected String[] getTargetClassNames() { return new String[] { "android.content.Context" }; } @Override public List<String> getApplicableMethodNames() { return Arrays.asList( "registerReceiver", "sendBroadcast"); } @Override protected void reportViolation(JavaContext context, MethodInvocation node) { context.report(ISSUE, node, context.getLocation(node), "Please use the wrapper class 'BroadcastHelper'."); } }