V6135. The return value of the 'finally' block overrides return values of 'try' and 'catch' blocks.
Анализатор обнаружил ошибку, связанную с перезаписью возвращаемого значения, полученного из блока try / catch, в блоке finally.
Рассмотрим пример:
try {
return getResponse(....);
} catch (Exception e) {
....
return -1;
} finally {
....
return 0; // <=
}
При выполнении инструкции return из блока try или catch поток исполнения перед выходом из метода зайдет в блок finally и выполнит все инструкции оттуда. В результате, последней выполненной инструкцией станет return из блока finally, которая перезапишет возвращаемое значение из блока try или catch.
Исправленный вариант может выглядеть следующим образом:
int answer = 0;
try {
answer = getResponse(....);
....
} catch (Exception e) {
....
answer = -1;
} finally {
....
return answer;
}
Данная диагностика классифицируется как:
|