From e888267682dc1e18f3e036701c81c6bdaaa5692b Mon Sep 17 00:00:00 2001 From: Frotty Date: Fri, 23 Jan 2026 17:30:00 +0100 Subject: [PATCH] dont fail on first run --- .../languageserver/requests/MapRequest.java | 12 +++++++- .../tests/HotReloadPipelineTests.java | 30 +++++++++++++++++++ 2 files changed, 41 insertions(+), 1 deletion(-) 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 3f644dc1d..db2623215 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 @@ -562,9 +562,10 @@ protected File loadMapScript(Optional mapCopy, ModelManager modelManager, WLogger.info(msg); } else { CompileError err = new CompileError(new WPos(mapCopy.toString(), new LineOffsets(), 0, 0), - "No war3map.j found in map file."); + "No war3map.j found in map file. Please extract it first or provide it in the wurst directory."); gui.showInfoMessage(err.getMessage()); WLogger.severe(err); + throw err; } } else if (startsWith(extractedScript, JassPrinter.WURST_COMMENT_RAW.getBytes(StandardCharsets.UTF_8))) { WLogger.info("map has already been compiled with wurst"); @@ -577,16 +578,25 @@ protected File loadMapScript(Optional mapCopy, ModelManager modelManager, "Cannot use war3map.j from map file, because it already was compiled with wurst. " + "Please add war3map.j to the wurst directory."); gui.showInfoMessage(err.getMessage()); WLogger.severe(err); + throw err; } } else { WLogger.info("new map, use extracted"); // write mapfile from map to workspace Files.write(extractedScript, scriptFile); + modelManager.syncCompilationUnit(WFile.create(scriptFile)); } } else { System.out.println("Map not modified, not extracting script"); } + if (!scriptFile.exists()) { + CompileError err = new CompileError(new WPos(mapCopy.toString(), new LineOffsets(), 0, 0), + "No war3map.j available. Please extract it from the map or add it to the wurst directory."); + gui.showInfoMessage(err.getMessage()); + WLogger.severe(err); + throw err; + } return scriptFile; } 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 8e029fe3a..e64557b54 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 @@ -9,6 +9,7 @@ import de.peeeq.wurstio.utils.FileUtils; import de.peeeq.wurstscript.gui.WurstGui; import de.peeeq.wurstscript.gui.WurstGuiLogger; +import de.peeeq.wurstscript.attributes.CompileError; import org.testng.annotations.Test; import java.io.File; @@ -21,6 +22,7 @@ import static org.testng.Assert.assertEquals; import static org.testng.Assert.assertNotNull; +import static org.testng.Assert.assertThrows; public class HotReloadPipelineTests { @@ -113,6 +115,34 @@ public void hotReloadDoesNotRequireSourceMap() throws Exception { assertEquals(result.script.getCanonicalFile(), war3mapJ.getCanonicalFile()); } + @Test + public void extractionFailsWithoutExistingWar3map() throws Exception { + File projectFolder = new File("./temp/testProject_extract_missing/"); + File wurstFolder = new File(projectFolder, "wurst"); + newCleanFolder(wurstFolder); + + File sourceMap = new File(projectFolder, "source_map.w3x"); + Files.write(sourceMap.toPath(), new byte[] {0x01}); + + WurstLanguageServer langServer = new WurstLanguageServer(); + TestMapRequest request = new TestMapRequest( + langServer, + Optional.of(sourceMap), + List.of(), + WFile.create(projectFolder), + Map.of() + ); + + MapRequest.mapLastModified = System.currentTimeMillis(); + MapRequest.mapPath = sourceMap.getAbsolutePath(); + + assertThrows(CompileError.class, () -> request.loadMapScriptForTest( + Optional.of(sourceMap), + new ModelManagerImpl(projectFolder, new BufferManager()), + new WurstGuiLogger() + )); + } + private void newCleanFolder(File f) throws Exception { FileUtils.deleteRecursively(f); Files.createDirectories(f.toPath());