在SyntaxErrorMessageProvider中提交值并在QuickfixProvider中使用它们?

时间:2015-10-27 13:40:28

标签: java xtext xtend

我正在覆盖Xtext使用的标准错误消息。在我的SyntaxErrorMessageProvider中,我正在检查要素类型。如果用户输入double,则应该可以通过简单地删除小数位来将其更改为integer

@Override
public SyntaxErrorMessage getSyntaxErrorMessage(IParserErrorContext context) {
    if (context.getRecognitionException() instanceof MismatchedTokenException) {
        MismatchedTokenException exception = (MismatchedTokenException) context
                .getRecognitionException();
        String value = exception.token.getText();
        if (isDouble(value)) {
            return new SyntaxErrorMessage("Parser error: The parameter '"
                    + value + "' has a wrong type. It should be integer.",
                    IssueCodes.UNEXPECTED_DOUBLE_VALUE);
        }
    }
    // should never happen!
    return null;
}

新的SyntaxErrorMessage对象仅包含错误消息和IssueCode。在我的QuickfixProvider我想提供一个quickfix,它会将DOUBLE值更改为INTEGER

@Fix(IssueCodes.UNEXPECTED_DOUBLE_VALUE)
public void changeDoubleToInt(final Issue issue,
        IssueResolutionAcceptor acceptor) {
    acceptor.accept(issue, "Change to integer", "Change variable value to integer.",
            "correction_change.gif", new IModification() {
                public void apply(IModificationContext context)
                        throws BadLocationException {
                    IXtextDocument xtextDocument = context
                            .getXtextDocument();
                    // cut decimal places
                }
            });
}

但要做到这一点,我需要double值。是否可以在SyntacErrorMessageProvider中提交double值,以便我可以在QuickfixProvider中使用它?

1 个答案:

答案 0 :(得分:0)

SyntaxErrorMessage有第二个带有附加数组String[] issueData的构造函数。您可以使用它来传递其他数据。应该可以使用quickfix提供程序中的issue.getData()来获取此数据。