@Override
    public boolean visitCallExpression(@NotNull UCallExpression ref) {
      PsiElement sourcePsi = ref.getSourcePsi();
      if (sourcePsi == null) return true;
      PsiMethod target = ref.resolve();
      if (target == null) return true;
      if (IGNORED_METHODS.methodMatches(target)) return true;
      if (!target.hasModifierProperty(PsiModifier.STATIC)) {
        PsiClass containingClass = target.getContainingClass();
        if (containingClass != null && (CommonClassNames.JAVA_LANG_STRING.equals(containingClass.getQualifiedName()) ||
                                        CommonClassNames.JAVA_LANG_CHAR_SEQUENCE.equals(containingClass.getQualifiedName()))) {
          return true;
        }
      }
      if (ref.getUastParent() instanceof UQualifiedReferenceExpression parent) {
        if (STRING_BUILDER_TO_STRING.methodMatches(target)) {
          UExpression receiver = parent.getReceiver();
          if (receiver instanceof UResolvable) {
            PsiElement receiverTarget = ((UResolvable)receiver).resolve();
            if (receiverTarget instanceof PsiModifierListOwner) {
              if (NlsInfo.forModifierListOwner((PsiModifierListOwner)receiverTarget).canBeUsedInLocalizedContext()) return false;
            }
            ULocalVariable uVar = UastContextKt.toUElement(receiverTarget, ULocalVariable.class);
            if (uVar != null && NlsInfo.fromUVariable(uVar).canBeUsedInLocalizedContext()) return false;
          }
        }
      }
      if (MethodUtils.isToString(target) && PsiPrimitiveType.getUnboxedType(ref.getReceiverType()) != null) {
        // toString() on primitive: consider safe
        return true;
      }
      processReferenceToNonLocalized(sourcePsi, ref, target);
      return true;
    }
@Override
    public boolean visitCallExpression(@NotNull UCallExpression ref)