void (@NotNull CompletionParameters parameters, @NotNull CompletionResultSet result) { if (parameters.getCompletionType() != CompletionType.BASIC && parameters.getCompletionType() != CompletionType.SMART) { return; } if (parameters.getInvocationCount() == 0 && TemplateManagerImpl.getTemplateState(parameters.getEditor()) != null) { return; } PsiElement position = parameters.getPosition(); Set<LookupElement> lookupSet = new HashSet<>(); if (psiElement(PsiIdentifier.class).andNot(INSIDE_TYPE_PARAMS_PATTERN).withParent( or(psiElement(PsiLocalVariable.class), psiElement(PsiParameter.class))).accepts(position)) { completeLocalVariableName(lookupSet, result.getPrefixMatcher(), (PsiVariable)parameters.getPosition().getParent(), parameters.getInvocationCount() >= 1); for (LookupElement item : lookupSet) { if (item instanceof LookupItem) { ((LookupItem<?>)item).setAutoCompletionPolicy(AutoCompletionPolicy.GIVE_CHANCE_TO_OVERWRITE); } } } if (psiElement(PsiIdentifier.class).withParent(PsiField.class).andNot(INSIDE_TYPE_PARAMS_PATTERN).accepts(position)) { PsiField variable = (PsiField)parameters.getPosition().getParent(); completeMethodName(lookupSet, variable, result.getPrefixMatcher()); completeFieldName(lookupSet, variable, result.getPrefixMatcher(), parameters.getInvocationCount() >= 1); } if (psiElement(PsiIdentifier.class).withParent(PsiRecordComponent.class).andNot(INSIDE_TYPE_PARAMS_PATTERN).accepts(position)) { PsiRecordComponent component = (PsiRecordComponent)parameters.getPosition().getParent(); completeComponentName(lookupSet, component, result.getPrefixMatcher()); } if (PsiJavaPatterns.psiElement().nameIdentifierOf(PsiJavaPatterns.psiMethod().withParent(PsiClass.class)).accepts(position)) { completeMethodName(lookupSet, parameters.getPosition().getParent(), result.getPrefixMatcher()); } for (LookupElement item : lookupSet) { result.addElement(item); } }