private ProgramSelection getInteriorSelection(FieldSelection sel) {
		Program program = model.getProgram();
		if (program == null || sel.getNumRanges() != 1) {
			return null;
		}
		FieldRange range = sel.getFieldRange(0);
		ProgramLocation loc1 = getProgramLocation(
			new FieldLocation(range.getStart().getIndex(), range.getStart().getFieldNum(), 0, 0));
		BigInteger endIndex = range.getEnd().getIndex();
		int endField = range.getEnd().getFieldNum();
		if (endField == 0) {
			endIndex = endIndex.subtract(BigInteger.ONE);
			Layout layout = getLayout(endIndex);
			if (layout != null) {
				endField = layout.getNumFields() - 1;
			}
		}
		else {
			endField--;
		}
		ProgramLocation loc2 = getProgramLocation(new FieldLocation(endIndex, endField, 0, 0));
		if (loc1 == null || loc2 == null) {
			return null;
		}
		int[] path1 = loc1.getComponentPath();
		int[] path2 = loc2.getComponentPath();
		if (path1 == null || path2 == null) {
			return null;
		}
		if (path1.length > path2.length) {
			return null;
		}
		if (path1.length == 0) {
			return null;
		}
		for (int i = 0; i < path1.length - 1; i++) {
			if (path1[i] != path2[i]) {
				return null;
			}
		}
		Address min = loc1.getAddress();
		Data data1 = program.getListing().getDataContaining(loc1.getAddress());
		Data data2 = program.getListing().getDataContaining(loc2.getAddress());
		if (!data1.equals(data2)) {
			return null;
		}
		Data subData2 = data2.getComponent(path2);
		Data parent = subData2.getParent();
		DataType dt = parent.getBaseDataType();
		if (dt instanceof Array) {
			return selectHighestLevelArray(parent);
		}
		Address max2 = subData2.getMaxAddress();
		if (path1.length != path2.length) {
			Data subData1 = data2.getComponent(path1);
			Address max1 = subData1.getMaxAddress();
			if (!max1.equals(max2)) {
				return null;
			}
		}

		InteriorSelection is = new InteriorSelection(loc1, loc2, min, max2);
		return new ProgramSelection(is);

	}
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