private Address getAddressForReference(CodeUnit codeUnit, Reference reference,
			ServiceProvider serviceProvider, boolean skipExternal) {
		Address address = reference.getToAddress();
		RefType refType = reference.getReferenceType();
		if (!refType.isIndirect()) {
			return address;
		}

		Program program = codeUnit.getProgram();
		Data data = program.getListing().getDefinedDataAt(address);
		Address indirectAddrress = null;
		if (data != null) {
			if (data.isPointer()) {
				Reference ref = data.getPrimaryReference(0);
				indirectAddrress = ref != null ? ref.getToAddress() : (Address) data.getValue();
			}
		}
		else {
			PseudoDisassembler pdis = new PseudoDisassembler(program);
			indirectAddrress = pdis.getIndirectAddr(address);
		}

		if (indirectAddrress != null && (!indirectAddrress.isExternalAddress() || !skipExternal) &&
			followIndirectReference(serviceProvider, indirectAddrress, program)) {
			return indirectAddrress;
		}
		return address;
	}
Navigate to the variable, when directly supplied by the field location

@param navigatable the navigatable to which we should navigate
@param loc the source location
@param goToService the GoTo service
@return true if we decide to attempt navigation
Ghidra/Features/Base/src/main/java/ghidra/app/util/viewer/field/OperandFieldMouseHandler.java