From ad17f1250f146a0866026f927c6159e8136c8363 Mon Sep 17 00:00:00 2001 From: Frotty Date: Wed, 14 Jan 2026 15:49:43 +0100 Subject: [PATCH 1/2] fix & test hot reload --- .../languageserver/requests/MapRequest.java | 10 ++-- .../tests/HotReloadPipelineTests.java | 59 +++++++++++++++++++ 2 files changed, 65 insertions(+), 4 deletions(-) diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/requests/MapRequest.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/requests/MapRequest.java index 9da4b02ae..3f644dc1d 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/requests/MapRequest.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/requests/MapRequest.java @@ -405,11 +405,13 @@ protected CompilationResult compileScript(ModelManager modelManager, WurstGui gu WurstProjectConfigData projectConfigData, File buildDir, boolean isProd) throws Exception { - // Ensure we're working with the cached map - File cachedMap = ensureCachedMap(gui); + if (!runArgs.isHotReload()) { + // Ensure we're working with the cached map + File cachedMap = ensureCachedMap(gui); - // Update testMap to point to cached map - testMap = Optional.of(cachedMap); + // Update testMap to point to cached map + testMap = Optional.of(cachedMap); + } CompilationResult result; diff --git a/de.peeeq.wurstscript/src/test/java/tests/wurstscript/tests/HotReloadPipelineTests.java b/de.peeeq.wurstscript/src/test/java/tests/wurstscript/tests/HotReloadPipelineTests.java index 25fef5af0..4ea40b247 100644 --- a/de.peeeq.wurstscript/src/test/java/tests/wurstscript/tests/HotReloadPipelineTests.java +++ b/de.peeeq.wurstscript/src/test/java/tests/wurstscript/tests/HotReloadPipelineTests.java @@ -1,5 +1,6 @@ package tests.wurstscript.tests; +import config.WurstProjectConfigData; import de.peeeq.wurstio.languageserver.BufferManager; import de.peeeq.wurstio.languageserver.ModelManagerImpl; import de.peeeq.wurstio.languageserver.WFile; @@ -85,11 +86,69 @@ public void jhcrPipelineRenamesOutputScript() throws Exception { assertEquals(renamed.getName(), MapRequest.BUILD_JHCR_SCRIPT_NAME); } + @Test + public void hotReloadDoesNotRequireSourceMap() throws Exception { + File projectFolder = new File("./temp/testProject_hotreload_nomap/"); + File wurstFolder = new File(projectFolder, "wurst"); + newCleanFolder(wurstFolder); + + File war3mapJ = new File(wurstFolder, "war3map.j"); + Files.writeString(war3mapJ.toPath(), "function main takes nothing returns nothing\nendfunction"); + + WurstLanguageServer langServer = new WurstLanguageServer(); + HotReloadNoMapRequest request = new HotReloadNoMapRequest( + langServer, + Optional.empty(), + List.of("-hotreload"), + WFile.create(projectFolder) + ); + + MapRequest.CompilationResult result = request.compileScriptForTest( + new ModelManagerImpl(projectFolder, new BufferManager()), + new WurstGuiLogger(), + Optional.empty(), + new WurstProjectConfigData() + ); + + assertEquals(result.script.getAbsolutePath(), war3mapJ.getAbsolutePath()); + } + private void newCleanFolder(File f) throws Exception { FileUtils.deleteRecursively(f); Files.createDirectories(f.toPath()); } + private static final class HotReloadNoMapRequest extends MapRequest { + private HotReloadNoMapRequest(WurstLanguageServer langServer, Optional map, List compileArgs, + WFile workspaceRoot) { + super(langServer, map, compileArgs, workspaceRoot, Optional.empty(), Optional.empty()); + } + + @Override + public Object execute(de.peeeq.wurstio.languageserver.ModelManager modelManager) { + return null; + } + + @Override + protected File ensureCachedMap(WurstGui gui) { + throw new AssertionError("ensureCachedMap should not be called for hotreload without a map."); + } + + @Override + protected File compileScript(WurstGui gui, de.peeeq.wurstio.languageserver.ModelManager modelManager, + List compileArgs, Optional mapCopy, + WurstProjectConfigData projectConfigData, boolean isProd, File scriptFile) { + return scriptFile; + } + + private CompilationResult compileScriptForTest(de.peeeq.wurstio.languageserver.ModelManager modelManager, + WurstGui gui, + Optional testMap, + WurstProjectConfigData projectConfigData) throws Exception { + return compileScript(modelManager, gui, testMap, projectConfigData, getBuildDir(), false); + } + } + private static final class TestMapRequest extends MapRequest { private final Map scriptByMap; private File lastExtractedMap; From 92f0e39cd86874461fd46103fc74e35ab07d458f Mon Sep 17 00:00:00 2001 From: Frotty Date: Thu, 15 Jan 2026 09:35:24 +0100 Subject: [PATCH 2/2] Update HotReloadPipelineTests.java --- .../java/tests/wurstscript/tests/HotReloadPipelineTests.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/de.peeeq.wurstscript/src/test/java/tests/wurstscript/tests/HotReloadPipelineTests.java b/de.peeeq.wurstscript/src/test/java/tests/wurstscript/tests/HotReloadPipelineTests.java index 4ea40b247..8e029fe3a 100644 --- a/de.peeeq.wurstscript/src/test/java/tests/wurstscript/tests/HotReloadPipelineTests.java +++ b/de.peeeq.wurstscript/src/test/java/tests/wurstscript/tests/HotReloadPipelineTests.java @@ -110,7 +110,7 @@ public void hotReloadDoesNotRequireSourceMap() throws Exception { new WurstProjectConfigData() ); - assertEquals(result.script.getAbsolutePath(), war3mapJ.getAbsolutePath()); + assertEquals(result.script.getCanonicalFile(), war3mapJ.getCanonicalFile()); } private void newCleanFolder(File f) throws Exception { @@ -120,7 +120,7 @@ private void newCleanFolder(File f) throws Exception { private static final class HotReloadNoMapRequest extends MapRequest { private HotReloadNoMapRequest(WurstLanguageServer langServer, Optional map, List compileArgs, - WFile workspaceRoot) { + WFile workspaceRoot) { super(langServer, map, compileArgs, workspaceRoot, Optional.empty(), Optional.empty()); }