boolean (UpdateParameterInfoContext context) { PsiElement owner = context.getParameterOwner(); if (owner != null && owner.isValid()) { TextRange ownerTextRange = getRelatedRange(owner, context.getEditor()); int caretOffset = context.getOffset(); if (ownerTextRange != null) { if (caretOffset >= ownerTextRange.getStartOffset() && caretOffset <= ownerTextRange.getEndOffset()) { return false; } else { for (PsiElement element = owner.getFirstChild(); element != null; element = element.getNextSibling()) { if (element instanceof PsiErrorElement) return false; } PsiElement parent = owner.getParent(); if (owner instanceof PsiExpressionList && parent instanceof PsiCall) { PsiMethod chosenMethod = CompletionMemory.getChosenMethod((PsiCall)parent); if (chosenMethod != null) { int parametersCount = chosenMethod.getParameterList().getParametersCount(); boolean varArgs = chosenMethod.isVarArgs(); if (Registry.is("editor.completion.hints.virtual.comma")) { int requiredParameters = varArgs ? parametersCount - 1 : parametersCount; int actualParameters = ((PsiExpressionList)owner).getExpressionCount(); if (actualParameters < requiredParameters && ((PsiCall)parent).resolveMethod() == null) return false; } else if (((PsiExpressionList)owner).isEmpty() && (parametersCount == 1 && !varArgs || parametersCount == 2 && varArgs) && !overloadWithNoParametersExists(chosenMethod, context.getObjectsToView())) { return false; } } } } } } return true; }