List<Supplier<ReflectiveType>> ( @NotNull PsiMethodCallExpression methodTypeExpression ) { final PsiExpression[] arguments = methodTypeExpression.getArgumentList().getExpressions(); final Pair.NonNull<Integer, Boolean> signature = getGenericSignature(arguments); if (signature != null) { final int objectArgCount = signature.getFirst(); final boolean finalArray = signature.getSecond(); if (objectArgCount == 0 && !finalArray) { return Collections.emptyList(); } final PsiClassType javaLangObject = PsiType.getJavaLangObject(methodTypeExpression.getManager(), methodTypeExpression.getResolveScope()); final ReflectiveType objectType = ReflectiveType.create(javaLangObject, false); final List<ReflectiveType> argumentTypes = new ArrayList<>(); argumentTypes.add(objectType); // return type for (int i = 0; i < objectArgCount; i++) { argumentTypes.add(objectType); } if (finalArray) { argumentTypes.add(ReflectiveType.arrayOf(objectType)); } return ContainerUtil.map(argumentTypes, type -> (() -> type)); } return null; }