Skip to content

Commit c4efb4e

Browse files
authored
fix: force page reload only for redefined classes (#21274)
* fix: force page reload only for redefined classes When Hotswapper force page reload is active, trigger page reload only for redefined classes, not when they are loaded for the first time. Fixes #21273 * fix test name
1 parent dec783a commit c4efb4e

2 files changed

Lines changed: 37 additions & 3 deletions

File tree

flow-server/src/main/java/com/vaadin/flow/hotswap/Hotswapper.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -277,7 +277,8 @@ private void onHotswapInternal(HashSet<Class<?>> classes,
277277
}
278278
}
279279
forceBrowserReload = forceBrowserReload
280-
|| getForceReloadHolder(vaadinService).shouldReloadPage();
280+
|| (getForceReloadHolder(vaadinService).shouldReloadPage()
281+
&& redefined);
281282

282283
boolean uiTreeNeedsRefresh = false;
283284
EnumMap<UIRefreshStrategy, List<UI>> refreshActions = null;

flow-server/src/test/java/com/vaadin/flow/hotswap/HotswapperTest.java

Lines changed: 35 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -944,7 +944,7 @@ public void onHotswap_mixedPushState_classInUITreeChanged_liveReloadTriggered()
944944
}
945945

946946
@Test
947-
public void onHotswap_pushDisabled_forcePageReload_fullReloadTriggered()
947+
public void onHotswap_pushDisabled_forcePageReload_redefinedClass_fullReloadTriggered()
948948
throws ServiceException {
949949
VaadinSession session = createMockVaadinSession();
950950
hotswapper.sessionInit(new SessionInitEvent(service, session, null));
@@ -959,6 +959,22 @@ public void onHotswap_pushDisabled_forcePageReload_fullReloadTriggered()
959959
Mockito.verify(liveReload).reload();
960960
}
961961

962+
@Test
963+
public void onHotswap_pushDisabled_forcePageReload_loadedClass_notReload()
964+
throws ServiceException {
965+
VaadinSession session = createMockVaadinSession();
966+
hotswapper.sessionInit(new SessionInitEvent(service, session, null));
967+
968+
RefreshTestingUI ui = initUIAndNavigateTo(session, MyRoute.class);
969+
970+
Hotswapper.forcePageReload(service, true);
971+
hotswapper.onHotswap(new String[] { MyRoute.class.getName() }, false);
972+
973+
ui.assertNotRefreshed();
974+
Mockito.verify(liveReload, never()).refresh(anyBoolean());
975+
Mockito.verify(liveReload, never()).reload();
976+
}
977+
962978
@Test
963979
public void onHotswap_pushDisabled_forcePageReloadWithSystemProperty_fullReloadTriggered()
964980
throws ServiceException {
@@ -986,7 +1002,7 @@ public void onHotswap_pushDisabled_forcePageReloadWithSystemProperty_fullReloadT
9861002
}
9871003

9881004
@Test
989-
public void onHotswap_pushEnabled_forcePageReload_fullReloadTriggered()
1005+
public void onHotswap_pushEnabled_forcePageReload_redefinedClass_fullReloadTriggered()
9901006
throws ServiceException {
9911007
VaadinSession session = createMockVaadinSession();
9921008
hotswapper.sessionInit(new SessionInitEvent(service, session, null));
@@ -1002,6 +1018,23 @@ public void onHotswap_pushEnabled_forcePageReload_fullReloadTriggered()
10021018
Mockito.verify(liveReload).reload();
10031019
}
10041020

1021+
@Test
1022+
public void onHotswap_pushEnabled_forcePageReload_loadedClass_noReload()
1023+
throws ServiceException {
1024+
VaadinSession session = createMockVaadinSession();
1025+
hotswapper.sessionInit(new SessionInitEvent(service, session, null));
1026+
1027+
RefreshTestingUI ui = initUIAndNavigateTo(session, MyRoute.class);
1028+
ui.enablePush();
1029+
1030+
Hotswapper.forcePageReload(service, true);
1031+
hotswapper.onHotswap(new String[] { MyRoute.class.getName() }, false);
1032+
1033+
ui.assertNotRefreshed();
1034+
Mockito.verify(liveReload, never()).refresh(anyBoolean());
1035+
Mockito.verify(liveReload, never()).reload();
1036+
}
1037+
10051038
@Test
10061039
public void onHotswap_pushEnabled_forcePageReloadWithSystemProperty_fullReloadTriggered()
10071040
throws ServiceException {

0 commit comments

Comments
 (0)