From 1434ba25c410f0d071d2d25fce5799a8b0a3edb4 Mon Sep 17 00:00:00 2001 From: loki5512344 Date: Sat, 3 Oct 2026 15:25:27 +0200 Subject: [PATCH] wave N+1: vfbuild15 fixes (EF lambda copies, tf clip reverts, mixin casts, unprivate --- build-logs/vfbuild15.log | 81 ++++++++++++++ src/main/java/b/t.java | 4 +- src/main/java/defpackage/ach.java | 2 +- src/main/java/defpackage/alc.java | 2 +- src/main/java/defpackage/ans.java | 2 +- src/main/java/defpackage/hh.java | 2 +- src/main/java/defpackage/tf.java | 6 +- src/main/java/defpackage/uw.java | 2 +- src/main/java/defpackage/yc.java | 9 +- tools/waves_n1.py | 180 ++++++++++++++++++++++++++++++ 10 files changed, 277 insertions(+), 13 deletions(-) create mode 100644 build-logs/vfbuild15.log create mode 100644 tools/waves_n1.py diff --git a/build-logs/vfbuild15.log b/build-logs/vfbuild15.log new file mode 100644 index 0000000..43b9a37 --- /dev/null +++ b/build-logs/vfbuild15.log @@ -0,0 +1,81 @@ +/storage/aboba/evovis-client/src/main/java/defpackage/yc.java:258: error: local variables referenced from a lambda expression must be final or effectively final + if (!var1.contains(var2x.getTheme())) { + ^ +/storage/aboba/evovis-client/src/main/java/defpackage/yc.java:1555: error: local variables referenced from a lambda expression must be final or effectively final + var5x = (var3x.getName().toLowerCase().contains(var1)) ? 1 : 0; + ^ +/storage/aboba/evovis-client/src/main/java/defpackage/yc.java:1563: error: local variables referenced from a lambda expression must be final or effectively final + if (var3x.getCategory() == var2) { + ^ +/storage/aboba/evovis-client/src/main/java/defpackage/ach.java:458: error: no suitable method found for comparing((var0)->va[...]ROOT)) + var6 = Comparator.comparing(var0 -> var0.stack().getHoverName().getString().toLowerCase(Locale.ROOT)); + ^ + method Comparator.comparing(Function,Comparator) is not applicable + (wrong number of type arguments; required 2) + method Comparator.comparing(Function) is not applicable + (wrong number of type arguments; required 2) + where T#1,U#1,T#2,U#2 are type-variables: + T#1 extends Object declared in method comparing(Function,Comparator) + U#1 extends Object declared in method comparing(Function,Comparator) + T#2 extends Object declared in method comparing(Function) + U#2 extends Comparable declared in method comparing(Function) +/storage/aboba/evovis-client/src/main/java/defpackage/ald.java:126: error: alc(BakedQuad[],Direction[],int[]) has private access in alc + return new alc( + ^ +/storage/aboba/evovis-client/src/main/java/defpackage/ans.java:161: error: incompatible types: ArrayList cannot be converted to List + this.parseTraf(var5, var2.offset(), var4); + ^ +/storage/aboba/evovis-client/src/main/java/defpackage/ans.java:177: error: incompatible types: ArrayList cannot be converted to List + return var4; + ^ +/storage/aboba/evovis-client/src/main/java/defpackage/hl.java:89: error: incompatible types: cannot infer type-variable(s) T + var7.sort(Comparator.comparingDouble(hh::weight).reversed()); + ^ + (argument mismatch; invalid method reference + method weight in class hh cannot be applied to given types + required: no arguments + found: Object + reason: actual and formal argument lists differ in length) + where T is a type-variable: + T extends Object declared in method comparingDouble(ToDoubleFunction) +/storage/aboba/evovis-client/src/main/java/defpackage/tf.java:279: error: incompatible types: invalid method reference + var16 = var15.clip(var2, var3).map(BlockHitResult::getLocation); + ^ + method getLocation in class HitResult cannot be applied to given types + required: no arguments + found: Vec3 + reason: actual and formal argument lists differ in length +/storage/aboba/evovis-client/src/main/java/defpackage/tf.java:488: error: incompatible types: Optional cannot be converted to Optional + var13 = var7.clip(var10, var11); + ^ +/storage/aboba/evovis-client/src/main/java/defpackage/ux.java:281: error: render(VertexConsumer,Pose,Vec3,long,long,boolean,boolean,float,uv) has private access in uw + this.particles.get(var12x).render(var11x, var10x, var13, var6, var8, var16, var17 != 0, var18, var19); + ^ +/storage/aboba/evovis-client/src/main/java/b/t.java:50: error: incompatible types: ParseResults cannot be converted to ParseResults + this.currentParse = defpackage.bz.getInstance().getCommandManager().getDispatcher().parse(reader, defpackage.bz.getInstance().getCommandManager().getSource()); + ^ +/storage/aboba/evovis-client/src/main/java/b/t.java:55: error: incompatible types: ParseResults cannot be converted to ParseResults + this.pendingSuggestions = defpackage.bz.getInstance().getCommandManager().getDispatcher().getCompletionSuggestions((ParseResults)this.currentParse, cursor); + ^ +Note: Some input files use or override a deprecated API. +Note: Recompile with -Xlint:deprecation for details. +Note: Some input files use unchecked or unsafe operations. +Note: Recompile with -Xlint:unchecked for details. +Note: Some messages have been simplified; recompile with -Xdiags:verbose to get full output +13 errors + +FAILURE: Build failed with an exception. + +* What went wrong: +Execution failed for task ':compileJava' (registered by plugin class 'org.gradle.api.plugins.JavaBasePlugin'). +> Compilation failed; see the compiler output below. + /storage/aboba/evovis-client/src/main/java/defpackage/yc.java:258: error: local variables referenced from a lambda expression must be final or effectively final + if (!var1.contains(var2x.getTheme())) { + ^ + 13 errors + +* Try: +> Check your code and dependencies to fix the compilation error(s) +> Run with --scan to get full insights from a Build Scan (powered by Develocity). + +BUILD FAILED in 24s diff --git a/src/main/java/b/t.java b/src/main/java/b/t.java index 370b493..1ace813 100644 --- a/src/main/java/b/t.java +++ b/src/main/java/b/t.java @@ -47,12 +47,12 @@ public abstract class t { && reader.getString().startsWith(defpackage.bz.getInstance().getCommandManager().getPrefix(), reader.getCursor())) { reader.setCursor(reader.getCursor() + 1); if (this.currentParse == null) { - this.currentParse = defpackage.bz.getInstance().getCommandManager().getDispatcher().parse(reader, defpackage.bz.getInstance().getCommandManager().getSource()); + this.currentParse = (ParseResults)(Object)defpackage.bz.getInstance().getCommandManager().getDispatcher().parse(reader, defpackage.bz.getInstance().getCommandManager().getSource()); } int cursor = this.input.getCursorPosition(); if (cursor >= 1 && (this.suggestions == null || !this.keepSuggestions)) { - this.pendingSuggestions = defpackage.bz.getInstance().getCommandManager().getDispatcher().getCompletionSuggestions((ParseResults)this.currentParse, cursor); + this.pendingSuggestions = defpackage.bz.getInstance().getCommandManager().getDispatcher().getCompletionSuggestions((ParseResults)(Object)this.currentParse, cursor); this.pendingSuggestions.thenAccept(s -> { if (this.pendingSuggestions.isDone()) { this.updateUsageInfo(this.currentParse, s); diff --git a/src/main/java/defpackage/ach.java b/src/main/java/defpackage/ach.java index 99ee954..5062ef4 100644 --- a/src/main/java/defpackage/ach.java +++ b/src/main/java/defpackage/ach.java @@ -455,7 +455,7 @@ public final class ach extends api { var4 = 734420006; break; case -1343783297: - var6 = Comparator.comparing(var0 -> var0.stack().getHoverName().getString().toLowerCase(Locale.ROOT)); + var6 = Comparator.comparing(var0 -> var0.stack().getHoverName().getString().toLowerCase(Locale.ROOT)); var4 = 1334135620; break; case -577531470: diff --git a/src/main/java/defpackage/alc.java b/src/main/java/defpackage/alc.java index 448439c..ca339e9 100644 --- a/src/main/java/defpackage/alc.java +++ b/src/main/java/defpackage/alc.java @@ -13,7 +13,7 @@ public final class alc { private final Direction[] cullFaces; private final int[] colors; - private alc(BakedQuad[] var1, Direction[] var2, int[] var3) { + alc(BakedQuad[] var1, Direction[] var2, int[] var3) { this.quads = var1; this.cullFaces = var2; this.colors = var3; diff --git a/src/main/java/defpackage/ans.java b/src/main/java/defpackage/ans.java index 2ea6ec7..efee2ed 100644 --- a/src/main/java/defpackage/ans.java +++ b/src/main/java/defpackage/ans.java @@ -151,7 +151,7 @@ final class ans { List readSegment(int var1) throws IOException { anr var2 = null; ByteBuffer var3 = null; - ArrayList var4 = null; + ArrayList var4 = null; ByteBuffer var5 = null; int var6 = -1556286043; diff --git a/src/main/java/defpackage/hh.java b/src/main/java/defpackage/hh.java index e70bff0..4c49e0f 100644 --- a/src/main/java/defpackage/hh.java +++ b/src/main/java/defpackage/hh.java @@ -12,7 +12,7 @@ final class hh { this.key = var1; } - private double weight() { + double weight() { return this.key.nutrition() + this.key.saturation(); } } diff --git a/src/main/java/defpackage/tf.java b/src/main/java/defpackage/tf.java index 6e6fdf5..5b68071 100644 --- a/src/main/java/defpackage/tf.java +++ b/src/main/java/defpackage/tf.java @@ -276,7 +276,7 @@ public final class tf extends rm { case -525984328: var14 = (Entity)var13.next(); var15 = this.renderBox(var14, var7).inflate(var14.getPickRadius()); - var16 = var15.clip(var2, var3).map(BlockHitResult::getLocation); + var16 = var15.clip(var2, var3); if (var15.contains(var2)) { var20 = 814856296; } else { @@ -479,14 +479,14 @@ public final class tf extends rm { Vec3 var10 = null; Vec3 var11 = null; BlockHitResult var12 = null; - Optional var13 = null; + Optional var13 = null; int var14 = -1643872642; while (true) { switch (var14) { case -1998940837: var13 = var7.clip(var10, var11); - return var13.map(var1x -> new EntityHitResult(var2, var1x.getLocation())).orElse(null); + return var13.map(var1x -> new EntityHitResult(var2, var1x)).orElse(null); case -1643872642: default: var7 = this.renderBox(var2, var6); diff --git a/src/main/java/defpackage/uw.java b/src/main/java/defpackage/uw.java index d7fed40..9c100b7 100644 --- a/src/main/java/defpackage/uw.java +++ b/src/main/java/defpackage/uw.java @@ -150,7 +150,7 @@ final class uw { } } - private void render(VertexConsumer var1, Pose var2, Vec3 var3, long var4, long var6, boolean var8, boolean var9, float var10, uv var11) { + void render(VertexConsumer var1, Pose var2, Vec3 var3, long var4, long var6, boolean var8, boolean var9, float var10, uv var11) { int var12 = var11.of(this); float var13 = this.lifeAlpha(var4, var6); if (!(var13 <= 0.0F)) { diff --git a/src/main/java/defpackage/yc.java b/src/main/java/defpackage/yc.java index 510847c..c6575d0 100644 --- a/src/main/java/defpackage/yc.java +++ b/src/main/java/defpackage/yc.java @@ -228,6 +228,7 @@ public class yc extends api { case 1629176927: default: var1 = bz.getInstance().getThemeManager().getThemes(); + final List var1f = var1; this.modules.removeIf(var1x -> { aae var2x = null; int var4x = 0; @@ -255,7 +256,7 @@ public class yc extends api { break; case 1874733119: var2x = (aae)var1x; - if (!var1.contains(var2x.getTheme())) { + if (!var1f.contains(var2x.getTheme())) { var3x = 1205756249; } else { var3x = 1245967796; @@ -1544,6 +1545,8 @@ public class yc extends api { } break; case 2121200736: + final String var1f = var1; + final rl var2f = var2; var3 = this.resolveOrder(var2); this.cachedVisibleModules = this.modules.stream().filter(var3x -> { int var5x = 0; @@ -1552,7 +1555,7 @@ public class yc extends api { while (true) { switch (var4x) { case -1994053734: - var5x = (var3x.getName().toLowerCase().contains(var1)) ? 1 : 0; + var5x = (var3x.getName().toLowerCase().contains(var1f)) ? 1 : 0; var4x = 841569715; break; case -1559034135: @@ -1560,7 +1563,7 @@ public class yc extends api { var4x = 841569715; break; case -68546177: - if (var3x.getCategory() == var2) { + if (var3x.getCategory() == var2f) { var4x = 1684260877; } else { var4x = -1559034135; diff --git a/tools/waves_n1.py b/tools/waves_n1.py new file mode 100644 index 0000000..3050631 --- /dev/null +++ b/tools/waves_n1.py @@ -0,0 +1,180 @@ +"""Волна N+1 поверх vfbuild15 (13 ошибок). Запуск: python3 tools/waves_n1.py""" + +import os, sys, collections + +ROOT = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) +JAVA = os.path.join(ROOT, "src/main/java") +stats = collections.Counter() +files = {} + + +def get(rel): + p = rel if os.path.isabs(rel) else os.path.join(JAVA, rel) + if p not in files: + files[p] = open(p, encoding="utf-8", errors="replace").read().splitlines() + return files[p] + + +def edit_line(rel, ln, old, new, tag="n"): + L = get(rel) + i = ln - 1 + if i >= len(L): + stats[tag + "_MISS"] += 1 + print(f"MISS {rel}:{ln} (oob {len(L)})") + return + if old in L[i]: + L[i] = L[i].replace(old, new, 1) + stats[tag] += 1 + elif new in L[i]: + stats[tag + "_skip"] += 1 + else: + stats[tag + "_MISS"] += 1 + print(f"MISS {rel}:{ln}: {old!r}\n got: {L[i].strip()!r}") + + +def edit_all(rel, old, new, tag="n"): + L = get(rel) + c = 0 + for i, l in enumerate(L): + if old in l: + L[i] = l.replace(old, new) + c += 1 + if c: + stats[tag] += c + elif any(new in l for l in L): + stats[tag + "_skip"] += 1 + else: + stats[tag + "_MISS"] += 1 + print(f"MISS-ALL {rel}: {old!r}") + + +def insert_before(rel, ln, lines, tag="ins"): + L = get(rel) + i = ln - 1 + if i > len(L): + stats[tag + "_MISS"] += 1 + print(f"INS-MISS {rel}:{ln} oob") + return + if lines[0] in L[max(0, i - 3) : i]: + stats[tag + "_skip"] += 1 + return + L[i:i] = lines + stats[tag] += len(lines) + + +# line edits, per file descending +EDIT_LINE_TABLE = [ + ( + "defpackage/yc.java", + 1563, + "if (var3x.getCategory() == var2) {", + "if (var3x.getCategory() == var2f) {", + ), + ( + "defpackage/yc.java", + 1555, + ".contains(var1)) ? 1 : 0;", + ".contains(var1f)) ? 1 : 0;", + ), + ( + "defpackage/yc.java", + 258, + "if (!var1.contains(var2x.getTheme())) {", + "if (!var1f.contains(var2x.getTheme())) {", + ), + ( + "defpackage/tf.java", + 489, + "new EntityHitResult(var2, var1x.getLocation())", + "new EntityHitResult(var2, var1x)", + ), + ( + "defpackage/tf.java", + 482, + "Optional var13 = null;", + "Optional var13 = null;", + ), + ( + "defpackage/tf.java", + 279, + "var16 = var15.clip(var2, var3).map(BlockHitResult::getLocation);", + "var16 = var15.clip(var2, var3);", + ), + ( + "defpackage/ans.java", + 154, + "ArrayList var4 = null;", + "ArrayList var4 = null;", + ), + ( + "defpackage/ach.java", + 458, + "Comparator.comparing(", + "Comparator.comparing(", + ), + ( + "b/t.java", + 55, + "(ParseResults)this.currentParse", + "(ParseResults)(Object)this.currentParse", + ), + ( + "b/t.java", + 50, + "this.currentParse = defpackage.bz.getInstance()", + "this.currentParse = (ParseResults)(Object)defpackage.bz.getInstance()", + ), +] + +# inserts (line numbers = pre-insert file; applied in descending order below) +INSERTS = [ + ( + "defpackage/yc.java", + 1547, + [ + " final String var1f = var1;", + " final rl var2f = var2;", + ], + ), + ("defpackage/yc.java", 231, [" final List var1f = var1;"]), +] + +CONTENT_EDITS = [ + ("defpackage/alc.java", "private alc(", "alc("), + ("defpackage/hh.java", "private double weight()", "double weight()"), + ( + "defpackage/uw.java", + "private void render(VertexConsumer var1, Pose var2, Vec3 var3, long var4, long var6, boolean var8, boolean var9, float var10, uv var11)", + "void render(VertexConsumer var1, Pose var2, Vec3 var3, long var4, long var6, boolean var8, boolean var9, float var10, uv var11)", + ), +] + + +def main(): + # merge: all line-scope ops for same file in one descending pass + ops = collections.defaultdict(list) + for row in EDIT_LINE_TABLE: + ops[row[0]].append(("edit", row[1], row[2], row[3])) + for rel, ln, lines in INSERTS: + ops[rel].append(("ins", ln, lines, None)) + for rel, rows in ops.items(): + for kind, ln, a, b in sorted(rows, key=lambda r: -r[1]): + if kind == "edit": + edit_line(rel, ln, a, b) + else: + insert_before(rel, ln, a) + for rel, old, new in CONTENT_EDITS: + edit_all(rel, old, new, "content") + + for p, L in files.items(): + with open(p, "w", encoding="utf-8") as f: + f.write("\n".join(L) + "\n") + print(dict(stats)) + miss = {k: v for k, v in stats.items() if "MISS" in k} + if miss: + print("PROBLEMS:", dict(miss)) + sys.exit(1) + + +if __name__ == "__main__": + main()