public String getMethodSignature(ClassFileJava classFile) {
		AbstractConstantPoolInfoJava[] constantPool = classFile.getConstantPool();
		ConstantPoolUtf8Info methodName = (ConstantPoolUtf8Info) constantPool[nameIndex];
		ConstantPoolUtf8Info methodDescriptor =
			(ConstantPoolUtf8Info) constantPool[descriptorIndex];
		StringBuffer stringBuffer = new StringBuffer();
		stringBuffer.append(MethodsInfoAccessFlags.toString(accessFlags));

		if (methodName.getString().equals("<clinit>")) {
			stringBuffer.append(" (class initializer)");
		}
		else {
			stringBuffer.append(' ');
			if (methodName.getString().equals("<init>")) {//replace constructors with name of this class
				ConstantPoolClassInfo thisClass =
					(ConstantPoolClassInfo) constantPool[classFile.getThisClass()];
				ConstantPoolUtf8Info thisClassName =
					(ConstantPoolUtf8Info) constantPool[thisClass.getNameIndex()];
				String className = thisClassName.getString();
				String dottedClassName = className.replace('/', '.');
				int pos = dottedClassName.lastIndexOf('.');
				if (pos > -1) {
					stringBuffer.append(dottedClassName.substring(pos + 1));
				}
				else {
					stringBuffer.append(className);
//					throw new RuntimeException( );//TODO
				}
			}
			else {
				stringBuffer.append(getReturnType(methodDescriptor));
				stringBuffer.append(' ');
				stringBuffer.append(methodName.getString());
			}

			CodeAttribute codeAttribute = getCodeAttribute();
			if (codeAttribute != null) {
				LocalVariableTableAttribute localVariableTable =
					codeAttribute.getLocalVariableTableAttribute();
				if (localVariableTable != null) {
					stringBuffer.append('(');
					LocalVariableJava[] localVariables = localVariableTable.getLocalVariables();
					int startIndex = getParametersStartIndex();
					for (int i = startIndex; i < localVariables.length; ++i) {
						if (localVariables[i].getStartPC() == 0x0) {
							if (i > startIndex) {
								stringBuffer.append(", ");
							}
							ConstantPoolUtf8Info parameterName =
								(ConstantPoolUtf8Info) constantPool[localVariables[i]
										.getNameIndex()];
							ConstantPoolUtf8Info parameterDescriptor =
								(ConstantPoolUtf8Info) constantPool[localVariables[i]
										.getDescriptorIndex()];

							stringBuffer.append(DescriptorDecoder.getTypeNameFromDescriptor(
								parameterDescriptor.getString(), false, true));
							stringBuffer.append(" ");
							stringBuffer.append(parameterName);

						}
					}
					stringBuffer.append(')');
				}
				else {
					stringBuffer.append(
						DescriptorDecoder.getParameterString(methodDescriptor.getString()));
				}
			}

			ExceptionsAttribute exceptionsAttribute = getExceptionsAttribute();
			if (exceptionsAttribute != null) {
				int i = 0;
				for (int k = 0; k < exceptionsAttribute.getNumberOfExceptions(); k++) {
					ConstantPoolClassInfo exceptionClass =
						(ConstantPoolClassInfo) constantPool[exceptionsAttribute
								.getExceptionIndexTableEntry(k)];
					ConstantPoolUtf8Info exceptionClassName =
						(ConstantPoolUtf8Info) constantPool[exceptionClass.getNameIndex()];
					String className = exceptionClassName.getString();
					String dottedClassName = className.replace('/', '.');
					if (i == 0) {
						stringBuffer.append(" throws ");
					}
					else {
						stringBuffer.append(", ");

					}
					stringBuffer.append(dottedClassName);
					i++;
				}
			}
		}
		stringBuffer.append(' ');
		return stringBuffer.toString();
	}
Return a text representation of this methods signature.  
Here are some examples:
<DL>
 <DD><CODE>"public int foo(int bar)"</CODE></DD>
 <DD><CODE>"public static final float foo(double bar)"</CODE></DD>
</DL>
Note: only access flags that map to Java modifier keywords are returned.
@param access the mask of flags denoting access permission.
@return a text representation of the access flags.
Ghidra/Processors/JVM/src/main/java/ghidra/javaclass/format/MethodInfoJava.java