code: def CheckNextIncludeOrder(self, header_type):
      
      error_message = ('Found %s after %s' %
                       (self._TYPE_NAMES[header_type],
                        self._SECTION_NAMES[self._section]))
  
      last_section = self._section
  
      if header_type == _C_SYS_HEADER:
        if self._section <= self._C_SECTION:
          self._section = self._C_SECTION
        else:
          self._last_header = ''
          return error_message
      elif header_type == _CPP_SYS_HEADER:
        if self._section <= self._CPP_SECTION:
          self._section = self._CPP_SECTION
        else:
          self._last_header = ''
          return error_message
      elif header_type == _LIKELY_MY_HEADER:
        if self._section <= self._MY_H_SECTION:
          self._section = self._MY_H_SECTION
        else:
          self._section = self._OTHER_H_SECTION
      elif header_type == _POSSIBLE_MY_HEADER:
        if self._section <= self._MY_H_SECTION:
          self._section = self._MY_H_SECTION
        else:
          # This will always be the fallback because we're not sure
          # enough that the header is associated with this file.
          self._section = self._OTHER_H_SECTION
      else:
        assert header_type == _OTHER_HEADER
        self._section = self._OTHER_H_SECTION
  
      if last_section != self._section:
        self._last_header = ''
  
      return ''
docs: Returns a non-empty error message if the next header is out of order.
  
      This function also updates the internal state to be ready to check
      the next include.
  
      Args:
        header_type: One of the _XXX_HEADER constants defined above.
  
      Returns:
        The empty string if the header is in the right order, or an
        error message describing what's wrong.