docs: public static List<String> generatePropertyNameList(String propertyName, List<String> suffixValues) {
          List<String> propertyNames = new ArrayList<>();
          int suffixes = suffixValues.size();
          if (suffixes > 0) {
              //starting values for the counter based on the number of suffixes
              // 4        1111            15
              // 3        0111            7
              // 2        0011            3
              // 1        0001            1
  
              //bit masks for the suffixes
              //1 << 3        1000
              //1 << 2        0100
              //1 << 1        0010
              //1 << 0        0001
              int counter = ((int) Math.pow(2, suffixes)) - 1;
              while (counter > 0) {
                  StringBuilder builder = new StringBuilder(propertyName);
                  for (int i = 0; i < suffixes; i++) {
                      int shift = suffixes - (i + 1);
                      int mask = (1 << shift);
                      if ((counter & mask) == mask) {
                          builder.append(".");
                          builder.append(suffixValues.get(i));
                      }
                  }
                  String generatedPropertyName = builder.toString();
                  propertyNames.add(generatedPropertyName);
                  counter--;
              }
          }
          propertyNames.add(propertyName);
          return propertyNames;
      }