Skip to content

Commit 951d455

Browse files
committed
fix pipeline, remove parallel streams
1 parent 0f2730b commit 951d455

10 files changed

Lines changed: 288 additions & 278 deletions

File tree

de.peeeq.wurstscript/build.gradle

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -193,8 +193,13 @@ tasks.named('compileJava') { it.dependsOn('gen') }
193193
/** -------- Tests -------- */
194194

195195
test {
196-
jvmArgs = ['-XX:MaxRAMPercentage=75','-XX:InitialRAMPercentage=30', '-XX:MinRAMPercentage=30']
197196
useTestNG()
197+
198+
jvmArgs(
199+
'-Xmx2g', // local: give it room to finish and dump
200+
'-XX:MaxMetaspaceSize=256m',
201+
'-XX:+HeapDumpOnOutOfMemoryError',
202+
)
198203
}
199204

200205
/** -------- Clean generated sources -------- */

de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/ModelManagerImpl.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
import de.peeeq.wurstscript.gui.WurstGui;
1414
import de.peeeq.wurstscript.gui.WurstGuiLogger;
1515
import de.peeeq.wurstscript.utils.Utils;
16+
import de.peeeq.wurstscript.validation.GlobalCaches;
1617
import org.eclipse.jdt.annotation.Nullable;
1718
import org.eclipse.lsp4j.PublishDiagnosticsParams;
1819

