docs: void addOrMergeInjectionBinding(Class<?> instanceClass, Member member, A annotation)
                      throws InjectionException
      {
          String jndiName = getJndiName(annotation);
  
          String propertyName = null;
          if (jndiName == null || jndiName.length() == 0)
          {
              if (member == null)
              {
                  validateMissingJndiName(instanceClass, annotation);
                  return;
              }
  
              propertyName = getJavaBeansPropertyName(member);
              if (propertyName == null && !isNonJavaBeansPropertyMethodAllowed())
              {
                  Tr.error(tc, "NOT_A_SETTER_METHOD_ON_METHOD_ANNOTATION_CWNEN0008E", member.getName());
                  if (isValidationFailable()) // F50309.6
                  {
                      throw new InjectionException("The " + member.getDeclaringClass() + '.' + member.getName() +
                                                   " method is annotated @" + annotation.annotationType().getSimpleName() +
                                                   ", but it is not a setter method.");
                  }
                  return;
              }
          }
  
          InjectionBinding<?> resultInjectionBinding;
          if (jndiName == null) // F50309.5
          {
              if (ivSimpleInjectionBindings == null)
              {
                  ivSimpleInjectionBindings = new LinkedHashMap<Member, InjectionBinding<A>>();
              }
  
              // If the binding already exists for this member; no need to merge or add
              // the target since same member processed from a different subclass. PM88594
              if (ivSimpleInjectionBindings.containsKey(member))
              {
                  if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled())
                      Tr.debug(tc, "binding found, merge not needed : " + member);
                  return;
              }
  
              InjectionBinding<A> injectionBinding = createInjectionBinding(annotation, instanceClass, member, null);
              resultInjectionBinding = injectionBinding;
  
              if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled())
                  Tr.debug(tc, "adding " + injectionBinding);
              ivSimpleInjectionBindings.put(member, injectionBinding);
          }
          else
          {
              if (propertyName != null)
              {
                  jndiName = instanceClass.getCanonicalName() + '/' + propertyName;
              }
  
              InjectionBinding<A> injectionBinding = getInjectionBindingForAnnotation(jndiName);
              if (injectionBinding == null)
              {
                  resultInjectionBinding = addOrMergeOverrideInjectionBinding(instanceClass, member, annotation, jndiName); // d675843.2
  
                  if (resultInjectionBinding == null)
                  {
                      injectionBinding = createInjectionBinding(annotation, instanceClass, member, jndiName);
                      resultInjectionBinding = injectionBinding;
  
                      updateInjectionBinding(jndiName, injectionBinding);
                      addInjectionBinding(injectionBinding);
                  }
              }
              else
              {
                  resultInjectionBinding = injectionBinding;
                  injectionBinding.merge(annotation, instanceClass, member); // d675172.1
  
                  if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled())
                      Tr.debug(tc, "merged " + injectionBinding);
              }
          }
  
          if (member == null)
          {
              resultInjectionBinding.addInjectionClass(instanceClass); // F743-30682
          }
          else
          {
              resultInjectionBinding.addInjectionTarget(member);
          }
      }