private DomainObjectListener createDomainObjectListener() {
		// @formatter:off
		return new DomainObjectListenerBuilder(this)
			.ignoreWhen(() -> !symProvider.isVisible() && !refProvider.isVisible())
			.any(RESTORED, MEMORY_BLOCK_ADDED, MEMORY_BLOCK_REMOVED)
				.terminate(this::reload)
			.with(ProgramChangeRecord.class)
				.each(CODE_ADDED, CODE_REMOVED)
					.call(this::codeAddedRemoved)
				.each(SYMBOL_ADDED)
					.call(this::symbolAdded)
				.each(SYMBOL_REMOVED)
					.call(this::symbolRemoved)
				.each(SYMBOL_RENAMED, SYMBOL_SCOPE_CHANGED, SYMBOL_DATA_CHANGED)
					.call(this::symbolChanged)
				.each(SYMBOL_SOURCE_CHANGED)
					.call(this::symbolSourceChanged)
				.each(SYMBOL_PRIMARY_STATE_CHANGED)
					.call(this::symbolPrimaryStateChanged)
				.each(REFERENCE_ADDED)
					.call(this::referenceAdded)
				.each(REFERENCE_REMOVED)
					.call(this::referenceRemoved)
				.each(EXTERNAL_ENTRY_ADDED, EXTERNAL_ENTRY_REMOVED)
					.call(this::extenalEntryAddedRemoved)
			.build();
		// @formatter:on
	}
Tells a plugin that it is no longer needed.
The plugin should remove itself from anything that
it is registered to and release any resources.
Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/symtable/SymbolTablePlugin.java