protected PsiParameter getParameterInCaller(PsiMethod called, int paramIdx, PsiMethod caller) {
    //do not change hierarchy
    if (caller.findDeepestSuperMethods().length > 0) {
      return null;
    }

    //find first method call
    final Ref<PsiParameter> ref = new Ref<>();
    ReferencesSearch.search(called, new LocalSearchScope(caller)).forEach(reference -> {
      final PsiElement element = reference.getElement();
      if (element instanceof PsiJavaCodeReferenceElement) {
        final PsiElement elementParent = element.getParent();
        if (elementParent instanceof PsiCallExpression) {
          ref.set(isTheOnlyOneParameterUsage(elementParent, paramIdx, called));
          return false;
        }
      }
      return true;
    });
    return ref.get();
  }
protected PsiParameter getParameterInCaller(PsiMethod called, int paramIdx, PsiMethod caller)