@Override
	public boolean applyTo(Program program, Address address, DemanglerOptions options,
			TaskMonitor monitor) throws Exception {

		String label = buildStringLabel();
		if (hasLabel(program, address, label)) {
			return true; // This string has already been applied
		}

		if (!super.applyTo(program, address, options, monitor)) {
			return false;
		}

		Symbol s = program.getSymbolTable().getPrimarySymbol(address);
		if (s != null && s.getSymbolType() == SymbolType.FUNCTION) {
			String message =
				"Failed to demangled string at " + address + " due to existing function";
			setErrorMessage(message);
			Msg.error(this, message);
			return false;
		}

		CreateStringCmd cmd = new CreateStringCmd(address, -1, isUnicode());
		cmd.applyTo(program);

		Symbol demangledSymbol =
			applyDemangledName(label, address, true, false, program);
		return (demangledSymbol != null);
	}
Construct demangled string.
@param mangled the source mangled string
@param originalDemangled the original demangled string
@param name name associated with this object
@param string string text associated with this object or null.  This is used to establish
label and plate comment if specified.  If null, name will be used as symbol name.
@param length length of string or -1.  Actual string data type applied currently
assumes null terminated string.
@param unicode true if string is a Unicode string.
Ghidra/Features/Base/src/main/java/ghidra/app/util/demangler/DemangledString.java