Window (@NotNull Window w) { assert activatedWindows.contains(w); Window[] windows = getWindows(w); if (w.equals(windows[0])) { return windows[windows.length - 1]; } for (int i = 1; i < windows.length; i++) { if (w.equals(windows[i])) { return windows[i - 1]; } } throw new IllegalArgumentException("The window after " + w.getName() + " has not been found"); }