package com.performizeit.mjprof.plugins.mappers.singlethread.stackframe; /** * Created by life on 27/10/14. */ public class StackFrame { public static String SEVEN_SPACES = " "; String lockFrame = ""; String at = ""; String packageName = ""; String className = ""; String methodName = ""; String fileName = ""; String lineNum = ""; public StackFrame(String stringRep) { stringRep = stringRep.trim(); if (stringRep.startsWith("-")) { lockFrame = stringRep; return; } int atStart = stringRep.indexOf("at "); if (atStart == 0) { at = stringRep.substring(0, atStart + 3); stringRep = stringRep.substring(atStart + 3); } int fnStart = stringRep.indexOf("("); String pkgClsMthd; if (fnStart < 0) { fileName = ""; lineNum = ""; pkgClsMthd = stringRep; } else { String fnln = stringRep.substring(fnStart + 1, stringRep.length() - 1); String[] ss = fnln.split(":"); if (ss.length == 2) { fileName = ss[0]; lineNum = ss[1]; } else { fileName = fnln; } pkgClsMthd = stringRep.substring(0, fnStart); } methodName = pkgClsMthd.substring(pkgClsMthd.lastIndexOf(".") + 1); pkgClsMthd = pkgClsMthd.substring(0, pkgClsMthd.lastIndexOf(".")); if (pkgClsMthd.contains(".")) { // class name contains package className = pkgClsMthd.substring(pkgClsMthd.lastIndexOf(".") + 1); packageName = pkgClsMthd.substring(0, pkgClsMthd.lastIndexOf(".")); } else { className = pkgClsMthd; } } @Override public String toString() { // TODO to string builder String build = ""; build += SEVEN_SPACES; if (!lockFrame.isEmpty()) return build + lockFrame; build += at; if (packageName.length() > 0) build += packageName; if (className.length() > 0) { if (packageName.length() > 0) build += "."; build += className; } if (methodName.length() > 0) { if (packageName.length() > 0 || className.length() > 0) build += "."; build += methodName; } if (fileName.length() > 0 || lineNum.length() > 0) { build += "("; if (fileName.length() > 0) build += fileName; if (lineNum.length() > 0 && fileName.length() > 0) build += ":"; if (lineNum.length() > 0) build += lineNum; build += ")"; } return build; } public String getAt() { return at; } public String getPackageName() { return packageName; } public String getClassName() { return className; } public String getMethodName() { return methodName; } public String getFileName() { return fileName; } public String getLineNum() { return lineNum; } public void setPackageName(String packageName) { this.packageName = packageName; } public void setClassName(String className) { this.className = className; } public void setMethodName(String methodName) { this.methodName = methodName; } public void setFileName(String fileName) { this.fileName = fileName; } public void setLineNum(String lineNum) { this.lineNum = lineNum; } public void setAt(String at) { this.at = at; } }