in core/src/main/java/org/adoptopenjdk/jitwatch/model/MemberSignatureParts.java [207:315]
public static MemberSignatureParts fromBytecodeSignature(String fqClassName, String toParse, ClassBC classBC)
{
if (signatureHasGenerics(toParse))
{
toParse = isolateGenericsTag(toParse);
}
MemberSignatureParts msp = new MemberSignatureParts();
msp.fullyQualifiedClassName = fqClassName;
if (isStaticInitialiser(toParse))
{
msp.memberName = S_STATIC_INIT;
msp.returnType = Void.TYPE.getName();
return msp;
}
StringBuilder builder = new StringBuilder();
builder.append("^[ ]*");
for (String mod : modifierMap.keySet())
{
builder.append(S_OPEN_PARENTHESES).append(mod).append(S_SPACE).append(S_CLOSE_PARENTHESES).append(C_QUESTION);
}
String regexGenerics = "(\\{.*\\} )?";
String regexReturnType = "(.* )?"; // optional could be constructor
String regexMethodName = ParseUtil.METHOD_NAME_REGEX_GROUP;
String regexParams = "(\\(.*\\))";
String regexRest = "(.*)";
builder.append(regexGenerics);
builder.append(regexReturnType);
builder.append(regexMethodName);
builder.append(regexParams);
builder.append(regexRest);
// logger.info("\n{}\n{}", toParse, builder);
final Pattern patternBytecodeSignature = Pattern.compile(builder.toString());
Matcher matcher = patternBytecodeSignature.matcher(toParse);
int modifierCount = modifierMap.size();
Map<String, String> methodGenericsMap = null;
if (matcher.find())
{
int count = matcher.groupCount();
for (int i = 1; i < count; i++)
{
String group = matcher.group(i);
if (group != null)
{
group = group.trim();
}
if (group != null && i <= modifierCount)
{
msp.modifierList.add(group);
// add bitset value for this modifier
msp.modifier += modifierMap.get(group);
}
if (i == modifierCount + 1)
{
if (group != null)
{
methodGenericsMap = msp.buildGenerics(group);
}
}
if (i == modifierCount + 2)
{
if (group != null)
{
msp.returnType = msp.replaceGenerics(group, classBC, methodGenericsMap);
}
}
if (i == modifierCount + 3)
{
if (group != null)
{
msp.memberName = group;
}
}
if (i == modifierCount + 4)
{
if (group != null)
{
msp.buildParamTypes(group, classBC, methodGenericsMap);
}
}
}
}
completeSignature(toParse, msp);
return msp;
}