private void accumulateFunctionCallsToDefinedData(Program program, DataType dataType,
			Set<DataType> potentialTypes, Set<Function> results, TaskMonitor monitor)
			throws CancelledException {

		Listing listing = program.getListing();
		AtomicInteger counter = new AtomicInteger();
		SetAccumulator<LocationReference> accumulator = new SetAccumulator<>();
		Predicate<Data> dataMatcher = data -> {
			counter.incrementAndGet();
			DataType dt = data.getDataType();
			boolean matches = potentialTypes.contains(dt);
			return matches;
		};

		FieldMatcher emptyMatcher = new FieldMatcher(dataType);
		ReferenceUtils.findDataTypeMatchesInDefinedData(accumulator, program, dataMatcher,
			emptyMatcher, monitor);

		for (LocationReference ref : accumulator) {
			Address address = ref.getLocationOfUse();
			Function f = listing.getFunctionContaining(address);
			if (f != null) {
				results.add(f);
			}
		}
	}
Implementation of {@link DataTypeReferenceFinder} that uses the Decompiler's output
to find data type and composite field usage.
Ghidra/Features/DecompilerDependent/src/main/java/ghidra/app/extension/datatype/finder/DecompilerDataTypeReferenceFinder.java