Я хочу реализовать свой собственный класс DefaultTerminalConverters для того, чтобы передать значение Integer вместо правила терминала VALUE_TERMINAL
VALUE_TERMINAL из моей грамматики:
terminal VALUE_TERMINAL:
( '0' .. '9' )+ ;
код моего собственного DefaultTerminalConverters:
import com.google.inject.Inject;
import org.eclipse.xtext.common.services.DefaultTerminalConverters;
import org.eclipse.xtext.conversion.IValueConverter;
import org.eclipse.xtext.conversion.ValueConverter;
import org.eclipse.xtext.conversion.impl.AbstractLexerBasedConverter;
import org.eclipse.xtext.nodemodel.INode;
public class MyLangValueConverter extends DefaultTerminalConverters {
@Inject MyINTValueConverter myINTValueConverter;
@ValueConverter(rule="VALUE_TERMINAL")
public IValueConverter<Integer> VALUE_TERMINAL() {
return myINTValueConverter;
}
private static class MyINTValueConverter extends AbstractLexerBasedConverter<Integer> {
@Override
public Integer toValue(String string, INode node) {
return new Integer(string);
}
@Override
public String toString(Integer value){
return String.valueOf(value);
}
}
}
Когда я пишу что-то в моем собственном DSL, я всегда получаю ошибку java.lang.Integer cannot be cast to java.lang.String
при использовании VALUE_TERMINAL.В чем может быть проблема ?