CollectTerminal (@NotNull CollectTerminal terminal, @NotNull PsiElement element) { PsiVariable containerVariable = terminal.getTargetVariable(); if (containerVariable == null || !(element instanceof PsiExpressionStatement expressionStatement)) return null; if (!(expressionStatement.getExpression() instanceof PsiMethodCallExpression methodCall)) return null; PsiReferenceExpression methodExpression = methodCall.getMethodExpression(); if (!"sort".equals(methodExpression.getReferenceName())) return null; PsiMethod method = methodCall.resolveMethod(); if (method == null) return null; PsiClass containingClass = method.getContainingClass(); if (containingClass == null) return null; PsiExpression containerExpression = null; PsiExpression comparatorExpression = null; if (JAVA_UTIL_COLLECTIONS.equals(containingClass.getQualifiedName()) || JAVA_UTIL_ARRAYS.equals(containingClass.getQualifiedName())) { PsiExpression[] args = methodCall.getArgumentList().getExpressions(); if (args.length == 1) { containerExpression = args[0]; } else if (args.length == 2) { containerExpression = args[0]; comparatorExpression = args[1]; } else { return null; } } else if (InheritanceUtil.isInheritor(containingClass, JAVA_UTIL_LIST)) { containerExpression = methodExpression.getQualifierExpression(); PsiExpression[] args = methodCall.getArgumentList().getExpressions(); if (args.length != 1) return null; comparatorExpression = args[0]; } if (!(containerExpression instanceof PsiReferenceExpression) || !terminal.isTargetReference(containerExpression)) { return null; } if (ExpressionUtils.isNullLiteral(comparatorExpression)) { comparatorExpression = null; } return new SortingTerminal(terminal, expressionStatement, comparatorExpression); }