public void setLanguage(LanguageTranslator translator, TaskMonitor monitor)
			throws CancelledException {
		dynamicSymbolAddressMap = new AddressMapImpl((byte) 0x40, addrMap.getAddressFactory());
		invalidateCache(true);
		variableStorageMgr.setLanguage(translator, monitor);

		monitor.setMessage("Translate External Addresses...");
		try {
			AddressFactory oldAddrFactory = translator.getOldLanguage().getAddressFactory();
			SymbolIterator externalSymbols = getExternalSymbols();
			while (externalSymbols.hasNext()) {
				monitor.checkCancelled();
				SymbolDB s = (SymbolDB) externalSymbols.next();

				String extAddrStr =
					s.record.getString(SymbolDatabaseAdapter.SYMBOL_EXTERNAL_PROG_ADDR_COL);
				if (extAddrStr == null) {
					continue;
				}
				// skip addresses which do not parse by old language - could be
				// overlay (although this should generally never occur)
				Address addr = oldAddrFactory.getAddress(extAddrStr);
				if (addr == null) {
					continue;
				}
				AddressSpace newAddressSpace =
					translator.getNewAddressSpace(addr.getAddressSpace().getName());
				if (newAddressSpace == null || !newAddressSpace.isLoadedMemorySpace()) {
					// can't really recover from this
					throw new AssertException(
						"Failed to map external memory address: " + extAddrStr);
				}
				addr = newAddressSpace.getAddress(addr.getOffset());
				String newAddrStr = addr.toString();
				if (!newAddrStr.equals(extAddrStr)) {
					s.record.setString(SymbolDatabaseAdapter.SYMBOL_EXTERNAL_PROG_ADDR_COL,
						newAddrStr);
					adapter.updateSymbolRecord(s.record);
				}
			}
		}
		catch (IOException e) {
			program.dbError(e);
		}
	}
Called by the NamespaceManager when a namespace is removed; remove all symbols that have the
given namespace ID.

@param namespaceID ID of namespace being removed
Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/symbol/SymbolManager.java