public ProgramLocation getProgramLocation(FieldLocation floc) {
		if (floc == null) {
			return null;
		}

		BigInteger index = floc.getIndex();
		Layout layout = getLayout(index);
		if (layout == null) {
			Address addr = addressToIndexMap.getAddress(index);
			return addr != null ? new ProgramLocation(model.getProgram(), addr) : null;
		}

		Field f;
		if (floc.getFieldNum() >= layout.getNumFields()) {
			f = layout.getField(0);
		}
		else {
			f = layout.getField(floc.getFieldNum());
		}
		return (f instanceof ListingField bf) ? getProgramLocation(floc, bf) : null;
	}
Attempts to find a field location for the given address from the given program location
@param address the address to try and get a layout for.
@param location the location contains other information needed to generate a field
location
@param useDefaultLocation if true, will return a generic location for this address
if no field has a specific match.  Otherwise, will return null if no fields have
an exact match.
@return a field location for the given address.
Ghidra/Features/Base/src/main/java/ghidra/app/util/viewer/listingpanel/ListingModelAdapter.java