我如何为Netbeans写一个提示?

时间:2017-03-23 18:20:20

标签: java netbeans netbeans-platform

我到处寻找,我能找到的唯一例子是标记JOptionPane.show并删除它。这对我没什么帮助。

1 个答案:

答案 0 :(得分:1)

注意:这样会提示一个与方法匹配的提示,但是当你完成后,你应该能够匹配更多(如学习RegEx)

这很难做到并且弄明白......我将假设你已经在https://platform.netbeans.org/tutorials/nbm-java-hint.html查看了教程。通过那里的说明创建提示后,您现在有了一个基本的Hint实现:

@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)"

并可以为每个变量设置类型约束。需要注意的一件重要事情是:如果您尝试匹配特定类型的静态方法,请使用该类的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[]"))

你明白了:

Display of hint

现在,本教程展示了一种实现修复的非常麻烦的方法。如果你需要做的只是一个简单的替换,那么就可以这样做:

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中使用的变量相同,否则将被解释为文字。