我正在覆盖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
中使用它?
答案 0 :(得分:0)
SyntaxErrorMessage
有第二个带有附加数组String[] issueData
的构造函数。您可以使用它来传递其他数据。应该可以使用quickfix提供程序中的issue.getData()
来获取此数据。