Я использую метод посетителя для оценки кода при его анализе.Для вызовов функций я хочу обработать операторы return, чтобы метод visitor для правила оператора return выбрасывал пользовательское исключение ReturnException
.Это делается для того, чтобы в методе посетителя для вызова функции он мог перехватить оператор возврата исключения и вернуть возвращаемое значение, которое я сохранил в объекте исключения.Тем не менее, я получаю ошибку, когда я помещаю попытку try в мою функцию VisitReturnStatement, которую я переопределяю из класса BaseVisitor:
try {
throw new ReturnStatementException("Return statement", retValue);
}
catch(ReturnStatementException e) {
System.out.println("Return statement exception caught");
throw e;
}
Ошибка: error: unreported exception ReturnStatementException; must be caught or declared to be thrown throw e;
Я понял, что это потому, что янет исключения, объявленного в методе, например:
@Override
public Value visitReturnStatement (CalculatorParser.ReturnStatementContext ctx) throws Exception {...}
Но если я добавлю throws Exception
, я получу ошибку Exception Exception is not compatible with throws clause in CalculatorBaseVisitor<Value>