@Override
	public String getSignature(boolean format) {
		StringBuilder buffer = new StringBuilder();
		buffer.append(specialPrefix == null ? EMPTY_STRING : specialPrefix + SPACE);
		buffer.append(
			visibility == null || "global".equals(visibility) ? EMPTY_STRING : visibility + SPACE);

		buffer.append(isStatic ? "static" + SPACE : EMPTY_STRING);

		buffer.append(isVirtual ? "virtual" + SPACE : EMPTY_STRING);

		String n = getDemangledName();
		boolean hasName = !StringUtils.isBlank(n);

		StringBuilder datatypeBuffer = new StringBuilder();
		String spacer = EMPTY_STRING;
		if (!(datatype instanceof DemangledFunctionPointer) &&
			!(datatype instanceof DemangledFunctionReference) &&
			!(datatype instanceof DemangledFunctionIndirect)) {
			if (datatype != null) {
				datatypeBuffer.append(datatype.getSignature());
				spacer = SPACE;
			}
		}

		// e.g., 'const' - this appears after the data type in MS land
		if (storageClass != null) {
			datatypeBuffer.append(spacer).append(storageClass);
			spacer = SPACE;
		}

		if (isConst()) {
			datatypeBuffer.append(spacer).append("const");
			spacer = SPACE;
		}

		if (isVolatile()) {
			datatypeBuffer.append(spacer).append("volatile");
			spacer = SPACE;
		}

		if (basedName != null) {
			datatypeBuffer.append(spacer).append(basedName);
			spacer = SPACE;
		}

		if ((memberScope != null) && (memberScope.length() != 0)) {
			datatypeBuffer.append(spacer).append(memberScope + "::");
			spacer = SPACE;
		}

		if (isUnaligned()) {
			datatypeBuffer.append(spacer).append("__unaligned");
			spacer = SPACE;
		}

		if (isPointer64()) {
			datatypeBuffer.append(spacer).append("__ptr64");
			spacer = SPACE;
		}

		if (isRestrict()) {
			datatypeBuffer.append(spacer).append("__restrict");
			spacer = SPACE;
		}

		if (namespace != null) {

			datatypeBuffer.append(spacer);
			spacer = EMPTY_STRING;

			datatypeBuffer.append(namespace.getNamespaceString());

			if (hasName) {
				datatypeBuffer.append(NAMESPACE_SEPARATOR);
			}
		}

		if (hasName) {
			datatypeBuffer.append(spacer);
			spacer = EMPTY_STRING;
			datatypeBuffer.append(getName());
		}

		if (datatype instanceof DemangledFunctionPointer) {
			DemangledFunctionPointer funcPtr = (DemangledFunctionPointer) datatype;
			return buffer.append(funcPtr.toSignature(datatypeBuffer.toString())).toString();
		}
		else if (datatype instanceof DemangledFunctionReference) {
			DemangledFunctionReference funcRef = (DemangledFunctionReference) datatype;
			return buffer.append(funcRef.toSignature(datatypeBuffer.toString())).toString();
		}
		else if (datatype instanceof DemangledFunctionIndirect) {
			DemangledFunctionIndirect funcDef = (DemangledFunctionIndirect) datatype;
			return buffer.append(funcDef.toSignature(datatypeBuffer.toString())).toString();
		}

		buffer.append(datatypeBuffer);

		return buffer.toString();
	}
Returns the data type of this variable.
@return the data type of this variable
Ghidra/Features/Base/src/main/java/ghidra/app/util/demangler/DemangledVariable.java