@@ -629,6 +630,7 @@ private void doTypeCheckPartial(WurstGui gui, List<WFile> toCheckFilenames, Set<
629630

630631
@Override
631632
public void reconcile(Changes changes) {
633+
GlobalCaches.clearAll();
632634
WurstModel model2 = model;
633635
if (model2 == null) {
634636
return;

de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/requests/BuildMap.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -68,9 +68,10 @@ public Object execute(ModelManager modelManager) throws IOException {
6868

6969
gui.sendProgress("Finalizing map");
7070

71-
MpqEditor mpq = MpqEditorFactory.getEditor(targetMap);
72-
if (mpq != null) {
73-
mpq.closeWithCompression();
71+
try (MpqEditor mpq = MpqEditorFactory.getEditor(targetMap)) {
72+
if (mpq != null) {
73+
mpq.closeWithCompression();
74+
}
7475
}
7576

7677
gui.sendProgress("Done.");

de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/requests/RunTests.java

Lines changed: 73 additions & 74 deletions
Original file line numberDiff line numberDiff line change
@@ -176,91 +176,90 @@ public TestResult runTests(ImTranslator translator, ImProg imProg, Optional<Func
176176

177177
WLogger.info("Ran compiletime functions");
178178

179+
// Use try-with-resources for automatic cleanup
180+
try (ScheduledExecutorService testScheduler = Executors.newSingleThreadScheduledExecutor()) {
179181

180-
for (ImFunction f : imProg.getFunctions()) {
181-
if (f.hasFlag(FunctionFlagEnum.IS_TEST)) {
182-
Element trace = f.attrTrace();
183-
184-
if (cu.isPresent() && !Utils.elementContained(Optional.of(trace), cu.get())) {
185-
continue;
186-
}
187-
if (funcToTest.isPresent() && trace != funcToTest.get()) {
188-
continue;
189-
}
182+
for (ImFunction f : imProg.getFunctions()) {
183+
if (f.hasFlag(FunctionFlagEnum.IS_TEST)) {
184+
Element trace = f.attrTrace();
190185

186+
if (cu.isPresent() && !Utils.elementContained(Optional.of(trace), cu.get())) {
187+
continue;
188+
}
189+
if (funcToTest.isPresent() && trace != funcToTest.get()) {
190+
continue;
191+
}
191192

192-
String message = "Running <" + f.attrTrace().attrNearestPackage().tryGetNameDef().getName() + ":"
193+
String message = "Running <" + f.attrTrace().attrNearestPackage().tryGetNameDef().getName() + ":"
193194
+ f.attrTrace().attrErrorPos().getLine() + " - " + f.getName() + ">..";
194-
println(message);
195-
WLogger.info(message);
196-
try {
197-
@Nullable ILInterpreter finalInterpreter = interpreter;
198-
Callable<Void> run = () -> {
199-
finalInterpreter.runVoidFunc(f, null);
200-
// each test must finish it's own timers (otherwise, we would get strange results)
201-
finalInterpreter.completeTimers();
202-
return null;
203-
};
204-
RunnableFuture<Void> future = new FutureTask<>(run);
205-
if (service != null && !service.isShutdown()) {
206-
service.shutdownNow();
207-
}
208-
service = Executors.newSingleThreadScheduledExecutor();
209-
service.execute(future);
195+
println(message);
196+
WLogger.info(message);
197+
210198
try {
211-
future.get(timeoutSeconds, TimeUnit.SECONDS); // Wait 20 seconds for test to complete
212-
} catch (TimeoutException ex) {
213-
future.cancel(true);
214-
throw new TestTimeOutException();
215-
} catch (ExecutionException e) {
216-
throw e.getCause();
217-
}
218-
service.shutdown();
219-
service.awaitTermination(10, TimeUnit.SECONDS);
220-
service = Executors.newSingleThreadScheduledExecutor();
221-
if (gui.getErrorCount() > 0) {
222-
StringBuilder sb = new StringBuilder();
223-
for (CompileError error : gui.getErrorList()) {
224-
sb.append(error).append("\n");
225-
println(error.getMessage());
199+
@Nullable ILInterpreter finalInterpreter = interpreter;
200+
Callable<Void> run = () -> {
201+
finalInterpreter.runVoidFunc(f, null);
202+
// each test must finish its own timers (otherwise, we would get strange results)
203+
finalInterpreter.completeTimers();
204+
return null;
205+
};
206+
207+
Future<Void> future = testScheduler.submit(run);
208+
209+
try {
210+
future.get(timeoutSeconds, TimeUnit.SECONDS);
211+
} catch (TimeoutException ex) {
212+
future.cancel(true);
213+
throw new TestTimeOutException();
214+
} catch (ExecutionException e) {
215+
throw e.getCause();
226216
}
227-
gui.clearErrors();
228-
TestFailure failure = new TestFailure(f, interpreter.getStackFrames(), sb.toString());
229-
failTests.add(failure);
230-
} else {
217+
218+
if (gui.getErrorCount() > 0) {
219+
StringBuilder sb = new StringBuilder();
220+
for (CompileError error : gui.getErrorList()) {
221+
sb.append(error).append("\n");
222+
println(error.getMessage());
223+
}
224+
gui.clearErrors();
225+
TestFailure failure = new TestFailure(f, interpreter.getStackFrames(), sb.toString());
226+
failTests.add(failure);
227+
} else {
228+
successTests.add(f);
229+
println("\tOK!");
230+
}
231+
} catch (TestSuccessException e) {
231232
successTests.add(f);
232233
println("\tOK!");
234+
} catch (TestFailException e) {
235+
TestFailure failure = new TestFailure(f, interpreter.getStackFrames(), e.getMessage());
236+
failTests.add(failure);
237+
println("\tFAILED assertion:");
238+
println("\t" + failure.getMessageWithStackFrame());
239+
} catch (TestTimeOutException e) {
240+
failTests.add(new TestFailure(f, interpreter.getStackFrames(), e.getMessage()));
241+
println("\tFAILED - TIMEOUT (This test did not complete in " + timeoutSeconds + " seconds, it might contain an endless loop)");
242+
println(interpreter.getStackFrames().toString());
243+
} catch (InterpreterException e) {
244+
TestFailure failure = new TestFailure(f, interpreter.getStackFrames(), e.getMessage());
245+
failTests.add(failure);
246+
println("\t" + failure.getMessageWithStackFrame());
247+
} catch (Throwable e) {
248+
failTests.add(new TestFailure(f, interpreter.getStackFrames(), e.toString()));
249+
println("\tFAILED with exception: " + e.getClass() + " " + e.getLocalizedMessage());
250+
println(interpreter.getStackFrames().toString());
251+
println("Here are some compiler internals, that might help Wurst developers to debug this issue:");
252+
StringWriter sw = new StringWriter();
253+
PrintWriter pw = new PrintWriter(sw);
254+
e.printStackTrace(pw);
255+
String sStackTrace = sw.toString();
256+
println("\t" + e.getLocalizedMessage());
257+
println("\t" + sStackTrace);
233258
}
234-
} catch (TestSuccessException e) {
235-
successTests.add(f);
236-
println("\tOK!");
237-
} catch (TestFailException e) {
238-
TestFailure failure = new TestFailure(f, interpreter.getStackFrames(), e.getMessage());
239-
failTests.add(failure);
240-
println("\tFAILED assertion:");
241-
println("\t" + failure.getMessageWithStackFrame());
242-
} catch (TestTimeOutException e) {
243-
failTests.add(new TestFailure(f, interpreter.getStackFrames(), e.getMessage()));
244-
println("\tFAILED - TIMEOUT (This test did not complete in " + timeoutSeconds + " seconds, it might contain an endless loop)");
245-
println(interpreter.getStackFrames().toString());
246-
} catch (InterpreterException e) {
247-
TestFailure failure = new TestFailure(f, interpreter.getStackFrames(), e.getMessage());
248-
failTests.add(failure);
249-
println("\t" + failure.getMessageWithStackFrame());
250-
} catch (Throwable e) {
251-
failTests.add(new TestFailure(f, interpreter.getStackFrames(), e.toString()));
252-
println("\tFAILED with exception: " + e.getClass() + " " + e.getLocalizedMessage());
253-
println(interpreter.getStackFrames().toString());
254-
println("Here are some compiler internals, that might help Wurst developers to debug this issue:");
255-
StringWriter sw = new StringWriter();
256-
PrintWriter pw = new PrintWriter(sw);
257-
e.printStackTrace(pw);
258-
String sStackTrace = sw.toString();
259-
println("\t" + e.getLocalizedMessage());
260-
println("\t" + sStackTrace);
261259
}
262260
}
263-
}
261+
} // Scheduler is automatically shut down here
262+
264263
println("Tests succeeded: " + successTests.size() + "/" + (successTests.size() + failTests.size()));
265264
if (failTests.size() == 0) {
266265
println(">> All tests have passed successfully!");

0 commit comments

Comments
 (0)