static HighlightInfo.Builder checkCannotWriteToFinal(@NotNull PsiExpression expression, @NotNull PsiFile containingFile) {
    PsiExpression operand = null;
    if (expression instanceof PsiAssignmentExpression) {
      operand = ((PsiAssignmentExpression)expression).getLExpression();
    }
    else if (PsiUtil.isIncrementDecrementOperation(expression)) {
      operand = ((PsiUnaryExpression)expression).getOperand();
    }
    PsiReferenceExpression reference = ObjectUtils.tryCast(PsiUtil.skipParenthesizedExprDown(operand), PsiReferenceExpression.class);
    PsiVariable variable = reference == null ? null : ObjectUtils.tryCast(reference.resolve(), PsiVariable.class);
    if (variable == null || !variable.hasModifierProperty(PsiModifier.FINAL)) return null;
    boolean canWrite = canWriteToFinal(variable, expression, reference, containingFile) && checkWriteToFinalInsideLambda(variable, reference) == null;
    if (canWrite) return null;
    String name = variable.getName();
    String description = JavaErrorBundle.message("assignment.to.final.variable", name);
    HighlightInfo.Builder highlightInfo =
      HighlightInfo.newHighlightInfo(HighlightInfoType.ERROR).range(reference).descriptionAndTooltip(description);
    PsiElement scope = getElementVariableReferencedFrom(variable, expression);
    if (scope == null || variable instanceof PsiField) {
      HighlightFixUtil.registerMakeNotFinalAction(variable, highlightInfo);
    }
    else {
      IntentionAction action = getQuickFixFactory().createVariableAccessFromInnerClassFix(variable, scope);
      highlightInfo.registerFix(action, null, null, null, null);
    }
    return highlightInfo;
  }
static HighlightInfo.Builder checkCannotWriteToFinal(@NotNull PsiExpression expression, @NotNull PsiFile containingFile)