private boolean shiftComponentsDown(int startIndex, int endIndex) {
		int numComponents = getNumComponents();
		if ((startIndex > endIndex) || startIndex < 0 || startIndex >= numComponents - 1 ||
			endIndex < 0 || endIndex >= numComponents - 1) {
			return false;
		}
		int len = getLength();

		return viewDTM.withTransaction("Shift Down", () -> {
			DataTypeComponent comp = deleteComponentAndResidual(endIndex + 1);
			try {
				if (!isPackingEnabled() && comp.isBitFieldComponent()) {
					// insert residual undefined bytes before inserting non-packed bitfield
					int lenChange = len - getLength();
					insert(startIndex, DataType.DEFAULT, 1, lenChange, TaskMonitor.DUMMY);
				}
				insert(startIndex, comp.getDataType(), comp.getLength(), comp.getFieldName(),
					comp.getComment());
			}
			catch (CancelledException e) {
				// can't happen while using a dummy monitor
			}
			catch (InvalidDataTypeException e) {
				return false;
			}
			return true;
		});
	}
Moves the components between the start index (inclusive) and the end
 index (exclusive) to the new index (relative to the initial component set).

@param startIndex index of the starting component to move.
@param endIndex index of the ending component to move.
@return true if components are moved.
Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/compositeeditor/StructureEditorModel.java