void (Set<LookupElement> set, @NotNull PsiField var, @NotNull PrefixMatcher matcher, boolean includeOverlapped) { FeatureUsageTracker.getInstance().triggerFeatureUsed("editing.completion.variable.name"); Project project = var.getProject(); JavaCodeStyleManager codeStyleManager = JavaCodeStyleManager.getInstance(project); VariableKind variableKind = JavaCodeStyleManager.getInstance(project).getVariableKind(var); String prefix = matcher.getPrefix(); if (PsiTypes.voidType().equals(var.getType()) || psiField().inClass(psiClass().isInterface().andNot(psiClass().isAnnotationType())).accepts(var)) { completeVariableNameForRefactoring(project, set, matcher, var.getType(), variableKind, includeOverlapped, true); return; } SuggestedNameInfo suggestedNameInfo = codeStyleManager.suggestVariableName(variableKind, null, null, var.getType()); String[] suggestedNames = suggestedNameInfo.names; addLookupItems(set, suggestedNameInfo, matcher, project, suggestedNames); if (!hasStartMatches(set, matcher) && includeOverlapped) { // use suggested names as suffixes String requiredSuffix = codeStyleManager.getSuffixByVariableKind(variableKind); if(variableKind != VariableKind.STATIC_FINAL_FIELD){ for (int i = 0; i < suggestedNames.length; i++) suggestedNames[i] = codeStyleManager.variableNameToPropertyName(suggestedNames[i], variableKind); } addLookupItems(set, null, matcher, project, getOverlappedNameVersions(prefix, suggestedNames, requiredSuffix)); } addLookupItems(set, suggestedNameInfo, matcher, project, getUnresolvedReferences(var.getParent(), false, matcher)); PsiExpression initializer = var.getInitializer(); PsiClass containingClass = var.getContainingClass(); if (initializer != null && containingClass != null) { SuggestedNameInfo initializerSuggestions = JavaNameSuggestionUtil.suggestFieldName( var.getType(), null, initializer, var.hasModifierProperty(PsiModifier.STATIC), containingClass); addLookupItems(set, initializerSuggestions, matcher, project, initializerSuggestions.names); } }