Regex для поиска методов, имеющих «внутренний» методJAVA

Программисты JAVA общаются здесь
Anonymous
Regex для поиска методов, имеющих «внутренний» метод

Сообщение Anonymous »

Я работаю над обслуживанием монолитной базы кода Java, где было обнаружено, что некоторые из методов @GET фактически запускают сеанс записи и, следовательно, на самом деле должны быть методами @POST. Чтобы облегчить поиск, я написал следующее регулярное выражение:

Код: Выделить всё

@GET[^}]+startWrite
Это дало мне все вхождения аннотации @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

Вернуться в «JAVA»