如何为 Netbeans 编写提示?
How do I write a hint for Netbeans?
我到处都找过了,我能找到的唯一例子是标记 JOptionPane.show 并将其删除的例子。这对我帮助不大。
注意:这会给出一个匹配方法的提示,但是当你完成后,你应该可以匹配更多(比如学习正则表达式)
这很难做到也很难理解...我假设您已经阅读了 https://platform.netbeans.org/tutorials/nbm-java-hint.html 上的教程。通过那里的说明创建提示后,您现在有一个基本的提示实现:
@Hint(displayName = "#DN_MainCallHint", description = "#DESC_MainCallHint",
category = "general")
@Messages({
"DN_MainCallHint=MainCall",
"DESC_MainCallHint=Warns the user when they are manually calling public "
+ "static void main"
})
public class MainCallHint {
@TriggerPattern(value = "$str.equals(\"\")", //Specify a pattern as needed
constraints = @ConstraintVariableType(variable = "$str", type
= "java.lang.String"))
@Messages("ERR_MainCallHint=Directly calling main! Did you mean to do that?")
public static ErrorDescription computeWarning(HintContext ctx) {
return ErrorDescriptionFactory.forName(ctx, ctx.getPath(), Bundle.
ERR_MainCallHint());
}
}
我遇到的主要麻烦是@TriggerPattern.value
。如果你想匹配一个方法调用,你可以将它设置成这样:
"$caller.method($arg1, $arg2)"
并且可以为每个变量设置类型约束。需要注意的一件重要事情:如果您尝试匹配特定类型的 static 方法,请使用该 class 的 FQN,否则它不适用于参数。所以使用这样的东西:
"test.HintTest.main($args)"
导致 @TriggerPattern
位看起来像这样:
@TriggerPattern(value = "test.HintTest.main($args)", //Specify a pattern as needed
constraints = @ConstraintVariableType(variable = "$args", type
= "java.lang.String[]"))
你得到这个:
现在,本教程展示了一种非常繁琐的修复方法。如果您需要做的只是一个简单的替换,那么可以这样完成:
public static ErrorDescription computeWarning(HintContext ctx) {
Fix fix = JavaFixUtilities.rewriteFix(ctx, "Use notMain instead",
ctx.getPath(), "test.HintTest.notMain($args)");
return ErrorDescriptionFactory.forName(ctx, ctx.getPath(), Bundle.
ERR_MainCallHint(), fix);
}
注意:用于rewriteFix
的变量必须与您在@TriggerPattern
中使用的相同,否则它们将被解释为文字。
我到处都找过了,我能找到的唯一例子是标记 JOptionPane.show 并将其删除的例子。这对我帮助不大。
注意:这会给出一个匹配方法的提示,但是当你完成后,你应该可以匹配更多(比如学习正则表达式)
这很难做到也很难理解...我假设您已经阅读了 https://platform.netbeans.org/tutorials/nbm-java-hint.html 上的教程。通过那里的说明创建提示后,您现在有一个基本的提示实现:
@Hint(displayName = "#DN_MainCallHint", description = "#DESC_MainCallHint",
category = "general")
@Messages({
"DN_MainCallHint=MainCall",
"DESC_MainCallHint=Warns the user when they are manually calling public "
+ "static void main"
})
public class MainCallHint {
@TriggerPattern(value = "$str.equals(\"\")", //Specify a pattern as needed
constraints = @ConstraintVariableType(variable = "$str", type
= "java.lang.String"))
@Messages("ERR_MainCallHint=Directly calling main! Did you mean to do that?")
public static ErrorDescription computeWarning(HintContext ctx) {
return ErrorDescriptionFactory.forName(ctx, ctx.getPath(), Bundle.
ERR_MainCallHint());
}
}
我遇到的主要麻烦是@TriggerPattern.value
。如果你想匹配一个方法调用,你可以将它设置成这样:
"$caller.method($arg1, $arg2)"
并且可以为每个变量设置类型约束。需要注意的一件重要事情:如果您尝试匹配特定类型的 static 方法,请使用该 class 的 FQN,否则它不适用于参数。所以使用这样的东西:
"test.HintTest.main($args)"
导致 @TriggerPattern
位看起来像这样:
@TriggerPattern(value = "test.HintTest.main($args)", //Specify a pattern as needed
constraints = @ConstraintVariableType(variable = "$args", type
= "java.lang.String[]"))
你得到这个:
现在,本教程展示了一种非常繁琐的修复方法。如果您需要做的只是一个简单的替换,那么可以这样完成:
public static ErrorDescription computeWarning(HintContext ctx) {
Fix fix = JavaFixUtilities.rewriteFix(ctx, "Use notMain instead",
ctx.getPath(), "test.HintTest.notMain($args)");
return ErrorDescriptionFactory.forName(ctx, ctx.getPath(), Bundle.
ERR_MainCallHint(), fix);
}
注意:用于rewriteFix
的变量必须与您在@TriggerPattern
中使用的相同,否则它们将被解释为文字。