@NotNull
  @Override
  public List<PsiType[]> inferExpectedSignatures(@NotNull PsiMethod method,
                                                 @NotNull PsiSubstitutor substitutor,
                                                 String @NotNull [] options) {
    PsiParameter[] parameters = method.getParameterList().getParameters();
    if (myParam < parameters.length) {
      PsiParameter parameter = parameters[myParam];
      PsiType originalType = parameter.getType();

      PsiType substituted = substitutor.substitute(originalType);

      if (myGeneric == -1) {
        return produceResult(substituted);
      }
      else {
        if (substituted instanceof PsiClassType) {
          PsiType[] typeParameters = ((PsiClassType)substituted).getParameters();
          if (myGeneric < typeParameters.length) {
            return produceResult(typeParameters[myGeneric]);
          }
          //if (substituted.equalsToText(CommonClassNames.JAVA_LANG_STRING)) {
          //  return produceResult(TypesUtil.createType(CommonClassNames.JAVA_LANG_CHARACTER, method));
          //}
        }
      }
    }
    return ContainerUtil.emptyList();
  }
@NotNull
  @Override
  public List<PsiType[]> inferExpectedSignatures(@NotNull PsiMethod method,
                                                 @NotNull PsiSubstitutor substitutor,
                                                 String @NotNull [] options)