package org.gridkit.jvmtool.stacktrace; import java.io.IOException; import java.lang.Thread.State; import org.gridkit.jvmtool.codec.stacktrace.ThreadSnapshotEvent; import org.gridkit.jvmtool.event.Event; import org.gridkit.jvmtool.event.EventReader; import org.gridkit.jvmtool.event.ShieldedEventReader; public class LegacyStackReader implements StackTraceReader { private EventReader<ThreadSnapshotEvent> events; public LegacyStackReader(EventReader<Event> source) { events = new ShieldedEventReader<ThreadSnapshotEvent>(source, ThreadSnapshotEvent.class); } @Override public boolean isLoaded() { return events.hasNext(); } @Override public long getThreadId() { return events.peekNext().threadId(); } @Override public long getTimestamp() { return events.peekNext().timestamp(); } @Override public String getThreadName() { return events.peekNext().threadName(); } @Override public State getThreadState() { return events.peekNext().threadState(); } @Override public CounterCollection getCounters() { return events.peekNext().counters(); } @Override public StackTraceElement[] getTrace() { StackFrameList list = events.peekNext().stackTrace(); if (list == null) { return null; } else { StackTraceElement[] strace = new StackTraceElement[list.depth()]; for(int i = 0; i != strace.length; ++i) { strace[i] = list.frameAt(i).toStackTraceElement(); } return strace; } } @Override public StackFrameList getStackTrace() { return events.peekNext().stackTrace(); } @Override public boolean loadNext() throws IOException { if (events.hasNext()) { events.next(); } return events.hasNext(); } }