void (@NotNull final CompletionParameters parameters, @NotNull final CompletionResultSet result) { ResultTracker tracker = new ResultTracker(result) { @Override public void consume(CompletionResult plainResult) { super.consume(plainResult); LookupElement element = plainResult.getLookupElement(); if (element instanceof TypeArgumentCompletionProvider.TypeArgsLookupElement) { ((TypeArgumentCompletionProvider.TypeArgsLookupElement)element).registerSingleClass(session); } } }; result.runRemainingContributors(parameters, tracker); final boolean empty = tracker.containsOnlyPackages || suggestAllAnnotations(parameters); if (parameters.getCompletionType() == CompletionType.SMART && !tracker.hasStartMatches) { addNullKeyword(parameters, result); } if (JavaCompletionContributor.isClassNamePossible(parameters) && !JavaCompletionContributor.mayStartClassName(result)) { result.restartCompletionOnAnyPrefixChange(); } if (empty) { delegate(parameters, JavaCompletionSorting.addJavaSorting(parameters, result), tracker.session); } else { if (parameters.getCompletionType() == CompletionType.BASIC && parameters.getInvocationCount() <= 1 && JavaCompletionContributor.mayStartClassName(result) && JavaCompletionContributor.isClassNamePossible(parameters) && !JavaCompletionContributor.IN_PERMITS_LIST.accepts(parameters.getPosition())) { suggestNonImportedClasses(parameters, JavaCompletionSorting.addJavaSorting(parameters, result.withPrefixMatcher(tracker.betterMatcher)), tracker.session); } } }