Self (final int index, final ElementPattern<? extends PsiMethod> methodPattern) { final PsiNamePatternCondition nameCondition = ContainerUtil.findInstance(methodPattern.getCondition().getConditions(), PsiNamePatternCondition.class); return with(new PatternCondition<>("methodCallParameter") { @Override public boolean accepts(@NotNull final T literal, final ProcessingContext context) { final PsiElement parent = literal.getParent(); if (parent instanceof GrArgumentList psiExpressionList) { if (!(literal instanceof GrExpression)) return false; if (psiExpressionList.getExpressionArgumentIndex((GrExpression)literal) != index) return false; final PsiElement element = psiExpressionList.getParent(); if (element instanceof GrCall) { final GroovyPsiElement expression = element instanceof GrMethodCall ? ((GrMethodCall)element).getInvokedExpression() : element instanceof GrNewExpression ? ((GrNewExpression)element).getReferenceElement() : null; if (expression instanceof GrReferenceElement ref) { if (nameCondition != null && "withName".equals(nameCondition.getDebugMethodName())) { final String methodName = ref.getReferenceName(); if (methodName != null && !nameCondition.getNamePattern().accepts(methodName, context)) { return false; } } for (GroovyResolveResult result : ref.multiResolve(false)) { final PsiElement psiElement = result.getElement(); if (methodPattern.accepts(psiElement, context)) { return true; } } } } } return false; } }); }