private boolean doAdded(Program program, AddressSetView set, TaskMonitor monitor,
			MessageLog log) throws CancelledException {

		DemanglerOptions options = getOptions();
		if (!validateOptions(options, log)) {
			log.appendMsg(getName(), "Invalid demangler options--cannot demangle");
			return false;
		}

		// Demangle external symbols after memory symbols.
		// This is done to compensate for cases where the mangled name on externals may be lost
		// after demangling when an alternate Ordinal symbol exists.  The external mangled
		// name is helpful in preserving thunk relationships when a mangled symbols have been
		// placed on a thunk.  It is assumed that analyzer is presented with entire
		// EXTERNAL space in set (all or none).
		boolean demangleExternals = set.contains(EXTERNAL_SET.getMinAddress());
		if (demangleExternals) {
			set = set.subtract(EXTERNAL_SET);
		}

		int memorySymbolCount = demangleSymbols(program, set, 0, options, log, monitor);
		if (demangleExternals) {
			// process external symbols last
			demangleSymbols(program, EXTERNAL_SET, memorySymbolCount, options, log, monitor);
		}

		return true;
	}
The base demangler analyzer.  Implementations of this analyzer will attempt to demangle
symbols in the binary being analyzed.

<P>Default implementations of this class exist for Microsoft and GNU.   These two analyzers will
only be enabled when the program being analyzed has an architecture that fits each respective
analyzer.  Users can subclass this analyzer to easily control the demangling behavior from
the analyzer UI.

<P>This analyzer will call each implementation's
{@link #doDemangle(MangledContext, MessageLog)} method for each symbol.
See the various protected methods of this class for points at which behavior can be overridden.
Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/analysis/AbstractDemanglerAnalyzer.java