private void findNext() {
		if (currentLayout != null) {
			findNextMatch();
			if (results.size() > 0) {
				return;
			}
		}

		int progress = options.getProgress();
		monitor.setMessage("Searching...");
		currentAddress = null;
		currentCodeUnit = null;
		Listing listing = program.getListing();
		while (!monitor.isCancelled() && currentLayout == null && addressIterator.hasNext() &&
			results.size() == 0) {

			currentAddress = addressIterator.next();
			monitor.setMessage("Checking address " + currentAddress);
			if (!options.searchAllFields()) {
				currentCodeUnit = listing.getCodeUnitContaining(currentAddress);
			}

			++progress;
			options.setProgress(progress);
			monitor.setProgress(progress);

			if ((options.isForward() && currentAddress.compareTo(startAddress) < 0) ||
				(!options.isForward() && currentAddress.compareTo(startAddress) > 0)) {
				continue;
			}
			if ((options.isForward() &&
				currentAddress.compareTo(searchAddresses.getMaxAddress()) > 0) ||
				(!options.isForward() &&
					currentAddress.compareTo(searchAddresses.getMinAddress()) < 0)) {
				return;
			}
			if (!searchAddresses.contains(currentAddress)) {
				continue;
			}
			currentLayout = listingModel.getLayout(currentAddress, false);
			if (currentLayout == null) {
				continue;
			}

			if (options.isForward()) {
				while (!monitor.isCancelled() && results.size() == 0 && currentLayout != null &&
					currentFieldIndex < currentLayout.getNumFields()) {
					findNextMatch();
				}
			}
			else {
				currentFieldIndex = currentLayout.getNumFields() - 1;
				while (!monitor.isCancelled() && results.size() == 0 && currentLayout != null &&
					currentFieldIndex >= 0) {
					findNextMatch();
				}
			}
		}
	}
Constructor
@param tool the tool
@param program current program
@param startLocation location from where to begin searching
@param set address set; may be null
@param options search options
@param monitor progress monitor
Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/searchtext/ListingDisplaySearcher.java