docs: private Object convertListToArray(List<?> rawValues, ExtendedAttributeDefinition attrDef, EvaluationContext context, boolean ignoreWarnings) throws ConfigEvaluatorException {
          // The implementation of this method is similar to convertListToVector,
          // but this method needs to handle primitive array types.  This could
          // be implemented by calling convertListToVector first, but that would
          // require boxing/unboxing the primitive values.  To avoid that, the
          // logic from the convertListToVector and convertObjectToSingleValue
          // methods is inlined for the primitive array types.
  
          int size = rawValues.size();
          int type = attrDef.getType();
          int i = 0;
          if (type == AttributeDefinition.BOOLEAN) {
              boolean[] retVal = new boolean[size];
              for (Object rawValue : rawValues) {
                  String value = resolveStringValue(rawValue, attrDef, context, ignoreWarnings);
                  retVal[i++] = Boolean.parseBoolean(value);
              }
              return retVal;
          } else if (type == AttributeDefinition.BYTE) {
              byte[] retVal = new byte[size];
              for (Object rawValue : rawValues) {
                  String value = resolveStringValue(rawValue, attrDef, context, ignoreWarnings);
                  retVal[i++] = Byte.parseByte(value);
              }
              return retVal;
          } else if (type == AttributeDefinition.CHARACTER) {
              char[] retVal = new char[size];
              for (Object rawValue : rawValues) {
                  String value = resolveStringValue(rawValue, attrDef, context, ignoreWarnings);
                  retVal[i++] = value.charAt(0);
              }
              return retVal;
          } else if (type == AttributeDefinition.DOUBLE) {
              double[] retVal = new double[size];
              for (Object rawValue : rawValues) {
                  String value = resolveStringValue(rawValue, attrDef, context, ignoreWarnings);
                  retVal[i++] = Double.parseDouble(value);
              }
              return retVal;
          } else if (type == AttributeDefinition.FLOAT) {
              float[] retVal = new float[size];
              for (Object rawValue : rawValues) {
                  String value = resolveStringValue(rawValue, attrDef, context, ignoreWarnings);
                  retVal[i++] = Float.parseFloat(value);
              }
              return retVal;
          } else if (type == AttributeDefinition.INTEGER) {
              int[] retVal = new int[size];
              for (Object rawValue : rawValues) {
                  String value = resolveStringValue(rawValue, attrDef, context, ignoreWarnings);
                  retVal[i++] = Integer.parseInt(value);
              }
              return retVal;
          } else if (type == AttributeDefinition.LONG) {
              long[] retVal = new long[size];
              for (Object rawValue : rawValues) {
                  String value = resolveStringValue(rawValue, attrDef, context, ignoreWarnings);
                  retVal[i++] = Long.parseLong(value);
              }
              return retVal;
          } else if (type == AttributeDefinition.SHORT) {
              short[] retVal = new short[size];
              for (Object rawValue : rawValues) {
                  String value = resolveStringValue(rawValue, attrDef, context, ignoreWarnings);
                  retVal[i++] = Short.parseShort(value);
              }
              return retVal;
          } else if (type == MetaTypeFactory.DURATION_TYPE) {
              return convertListToDurationArray(rawValues, attrDef, context, TimeUnit.MILLISECONDS, ignoreWarnings);
          } else if (type == MetaTypeFactory.DURATION_S_TYPE) {
              return convertListToDurationArray(rawValues, attrDef, context, TimeUnit.SECONDS, ignoreWarnings);
          } else if (type == MetaTypeFactory.DURATION_M_TYPE) {
              return convertListToDurationArray(rawValues, attrDef, context, TimeUnit.MINUTES, ignoreWarnings);
          } else if (type == MetaTypeFactory.DURATION_H_TYPE) {
              return convertListToDurationArray(rawValues, attrDef, context, TimeUnit.HOURS, ignoreWarnings);
          } else {
              // STRING, PID_TYPE, TOKEN_TYPE, and all other unknown/invalid types.
              return convertListToStringArray(rawValues, attrDef, context, ignoreWarnings);
          }
      }