private void addElementWithError(
     final Compiler.Context context, final String key, final LiteralValue value) {
   Map.Entry<String, LiteralValue> previous = findElementByValue(value);
   if (previous != null) {
     context.error(value.getCodePosition(), "Cannot assign auto-value " + value + " to " + key);
     context.warning(
         previous.getValue().getCodePosition(),
         "Value " + value + " already assigned to " + previous.getKey());
     return;
   }
   addElement(key, value);
 }
 private void walkBindingNode(
     final Compiler.Context context, final AST node, final Definition message) {
   List<AST> children = node.getChildNodes();
   final String identifier = getString(children.get(0));
   final Binding binding = message.createLanguageBinding(identifier);
   for (int i = 1; i < children.size(); i += 2) {
     final String key = getString(children.get(i));
     final String value = getString(children.get(i + 1));
     final Binding.Data prev = binding.getData(key);
     if (prev != null) {
       context.error(
           node.getCodePosition(),
           identifier
               + " language binding for "
               + message.getName()
               + " already defined for '"
               + key
               + "'");
       context.warning(prev.getCodePosition(), "this was the location of the previous definition");
     }
     binding.setData(key, value, node.getCodePosition());
   }
 }