protected ApplicableType isApplicableFor(@NotNull PsiType fieldType) {
    ExpectedTypeInfo[] expectedTypes = getExpectedTypes();
    for (ExpectedTypeInfo info : expectedTypes) {
      if (TypeConversionUtil.isAssignable(info.getType(), fieldType)) return ApplicableType.APPLICABLE;
      if (info.getType() instanceof PsiClassType classType &&
          classType.getParameters().length != 0 &&
          TypeConversionUtil.isAssignable(TypeConversionUtil.erasure(info.getType()), fieldType)) {
        return ApplicableType.PARTLY;
      }
    }
    return expectedTypes.length == 0 ? ApplicableType.APPLICABLE : ApplicableType.NONE;
  }
protected ApplicableType isApplicableFor(@NotNull PsiType fieldType)