我正在为android/compose编写我的第一个自定义lint-detector:
“不要使用标准按钮,使用我们专门设计的自定义按钮”
探测器本身按预期工作:
x1c 0d1x的数据
然而,Lint抑制并不像预期的那样工作:“此注解不适用于目标'expression'”
的
我必须回到另一个范围才能让它工作:
的
我如何以这样一种方式修复我的lint规则,我可以针对表达式?
我的当前(简化)实现:
class MissingDefaultDetector : Detector(), SourceCodeScanner {
companion object {
private const val old = "Button"
@JvmField
val ISSUE: Issue = Issue.create(
id = "PreferDefaultComposables",
briefDescription = "Prefer 'DefaultComposables'",
explanation = "The default implementation should be used",
category = Category.CORRECTNESS,
priority = 6,
severity = Severity.WARNING,
implementation = Implementation(
MissingDefaultDetector::class.java,
Scope.JAVA_FILE_SCOPE
)
)
}
override fun getApplicableMethodNames(): List<String> = listOf(old)
override fun visitMethodCall(context: JavaContext, node: UCallExpression, method: PsiMethod) {
context.report(
issue = ISSUE,
scope = node,
location = context.getNameLocation(node),
message = "Prefer our custom version(s) of this component",
)
}
}
字符串
1条答案
按热度按时间xam8gpfp1#
错误消息“This annotation is not applicable to target 'expression'”表示@SuppressLint(“NoteDefaultComposables”)annotation不能用于表达式,只能用于声明(如类、字段、方法或参数)。
在您的代码中,@SuppressLint(“Default DefaultComposables”)注解用于Button函数调用。这是不允许的,因为该函数调用是表达式,而不是声明。
要解决这个问题有两种方法
方法1 -
字符串
办法2
型
默认的方法是声明outside或者onButtonText函数。但是你需要的是声明inside。希望这些方法对你有帮助