@Override
	public ListingField getField(ProxyObj<?> proxy, int varWidth) {
		Object obj = proxy.getObject();

		if (!enabled || !(obj instanceof CodeUnit)) {
			return null;
		}
		CodeUnit cu = (CodeUnit) obj;
		Program program = cu.getProgram();
		ProgramContext context = program.getProgramContext();

		Address curAddress = cu.getMinAddress();
		Function function = program.getListing().getFunctionAt(curAddress);
		CodeUnit prevCu = program.getListing().getCodeUnitBefore(curAddress);
		Address prevAddress = prevCu != null ? prevCu.getMinAddress() : null;

		String stackDepthStr = null;
		Integer stackDepthChange = CallDepthChangeInfo.getStackDepthChange(program, curAddress);
		if (stackDepthChange != null) {
			String depthStr = Integer.toString(stackDepthChange);
			String absoluteDepthStr = (depthStr.startsWith("-")) ? depthStr.substring(1) : depthStr;
			stackDepthStr = "StackDepth = StackDepth " + (stackDepthChange > 0 ? "+ " : "- ") +
				absoluteDepthStr;
		}

		List<Register> transitionRegisters =
			getTransitionRegisters(context, function, curAddress, prevAddress);

		if (transitionRegisters.isEmpty() && stackDepthStr == null) {
			return null;
		}
		int numRegisters = transitionRegisters.size();
		int numElements = numRegisters;
		if (stackDepthStr != null) {
			numElements++;
		}
		List<FieldElement> elements = new ArrayList<>(numElements);
		for (int i = 0; i < numRegisters; i++) {
			Register register = transitionRegisters.get(i);
			AttributedString str = new AttributedString(
				"assume " + register.getName() + " = " +
					getValueString(register, context, curAddress),
				ListingColors.REGISTER, getMetrics());
			elements.add(new TextFieldElement(str, i, 0));
		}
		if (stackDepthStr != null) {
			AttributedString str =
				new AttributedString(stackDepthStr, ListingColors.REGISTER, getMetrics());
			elements.add(new TextFieldElement(str, numRegisters, 0));
		}
		return ListingTextField.createMultilineTextField(this, proxy, elements,
			startX + varWidth, width, hlProvider);
	}
Returns the FactoryField for the given object at index index.
@param varWidth the amount of variable width spacing for any fields
before this one.
@param proxy the object whose properties should be displayed.
Ghidra/Features/Base/src/main/java/ghidra/app/util/viewer/field/RegisterTransitionFieldFactory.java