final GCEvent event) throws ParseException {
int currentIndex = pos.getIndex();
boolean currentIndexHasChanged = true;
while (hasNextDetail(line, pos) && currentIndexHasChanged) {
final GCEvent detailEvent = new GCEvent();
try {
if (nextCharIsBracket(line, pos)) {
detailEvent.setDateStamp(event.getDatestamp());
detailEvent.setTimestamp(event.getTimestamp());
}
else {
Date datestamp = parseDatestamp(line, pos);
detailEvent.setDateStamp(datestamp);
detailEvent.setTimestamp(getTimestamp(line, pos, datestamp));
}
detailEvent.setExtendedType(parseType(line, pos));
if (nextIsTimestamp(line, pos) || nextIsDatestamp(line, pos)) {
parseDetailEventsIfExist(line, pos, detailEvent);
}
if (detailEvent.getExtendedType().getPattern() == GcPattern.GC_MEMORY_PAUSE) {
setMemoryAndPauses(detailEvent, line, pos);
}
else if (detailEvent.getExtendedType().getPattern() == GcPattern.GC_MEMORY) {
setMemory(detailEvent, line, pos);
skipBlanksAndCommas(line, pos);
if (line.indexOf("]", pos.getIndex()) == pos.getIndex()) {
pos.setIndex(pos.getIndex() + 1);
}
}
else {
detailEvent.setPause(parsePause(line, pos));
}
event.add(detailEvent);
}
catch (UnknownGcTypeException e) {
skipUntilEndOfDetail(line, pos, e);