@Override
    protected void applyFix(@NotNull Project project, @NotNull PsiElement startElement, @NotNull ModPsiUpdater updater) {
      HashCodeModel model = getHashCodeModel((PsiTypeCastExpression)startElement);
      if (model == null) return;
      PsiExpression argument = model.argument();
      CommentTracker ct = new CommentTracker();
      String call = argument.getType() instanceof PsiPrimitiveType
                    ? "java.lang." + model.type() + ".hashCode(" + ct.text(argument) + ")"
                    : ct.text(argument, PsiPrecedenceUtil.METHOD_CALL_PRECEDENCE) + ".hashCode()";
      PsiLocalVariable local = model.intermediateVariable;
      if (local != null && model.definition != null) {
        PsiExpressionStatement expressionStatement = PsiTreeUtil.getParentOfType(model.definition, PsiExpressionStatement.class);
        if (expressionStatement != null) ct.delete(expressionStatement);
        List<PsiReferenceExpression> references = VariableAccessUtils.getVariableReferences(local);
        if (references.size() == 2) ct.delete(local);
      }
      ct.replaceAndRestoreComments(startElement, call);
    }
@Override
    protected void applyFix(@NotNull Project project, @NotNull PsiElement startElement, @NotNull ModPsiUpdater updater)