code: protected Map<String, String> mergeAnnotationProperties(Map<String, String> oldProperties,
                                                              Set<String> oldXMLPropertyNames,
                                                              String[] newProperties) throws InjectionConfigurationException {
          if (newProperties.length != 0) {
              if (oldProperties == null) {
                  oldProperties = new HashMap<String, String>();
              }
  
              for (String property : newProperties) {
                  int index = property.indexOf('=');
                  if (index == -1) {
                      mergeAnnotationPropertyError(property);
                      continue;
                  }
  
                  String name = property.substring(0, index);
  
                  if (oldXMLPropertyNames == null || !oldXMLPropertyNames.contains(name)) {
                      String newValue = property.substring(index + 1);
                      Object oldValue = oldProperties.get(name);
  
                      if (oldValue == null ? isComplete() : !newValue.equals(oldValue)) {
                          mergeError(oldValue, newValue, true, name + " property", true, name);
                          continue;
                      }
  
                      oldProperties.put(name, newValue);
                  }
              }
          }
  
          return oldProperties;
      }
docs: Merges the properties specified in name=value format by an annotation.
  If an error occurs, {@link #mergeAnnotationPropertyError} or {@link #mergeError} will
  be called.
  
  <p>If an error occurs, {@link #mergeAnnotationPropertyError} or {@link #mergeError} will
  be called, which require {@link #getJNDIEnvironmentRefType} to be defined.
  
  @param oldProperties the old properties, or null if uninitialized
  @param oldXMLPropertyNames the old property names set by XML
  @param newProperties the new properties in name=value format
  @return the old properties updated as necessary
  @throws InjectionConfigurationException if an error occurs