docs: private void init() {
          final boolean trace = TraceComponent.isAnyTracingEnabled();
  
          Map<String, Map<String, Object>> threadContextConfigs = new HashMap<String, Map<String, Object>>();
  
          for (Enumeration<String> keys = properties.keys(); keys.hasMoreElements();) {
              String key = keys.nextElement();
              // Properties of flattened thread context configurations have the form:
              // threadContextConfigRef.0.*
              if (key.length() > 25 && key.charAt(22) == '.') {
                  int dot = key.indexOf('.', 23);
                  if (dot > 0) {
                      String group = key.substring(23, dot);
                      Map<String, Object> config = threadContextConfigs.get(group);
                      if (config == null)
                          threadContextConfigs.put(group, config = new TreeMap<String, Object>());
                      config.put(key.substring(dot + 1), properties.get(key));
                  }
              } else if (trace && tc.isDebugEnabled() && !SUPPORTED_PROPERTIES.contains(key) && key.indexOf('.') < 0) {
                  Tr.debug(this, tc, "unrecognized attribute: " + key);
                  // TODO: once we have stricter variant of onError, do the following for it:
                  //IllegalArgumentException x = ignoreWarnOrFail(null, IllegalArgumentException.class, "CWWKC1000.unrecognized.property", name, key);
                  //if (x != null)
                  //    throw x;
              }
          }
  
          threadContextConfigurations = new TreeMap<String, Map<String, ?>>();
          for (Map<String, Object> threadContextConfig : threadContextConfigs.values()) {
              String provider = (String) threadContextConfig.get("threadContextProvider");
              if (provider == null)
                  provider = (String) threadContextConfig.get("config.referenceType") + ".provider";
              Map<String, ?> previous = threadContextConfigurations.put(provider, threadContextConfig);
              if (previous != null)
                  throw new IllegalArgumentException(Tr.formatMessage(tc, "CWWKC1002.provider.cardinality.violation", name, previous.get("config.referenceType")));
          }
  
          // Inherit complementary thread context config from base instance
          ContextServiceImpl baseInstance = AccessController.doPrivileged(new PrivilegedAction<ContextServiceImpl>() {
              @Override
              public ContextServiceImpl run() {
                  return (ContextServiceImpl) componentContext.locateService(BASE_INSTANCE);
              }
          });
          if (baseInstance != null)
              baseInstance.addComplementaryThreadContextConfigurationsTo(this);
  
          if (trace && tc.isDebugEnabled())
              Tr.debug(this, tc, "context configuration", threadContextConfigurations);
      }