public Set<Function> getAllVfunctions(List<Address> vftableAddresses)
			throws CancelledException {
		if (vftableAddresses.isEmpty()) {
			return Collections.emptySet();
		}

		Set<Function> vfunctionSet = new HashSet<>();
		for (Address vftableAddress : vftableAddresses) {
			monitor.checkCancelled();
			if (!allVfunctions.containsKey(vftableAddress)) {
				List<Function> funcList = getVfunctions(vftableAddress);
				if (funcList == null) {
					funcList = new ArrayList<>();
				}
				allVfunctions.put(vftableAddress, new HashSet<>(funcList));
			}
			vfunctionSet.addAll(allVfunctions.get(vftableAddress));
		}

		return vfunctionSet;
	}
Method to create a map of calling address to called function for the given function.
@param function the given function
@param getThunkedFunction if true, use the thunked function in the map, if false use the 
directly called function from the calling function even if it is a thunk
@param visited the set of function entry point addresses already processed
@return a map of the given functions calling addresses to the called functions 
@throws CancelledException if cancelled
Ghidra/Features/Decompiler/ghidra_scripts/classrecovery/RecoveredClassHelper.java