private void followData(Stack<CodeUnit> instructionStack, AddressSet flowAddressSet, Data data,
			Address addr) {

		if (flowAddressSet.contains(addr))
			return; // Already processed this address.

		Address min = addr;
		Address max = min;
		int offset = (int) addr.subtract(data.getMinAddress());
		Data primitive = data.getPrimitiveAt(offset);
		if (primitive != null) {
			max = primitive.getMaxAddress();
			// Follow pointers if enabled
			if (followPointers && primitive.isPointer()) {
				// If the pointer has a user reference of type Data then
				// follow the reference . Otherwise use the data value.
				ReferenceManager referenceManager = program.getReferenceManager();
				Reference[] memRefs = referenceManager.getReferencesFrom(addr);
				boolean foundRef = false;
				for (Reference memRef : memRefs) {
					RefType rt = memRef.getReferenceType();
					if (rt.isData()) {
						if (pushInstruction(instructionStack, memRef.getToAddress())) {
							foundRef = true; // pointer was to an instruction.
						}
					}
				}
				if (!foundRef) {
					// Didn't have a data ref to an instruction so flow to the address indicated 
					// by the pointer's value if there is an instruction there.
					pushInstruction(instructionStack, (Address) primitive.getValue());
				}
			}
		}
		flowAddressSet.addRange(min, max); // Add the addresses for the pointer or Data minimum address.
	}
followData follows the program's code flow and adds addresses to the address set for the 
flow from the current data item if it has a pointer at the specified address with a 
reference to an instruction. If the flow at the address isn't from a pointer to 
an instruction then just the address passed to this method is added to the flow set.

@param instructionStack code unit stack for subsequent flow analysis
@param flowAddressSet the address set to add our addresses to.
@param data the Data object to flow from.
    Appropriate flows out of this code unit will be traversed.
@param addr the flow reference address which is contained within data.
Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/block/FollowFlow.java