NamesByExprInfo (@NotNull PsiExpression expr, @Nullable VariableKind variableKind) { List<String> fromLiteral = ExpressionUtils.nonStructuralChildren(expr) .map(e -> e instanceof PsiLiteralExpression literal && literal.getValue() instanceof String str ? str : null) .filter(Objects::nonNull) .flatMap(literal -> LiteralNameSuggester.literalNames(literal).stream()) .distinct() .toList(); final LinkedHashSet<String> names = new LinkedHashSet<>(fromLiteral); ContainerUtil.addIfNotNull(names, suggestVariableNameFromConstant(expr, variableKind)); ContainerUtil.addIfNotNull(names, suggestVariableNameFromLiterals(expr)); NamesByExprInfo byExpr = suggestVariableNameByExpressionOnly(expr, variableKind, false); NamesByExprInfo byExprPlace = suggestVariableNameByExpressionPlace(expr, variableKind); NamesByExprInfo byExprAllMethods = suggestVariableNameByExpressionOnly(expr, variableKind, true); names.addAll(byExpr.names); names.addAll(byExprPlace.names); PsiType type = expr.getType(); if (type != null && variableKind != null) { names.addAll(doSuggestNamesByType(type, variableKind)); } names.addAll(byExprAllMethods.names); String propertyName = byExpr.propertyName != null ? byExpr.propertyName : byExprPlace.propertyName; return new NamesByExprInfo(propertyName, names); }