}
public BitSet linesMentionedMultipleTimes(Method method) {
IAnalysisCache analysisCache = Global.getAnalysisCache();
XMethod xMethod = XFactory.createXMethod(jclass, method);
JumpInfo jumpInfo = null;
try {
jumpInfo = analysisCache.getMethodAnalysis(JumpInfo.class, xMethod.getMethodDescriptor());
} catch (CheckedAnalysisException e) {
AnalysisContext.logError("Error getting jump information", e);
}
BitSet lineMentionedMultipleTimes = new BitSet();
BitSet pcInFinallyBlock = new BitSet();
Code code = method.getCode();
if (code == null) {
return lineMentionedMultipleTimes;
}
CodeException[] exceptionTable = code.getExceptionTable();
if (exceptionTable == null || exceptionTable.length == 0) {
return lineMentionedMultipleTimes;
}
int firstHandler = Integer.MAX_VALUE;
for (CodeException e : exceptionTable) {
if (e.getCatchType() == 0) {
int pc = e.getHandlerPC();
firstHandler = Math.min(firstHandler, pc);
if (jumpInfo != null) {
int end = jumpInfo.getNextJump(pc + 1);
if (end >= pc) {
pcInFinallyBlock.set(pc, end);
}
}
}