docs: public Set<String> getAgentProtocols() {
          if (agentProtocols == null) {
              // idempotent, so don't care if we do this concurrently, should all get same result
              Set<String> result = new TreeSet<>();
              Set<String> disabled = new TreeSet<>();
              for (String p : Util.fixNull(disabledAgentProtocols)) {
                  disabled.add(p.trim());
              }
              Set<String> enabled = new TreeSet<>();
              for (String p : Util.fixNull(enabledAgentProtocols)) {
                  enabled.add(p.trim());
              }
              for (AgentProtocol p : AgentProtocol.all()) {
                  String name = p.getName();
                  if (name != null && (p.isRequired()
                          || (!disabled.contains(name) && (!p.isOptIn() || enabled.contains(name))))) {
                      result.add(name);
                  }
              }
              agentProtocols = result;
              return result;
          }
          return agentProtocols;
      }