public static boolean matches (PsiType type, ExpectedTypeInfo info) {
    PsiType infoType = info.getType();
    return switch (info.getKind()) {
      case ExpectedTypeInfo.TYPE_STRICTLY -> type.equals(infoType);
      case ExpectedTypeInfo.TYPE_OR_SUBTYPE -> infoType.isAssignableFrom(type);
      case ExpectedTypeInfo.TYPE_OR_SUPERTYPE -> type.isAssignableFrom(infoType);
      case ExpectedTypeInfo.TYPE_BETWEEN -> type.isAssignableFrom(info.getDefaultType()) && infoType.isAssignableFrom(type);
      case ExpectedTypeInfo.TYPE_SAME_SHAPED -> true;
      default -> {
        LOG.error("Unexpected ExpectedInfo kind");
        yield false;
      }
    };
  }
public static boolean matches (PsiType type, ExpectedTypeInfo info)