boolean isDescendant(long id, long moduleID) throws IOException {

		Field[] keys =
			parentChildAdapter.getParentChildKeys(moduleID, ParentChildDBAdapter.PARENT_ID_COL);
		if (keys.length == 0) {
			return false;
		}
		for (Field key : keys) {
			DBRecord parentChildRecord =
				parentChildAdapter.getParentChildRecord(key.getLongValue());
			long childID = parentChildRecord.getLongValue(ParentChildDBAdapter.CHILD_ID_COL);

			if (childID == id) {
				return true;
			}
			if (isDescendant(id, childID)) {
				return true;
			}
		}
		return false;
	}
Perform recursive check to determine if specified id is a child or descendant
of the specified module.
@param id descendant child id (positive for module, negative for fragment)
@param moduleID module id (positive)
@return true if specified id is a descendant of moduleID.
@throws IOException if database IO error occurs
Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/module/ModuleManager.java