private void configureTableColumns(TableChooserDialog dialog) {
		StringColumnDisplay explanationColumn = new StringColumnDisplay() {
			@Override
			public String getColumnName() {
				return "Potential Problem";
			}

			@Override
			public String getColumnValue(AddressableRowObject rowObject) {
				ProblemLocation entry = (ProblemLocation) rowObject;
				return entry.getExplanation();
			}
		};

		StringColumnDisplay funcColumn = new StringColumnDisplay() {
			@Override
			public String getColumnName() {
				return "Func Name";
			}

			@Override
			public String getColumnValue(AddressableRowObject rowObject) {
				ProblemLocation entry = (ProblemLocation) rowObject;
				Function func = entry.getProgram().getFunctionManager().getFunctionContaining(
					entry.getAddress());
				if (func == null) {
					return "";
				}
				return func.getName();
			}
		};

		ColumnDisplay<Address> probLocColumn = new ColumnDisplay<Address>() {
			@Override
			public String getColumnName() {
				return "Location of Possible Cause";
			}

			@Override
			public Address getColumnValue(AddressableRowObject rowObject) {
				ProblemLocation probLocation = (ProblemLocation) rowObject;
				return probLocation.getWhyAddr();
			}

			@Override
			public int compare(AddressableRowObject o1, AddressableRowObject o2) {
				return getColumnValue(o1).compareTo(getColumnValue(o2));
			}

			@Override
			public Class<Address> getColumnClass() {
				return Address.class;
			}
		};

		StringColumnDisplay varNameColumn = new StringColumnDisplay() {
			@Override
			public String getColumnName() {
				return "Problematic Variable";
			}

			@Override
			public String getColumnValue(AddressableRowObject rowObject) {
				ProblemLocation probLocation = (ProblemLocation) rowObject;
				return probLocation.getVarName();
			}

			@Override
			public int compare(AddressableRowObject o1, AddressableRowObject o2) {
				return getColumnValue(o1).compareTo(getColumnValue(o2));
			}
		};

		dialog.addCustomColumn(funcColumn);
		dialog.addCustomColumn(probLocColumn);
		dialog.addCustomColumn(varNameColumn);
		dialog.addCustomColumn(explanationColumn);
	}
Returns the address of first function called by {@code func}.  That is, the returned {@link Address}
is the target of the call instruction with the least address within the body of {@code func}. 
@param func the {@link Function} to search for calls
@return the {@link Address} of the first called function, or {@code Address.NO_ADDRESS} if
no calls are found.
Ghidra/Features/Decompiler/ghidra_scripts/FindPotentialDecompilerProblems.java