in buildSrc/src/main/groovy/CheckApiChangesPlugin.groovy [253:300]
private String getMethodDesc() {
def args = new StringBuilder()
def returnType = new StringBuilder()
def buf = args
int arrayDepth = 0
def write = { typeName ->
if (buf.size() > 0) buf.append(", ")
buf.append(typeName)
for (; arrayDepth > 0; arrayDepth--) {
buf.append("[]")
}
}
def chars = methodNode.desc.toCharArray()
def i = 0
def readObj = {
if (buf.size() > 0) buf.append(", ")
def objNameBuf = new StringBuilder()
for (; i < chars.length; i++) {
char c = chars[i]
if (c == ';' as char) break
objNameBuf.append((c == '/' as char) ? '.' : c)
}
buf.append(objNameBuf.toString().replaceAll(/^java\.lang\./, ''))
}
for (; i < chars.length;) {
def c = chars[i++]
switch (c) {
case '(': break;
case ')': buf = returnType; break;
case '[': arrayDepth++; break;
case 'Z': write('boolean'); break;
case 'B': write('byte'); break;
case 'S': write('short'); break;
case 'I': write('int'); break;
case 'J': write('long'); break;
case 'F': write('float'); break;
case 'D': write('double'); break;
case 'C': write('char'); break;
case 'L': readObj(); break;
case 'V': write('void'); break;
}
}
"$methodAccessString ${isHiddenApi() ? "@HiddenApi " : ""}${isImplementation() ? "@Implementation " : ""}$methodNode.name(${args.toString()}): ${returnType.toString()}"
}