Я работаю над обслуживанием монолитной базы кода Java, где было обнаружено, что некоторые из методов @GET фактически запускают сеанс записи и, следовательно, на самом деле должны быть методами @POST. Чтобы облегчить поиск, я написал следующее регулярное выражение:
Это дало мне все вхождения аннотации @GET, которая достигла строки 'startWrite' (которая является частью имен методов, запускающих сеанс записи) до достижения '}', что используется для закрытия метода в Java. Это решение не идеально, так как возможно, что } используется внутри метода перед началом сеанса записи (например, в операторе if), но оно оказалось достаточно эффективным для работы.
Однако с тех пор я заметил, что многие методы имеют этот формат:
Код: Выделить всё
@GET
@Path("/methodName")
public ObjectName methodName(...){
...
return methodNameInner(...);
}
private methodNameInner(...){
startWriteSession();
...
}
Другими словами, команда сеанса записи перемещается в другой метод, который всегда имеет то же имя, что и исходный метод (и путь), за которым следует «Inner». этот внутренний метод всегда находится ниже исходного метода. Я попытался написать регулярное выражение, которое искало вхождения @GET, за которым следовали некоторые строки до имени пути или имени метода (которое я выделил в отдельную группу), за которым следовали дополнительные символы, затем \1Inner, а затем тот же [^}]+startWrite, что означает, что внутренний метод достиг строки startWrite до того, как достиг конца метода. Но мне не удалось заставить его работать.
Может кто-нибудь мне помочь?
Подробнее здесь:
https://stackoverflow.com/questions/787 ... ner-method