void (@NotNull Project project, @NotNull PsiElement element, @NotNull ModPsiUpdater updater) { final PsiReferenceExpression methodExpression = (PsiReferenceExpression)element.getParent(); final PsiMethodCallExpression methodCallExpression = (PsiMethodCallExpression)methodExpression.getParent(); final PsiElement parent = methodCallExpression.getParent(); final PsiVariable variable; if (parent instanceof PsiVariable) { variable = (PsiVariable)parent; } else if (parent instanceof PsiAssignmentExpression assignmentExpression) { final PsiExpression lhs = assignmentExpression.getLExpression(); if (!(lhs instanceof PsiReferenceExpression referenceExpression)) { return; } final PsiElement target = referenceExpression.resolve(); if (!(target instanceof PsiVariable)) { return; } variable = (PsiVariable)target; } else { return; } final String variableName = createVariableName(element); final PsiStatement statement = PsiTreeUtil.getParentOfType(element, PsiStatement.class); if (statement == null) { return; } final int result = replaceMethodCalls(variable, statement.getTextOffset(), variableName); final PsiType variableType = variable.getType(); if (!(variableType instanceof PsiClassType classType)) { return; } final PsiType[] parameterTypes = classType.getParameters(); final PsiType parameterType; if (parameterTypes.length > 0) { parameterType = parameterTypes[0]; } else { parameterType = null; } final PsiStatement newStatement = createDeclaration(methodCallExpression, variableName, parameterType); if (newStatement == null) { return; } if (parent.equals(variable)) { if (result == KEEP_NOTHING) { statement.replace(newStatement); } else { insertNewStatement(statement, newStatement); if (result != KEEP_INITIALIZATION) { final PsiExpression initializer = variable.getInitializer(); if (initializer != null) { initializer.delete(); } } } } else { if (result == KEEP_NOTHING || result == KEEP_DECLARATION) { statement.replace(newStatement); } else { insertNewStatement(statement, newStatement); } } }