@Nullable
    public MethodMatchParameter match() {

      if (!LaravelProjectComponent.isEnabled(psiElement)) {
        return null;
      }

      MethodReferenceBag bag = PhpElementsUtil.getMethodParameterReferenceBag(psiElement);
      if (bag == null) {
        return null;
      }

      // try on current method
      MethodMatcher.MethodMatchParameter methodMatchParameter =
          new StringParameterMatcher(psiElement, parameterIndex)
              .withSignature(this.signatures)
              .match();

      if (methodMatchParameter != null) {
        return methodMatchParameter;
      }

      // walk down next method
      MethodReference methodReference = bag.getMethodReference();
      Method method = Symfony2InterfacesUtil.getMultiResolvedMethod(methodReference);
      if (method == null) {
        return null;
      }

      PsiElement[] parameterReferences =
          PhpElementsUtil.getMethodParameterReferences(method, bag.getParameterBag().getIndex());
      if (parameterReferences == null || parameterReferences.length == 0) {
        return null;
      }

      for (PsiElement var : parameterReferences) {

        MethodMatcher.MethodMatchParameter methodMatchParameterRef =
            new MethodMatcher.StringParameterMatcher(var, parameterIndex)
                .withSignature(this.signatures)
                .match();

        if (methodMatchParameterRef != null) {
          return methodMatchParameterRef;
        }
      }

      return null;
    }
  @Nullable
  public static MethodMatcher.MethodMatchParameter getMatchedSignatureWithDepth(
      PsiElement psiElement,
      MethodMatcher.CallToSignature[] callToSignatures,
      int defaultParameterIndex) {

    if (!LaravelProjectComponent.isEnabled(psiElement)) {
      return null;
    }

    MethodMatcher.MethodMatchParameter methodMatchParameter =
        new MethodMatcher.StringParameterMatcher(psiElement, defaultParameterIndex)
            .withSignature(callToSignatures)
            .match();

    if (methodMatchParameter != null) {
      return methodMatchParameter;
    }

    // try on resolved method
    return new MethodMatcher.StringParameterRecursiveMatcher(psiElement, defaultParameterIndex)
        .withSignature(callToSignatures)
        .match();
  }
    @Nullable
    public MethodMatchParameter match() {

      if (!LaravelProjectComponent.isEnabled(psiElement)) {
        return null;
      }

      MethodReferenceBag bag =
          PhpElementsUtil.getMethodParameterReferenceBag(psiElement, this.parameterIndex);
      if (bag == null) {
        return null;
      }

      CallToSignature matchedMethodSignature = this.isCallTo(bag.getMethodReference());
      if (matchedMethodSignature == null) {
        return null;
      }

      return new MethodMatchParameter(
          matchedMethodSignature,
          bag.getParameterBag(),
          bag.getParameterList().getParameters(),
          bag.getMethodReference());
    }