public HighVariable computeHighVariable(Address storageAddress, Function function,
			DecompInterface decomplib) {
		if (storageAddress == null) {
			return null;
		}
		HighVariable highVar = null;

		// call decompiler to get syntax tree
		DecompileResults results = decomplib.decompileFunction(function,
			decomplib.getOptions().getDefaultTimeout(), monitor);
		if (monitor.isCancelled()) {
			return null;
		}

		HighFunction highFunc = results.getHighFunction();

		// no decompile...
		if (highFunc == null) {
			return null;
		}

		// try to map the variable
		HighSymbol sym =
			highFunc.getMappedSymbol(storageAddress, function.getEntryPoint().subtractWrap(1L));
		if (sym == null) {
			sym = highFunc.getMappedSymbol(storageAddress, null);
		}
		if (sym == null) {
			sym = highFunc.getMappedSymbol(storageAddress, function.getEntryPoint());
		}
		if (sym == null) {
			sym = highFunc.getLocalSymbolMap()
					.findLocal(storageAddress, function.getEntryPoint().subtractWrap(1L));
		}
		if (sym == null) {
			sym = highFunc.getLocalSymbolMap().findLocal(storageAddress, null);
		}
		if (sym == null) {
			sym = highFunc.getLocalSymbolMap()
					.findLocal(storageAddress, function.getEntryPoint());
		}
		if (sym == null) {
			return null;
		}

		highVar = sym.getHighVariable();
		return highVar;
	}
Decompile a function and return the resulting HighVariable associated with a storage address
@param storageAddress the storage address of the variable
@param function is the function
@param decomplib is the active interface to use for decompiling
@return the corresponding HighVariable or null
Ghidra/Features/Decompiler/src/main/java/ghidra/app/decompiler/util/FillOutStructureHelper.java