@Override
	public void setLocation(String label, Address addr, SourceType source)
			throws InvalidInputException {
		if (label != null && label.length() == 0) {
			label = null;
		}
		if (label == null && addr == null) {
			throw new InvalidInputException("Either an external label or address is required");
		}
		if (addr != null && !addr.isMemoryAddress()) {
			throw new InvalidInputException("Invalid memory address");
		}
		setLabel(label, source);
		setAddress(addr);
	}
Set the label and optional namespace associated with an external location.
Any non-existing namespace will be created as a simple namespace within the associated
library.
@param label external location label.  The label may be qualified with a namespace
and best effort will be used to parse it (see {@link SymbolPath}).
If a namespace is not included within label, the current namespace will be preserved.
@param source the source of this external symbol:
Symbol.DEFAULT, Symbol.ANALYSIS, Symbol.IMPORTED, or Symbol.USER_DEFINED
@throws InvalidInputException if the name contains illegal characters (space for example)
Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/external/ExternalLocationDB.java