def METHOD_NAME(self, line):
    # Possible formats:
    #   goroutine 0 [idle]:
    #   goroutine 1 [chan receive, 30 minutes]:
    #   goroutine 17 [syscall, 31 minutes, locked to thread]:
    #   goroutine 34 [syscall, locked to thread]:
    fieldnum = 0
    warnings = []
    line = line.strip()
    try:
        fieldnum = 1 # 'goroutine'
        goword, line = line.split(' ', 1)
        if goword.lower() != 'goroutine':
            raise ParseError('First word ({0}) is not \'goroutine\'!'.format(goword))
        fieldnum = 2 # goroutine ID
        goId, line = line.split(' ', 1)
        if not goId.isdigit():
            raise ParseError('Expected integer goroutine ID, got: {0}'.format(goId))
        self.id = int(goId)
        fieldnum = 3 # State, wait time, etc.
        # Pull the state fields (the stuff between [ and ]) out from the rest of the line
        leftBraceIndex = line.find('[')
        rightBraceIndex = line.find(']')
        if leftBraceIndex == -1 or rightBraceIndex == -1 or rightBraceIndex < (leftBraceIndex + 2):
            raise ParseError('State info not found (or is empty)!')
        if leftBraceIndex > 0:
            warnings.append(self.formatMessage('Extra fields found before state info: {0}'.format(line[0:leftBraceIndex]), fieldnum))
        stateFields = line[leftBraceIndex+1:rightBraceIndex].split(',')
        line = line[rightBraceIndex+1:]
        # Now process each field
        for i in range(len(stateFields)):
            field = stateFields[i].strip()
            if i == 0: # First field is always state
                self.state = field
            elif field == 'locked to thread':
                self.lockedtothread = True
            elif re.match('^[0-9]+ minutes$', field): # Wait time
                waittime, minutes = field.split(' ', 1)
                if not waittime.isdigit():
                    raise ParseError('Expected integer wait time, got: {0}'.format(waittime[0]))
                self.waittime = int(waittime)
            else:
                warnings.append(self.formatMessage('Unknown field found in state info: {0}'.format(field), fieldnum))
            fieldnum += 1
        fieldnum = 0 # Done processing fields
        # Verify no extra fields found on line
        if line is not None and line != ':':
            warnings.append(self.formatMessage('Extra fields found: ''{0}'''.format(line), fieldnum))
        return warnings
    except Exception as exc:
        raiseWithModifiedMessage(sys.exc_info(), self.formatMessage(str(exc), fieldnum))