@Override
	public boolean added(Program program, AddressSetView set, TaskMonitor monitor, MessageLog log) {

		AddressSet funcStarts = new AddressSet();

		monitor.setMessage("Finding External Entry Functions");
		//
		// add entry points
		//
		AddressIterator entryIter = program.getSymbolTable().getExternalEntryPointIterator();
		while (entryIter.hasNext() && !monitor.isCancelled()) {
			Address entry = entryIter.next();
			if (!set.contains(entry)) {
				continue;
			}
			
			// check for any indicators this is a good start of a function
			// must have an instruction at the entry, and not be part of another function
			if (!isGoodFunctionStart(program, entry)) {
				continue;
			}
			
			funcStarts.addRange(entry, entry);
		}

		// remove any addresses that are already functions
		SymbolIterator iter =
			program.getSymbolTable().getSymbols(funcStarts, SymbolType.FUNCTION, true);
		AddressSet alreadyFunctionSet = new AddressSet();
		while (iter.hasNext() && !monitor.isCancelled()) {
			Symbol element = iter.next();
			alreadyFunctionSet.addRange(element.getAddress(), element.getAddress());
		}
		funcStarts.delete(alreadyFunctionSet);

		if (monitor.isCancelled()) {
			return false;
		}
		AutoAnalysisManager amgr = AutoAnalysisManager.getAnalysisManager(program);
		amgr.createFunction(funcStarts, false);

		return true;
	}
Called when a function has been added.
Looks at address for call reference
Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/function/ExternalEntryFunctionAnalyzer.java