@Override
	public Reference[] getReferences(TaskMonitor monitor) {
		lock.acquire();
		try {
			checkIsValid();
			Reference[] refs = super.getReferences(monitor);
			if (monitor == null) {
				monitor = TaskMonitor.DUMMY;
			}
			if (monitor.isCancelled()) {
				return refs;
			}
			List<Long> thunkIds = functionMgr.getThunkFunctionIds(key);
			if (thunkIds == null) {
				return refs;
			}
			int thunkCnt = thunkIds.size();
			Reference[] newRefs = new Reference[refs.length + thunkCnt];
			System.arraycopy(refs, 0, newRefs, thunkCnt, refs.length);
			for (int i = 0; i < thunkCnt; i++) {
				if (monitor.isCancelled()) {
					return refs;
				}
				Symbol s = symbolMgr.getSymbol(thunkIds.get(i));
				newRefs[i] = new ThunkReference(s.getAddress(), getAddress());
				monitor.setProgress(refs.length + i);
			}
			return newRefs;
		}
		finally {
			lock.release();
		}
	}
Construct a new FunctionSymbol
@param symbolMgr the symbol manager.
@param cache symbol object cache
@param address the address for this symbol.
@param record the record for this symbol.
Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/symbol/FunctionSymbol.java