void (@NotNull PsiDeclarationStatement statement) { super.visitDeclarationStatement(statement); if (!reportLocalVariables) { return; } final PsiElement[] declaredElements = statement.getDeclaredElements(); if (declaredElements.length == 0) { return; } final PsiElement firstElement = declaredElements[0]; if (!(firstElement instanceof final PsiLocalVariable firstVariable)) { return; } if (!firstVariable.hasModifierProperty(PsiModifier.FINAL)) { return; } final PsiCodeBlock containingBlock = PsiTreeUtil.getParentOfType(statement, PsiCodeBlock.class); if (containingBlock == null) { return; } for (PsiElement declaredElement : declaredElements) { final PsiLocalVariable variable = (PsiLocalVariable)declaredElement; if (isNecessaryFinal(variable, containingBlock)) { return; } } registerModifierError(PsiModifier.FINAL, firstVariable, firstVariable); }