code: static Property parse(final String line) throws IOException {
          if (!line.startsWith("property ")) {
              throw new IOException("not a property: '"
                      + line + "'");
          }
          String definition = line.substring("property ".length());
          definition = definition.trim();
  
          if (!definition.startsWith("list ")) {
              throw new IllegalArgumentException("not a list property: '"
                      + line + "'");
          }
          definition = definition.substring("list ".length());
          definition = definition.trim();
  
          String[] parts = definition.split(" +", 3);
          if (parts.length != 3) {
              throw new IOException("Expected three parts in list property "
                      + "definition: '" + line + "'");
          }
          String countType = parts[0];
          String type = parts[1];
          String name = parts[2];
  
          DataType dataType;
          DataType countDataType;
          try {
              dataType = DataType.parse(type);
              countDataType = DataType.parse(countType);
          }
          catch (IllegalArgumentException e) {
              throw new IOException(e.getMessage());
          }
  
          return new ListProperty(countDataType, name, dataType);
      }
docs: Parses a list-property header line.
  @param line Header line.
  @return Property described on the line.
  @throws IOException if the header line as an invalid format.