private void checkUriParameters(String key, Node node, List<String> templates) {
   Node parametersNode = NodeSelector.selectFrom(key, node);
   if (parametersNode != null) {
     for (Node child : parametersNode.getChildren()) {
       String parameterName = ((SimpleTypeNode) ((KeyValueNode) child).getKey()).getLiteralValue();
       if (!templates.contains(parameterName)) {
         child.annotate(
             new WarningMessageAnnotation("Unused uri parameter '" + parameterName + "'"));
       }
     }
   }
 }
 private static String dumpNode(Node child) {
   if (child instanceof KeyValueNode) {
     KeyValueNode keyValueNode = (KeyValueNode) child;
     return dumpNode(keyValueNode.getKey()) + " : " + dumpNode(keyValueNode.getValue());
   } else if (child instanceof ObjectNode) {
     return dump(child);
   } else if (child instanceof StringNode) {
     return "\"" + ((StringNode) child).getValue() + "\"";
   } else {
     return child.toString();
   }
 }
 @Override
 public boolean matches(@Nonnull Node node) {
   return node.getChildren().size() <= maxProperties;
 }
 public static String dump(Node node) {
   StringBuilder builder = new StringBuilder();
   List<String> children = dumpChildren(node.getChildren());
   builder.append("{").append(StringUtils.join(children, ",\n")).append("}");
   return builder.toString();
 }