package com.insightfullogic.honest_profiler.core.profiles.lean.info; import com.insightfullogic.honest_profiler.core.parser.StackFrame; /** * FrameInfo collects the metadata about a {@link StackFrame}. It records the method id and, if available, the BCI (Byte * Code Index) and the line number for the frame. */ public class FrameInfo { // Instance Properties private final long methodId; private final int bci; private final int lineNr; // Instance Constructors /** * Constructor which extracts the metadata from a {@link StackFrame}. * <p> * @param stackFrame the {@link StackFrame} whose metadata will be stored */ public FrameInfo(StackFrame stackFrame) { this.methodId = stackFrame.getMethodId(); this.bci = stackFrame.getBci(); this.lineNr = stackFrame.getLineNumber(); } // Instance Accessors /** * Returns the id of the method whose execution was recorded in the frame. * <p> * @return the id of the method whose execution was recorded in the frame */ public long getMethodId() { return methodId; } /** * Returns the Byte Code Index of the execution point recorded in the frame. * <p> * @return the Byte Code Index of the execution point recorded in the frame */ public int getBci() { return bci; } /** * Returns the line number of the execution point recorded in the frame. * <p> * @return the line number of the execution point recorded in the frame */ public int getLineNr() { return lineNr; } // Object Implementation @Override // Generated by Eclipse public int hashCode() { final int prime = 31; int result = 1; result = prime * result + bci; result = prime * result + lineNr; result = prime * result + (int)(methodId ^ (methodId >>> 32)); return result; } @Override public boolean equals(Object obj) { if (this == obj) { return true; } if (obj == null || getClass() != obj.getClass()) { return false; } FrameInfo other = (FrameInfo)obj; return (bci == other.bci && lineNr == other.lineNr && methodId == other.methodId); } @Override public String toString() { return "frame[" + methodId + ":" + lineNr + ":" + bci + "]"; } }