package org.eclipse.tracecompass.ctf.core.trace;
+import static org.eclipse.tracecompass.common.core.NonNullUtils.checkNotNull;
+
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
import org.eclipse.tracecompass.internal.ctf.core.Activator;
import org.eclipse.tracecompass.internal.ctf.core.trace.StreamInputReaderTimestampComparator;
-import com.google.common.collect.ImmutableSet;
-import com.google.common.collect.ImmutableSet.Builder;
-
/**
* A CTF trace reader. Reads the events of a trace.
*
/**
* Vector of all the trace file readers.
*/
- private final List<CTFStreamInputReader> fStreamInputReaders =
- Collections.synchronizedList(new ArrayList<CTFStreamInputReader>());
+ private final List<CTFStreamInputReader> fStreamInputReaders = Collections.synchronizedList(new ArrayList<CTFStreamInputReader>());
/**
* Priority queue to order the trace file readers by timestamp.
*/
fStartTime = 0;
if (hasMoreEvents()) {
- fStartTime = getTopStream().getCurrentEvent().getTimestamp();
+ fStartTime = checkNotNull(getTopStream().getCurrentEvent()).getTimestamp();
setEndTime(fStartTime);
}
}
/*
* Create a reader and add it to the group.
*/
- fStreamInputReaders.add(new CTFStreamInputReader(streamInput));
+ fStreamInputReaders.add(new CTFStreamInputReader(checkNotNull(streamInput)));
}
}
/*
* Create a reader.
*/
- CTFStreamInputReader streamInputReader = new CTFStreamInputReader(
- streamInput);
+ CTFStreamInputReader streamInputReader = new CTFStreamInputReader(checkNotNull(streamInput));
+
/*
* Add it to the group.
* @return the iterable of the stream input readers
*/
public Iterable<IEventDeclaration> getEventDeclarations() {
- ImmutableSet.Builder<IEventDeclaration> builder = new Builder<>();
+ Set<IEventDeclaration> retSet = new HashSet<>();
for (CTFStreamInputReader sir : fStreamInputReaders) {
- builder.addAll(sir.getEventDeclarations());
+ retSet.addAll(sir.getEventDeclarations());
}
- return builder.build();
+ retSet.remove(null);
+ return retSet;
}
/**
* Add each trace file reader in the priority queue, if we are able
* to read an event from it.
*/
- reader.setParent(this);
CTFResponse readNextEvent = reader.readNextEvent();
if (readNextEvent == CTFResponse.OK || readNextEvent == CTFResponse.WAIT) {
fPrio.add(reader);
* Add it back in the queue.
*/
fPrio.add(top);
- final long topEnd = fTrace.timestampCyclesToNanos(top.getCurrentEvent().getTimestamp());
+ /*
+ * We're in OK, there's a guaranteed top#getCurrentEvent() unless another
+ * thread does something bad.
+ */
+ EventDefinition currentEvent = checkNotNull(top.getCurrentEvent());
+ final long topEnd = fTrace.timestampCyclesToNanos(currentEvent.getTimestamp());
setEndTime(Math.max(topEnd, getEndTime()));
fEventCountPerTraceFile[top.getName()]++;
-
- if (top.getCurrentEvent() != null) {
- fEndTime = Math.max(top.getCurrentEvent().getTimestamp(),
- fEndTime);
- }
+ fEndTime = Math.max(currentEvent.getTimestamp(), fEndTime);
break;
}
case WAIT: {