private List<Address> getOffcutReferenceAddress(CodeUnit cu) {

		Address startAddr = cu.getMinAddress();
		if (!startAddr.isMemoryAddress()) {
			return Collections.emptyList();
		}

		Program prog = cu.getProgram();
		if (cu.getLength() == 1) {
			return Collections.emptyList();
		}
		Address nextAddr = startAddr.next();
		if (nextAddr == null) {
			return Collections.emptyList();
		}

		Address endAddress = cu.getMaxAddress();

		List<Address> list = new ArrayList<>();
		AddressIterator it =
			prog.getReferenceManager().getReferenceDestinationIterator(nextAddr, true);
		while (it.hasNext()) {
			Address addr = it.next();
			if (addr.compareTo(endAddress) > 0) {
				break;
			}

// TODO: check for wrapping - temporary work-around
			if (addr.compareTo(cu.getMinAddress()) > 0) {
				list.remove(addr);
				list.add(addr);
				if (list.size() > MAX_OFFCUT_DISPLAY) {
					return list; // short-circuit
				}
			}
		}

		SymbolIterator symIter = prog.getSymbolTable().getSymbolIterator(nextAddr, true);
		while (symIter.hasNext()) {
			Symbol s = symIter.next();
			Address addr = s.getAddress();
			if (addr.compareTo(endAddress) > 0) {
				break;
			}

// TODO: check for wrapping - temporary work-around
			if (addr.compareTo(cu.getMinAddress()) > 0) {
				list.remove(addr);
				list.add(addr);
				if (list.size() > MAX_OFFCUT_DISPLAY) {
					return list; // short-circuit
				}
			}
		}

		return list;
	}
@see ghidra.app.util.viewer.field.FieldFactory#getField(ProxyObj, int)
Ghidra/Features/Base/src/main/java/ghidra/app/util/viewer/field/LabelFieldFactory.java