@Override
	public void mouseHovered(FieldLocation fieldLocation, Field field, Rectangle fieldBounds,
			MouseEvent event) {

		if (isShowing() && field == lastField) {
			return;
		}

		if (program == null) {
			return;
		}

		Component component = event.getComponent();
		if (!component.isShowing()) {
			// This can happen since we are using a timer.  When the timer fires, the source 
			// component may have been hidden.
			return;
		}

		ProgramLocation loc = getHoverLocation(fieldLocation, field, fieldBounds, event);
		for (HoverService hoverService : hoverServices) {
			JComponent comp = hoverService.getHoverComponent(program, loc, fieldLocation, field);
			if (comp != null) {
				closeHover();
				activeHoverService = hoverService;
				showPopup(comp, field, event, fieldBounds);
				return;
			}
		}
	}
Sets the object that decides where to place the popup window. 
@param popupWindowPlacer the placer
Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/hover/AbstractHoverProvider.java