400 lines
12 KiB
Python
400 lines
12 KiB
Python
"""Волна N поверх vfbuild14 (83 ошибки). Таблицы по file:line из vfbuild14.log.
|
|
Запуск: python3 tools/waves_n.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):
|
|
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, expect=None):
|
|
L = get(rel)
|
|
c = 0
|
|
for i, l in enumerate(L):
|
|
if old in l:
|
|
L[i] = l.replace(old, new)
|
|
c += 1
|
|
if expect is not None and c != expect:
|
|
stats[tag + "_COUNT"] += 1
|
|
print(f"COUNT {rel}: {old!r} matched {c}, expected {expect}")
|
|
if c:
|
|
stats[tag] += c
|
|
else:
|
|
if 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 add_import(rel, imp, tag):
|
|
L = get(rel)
|
|
if imp in L:
|
|
stats[tag + "_skip"] += 1
|
|
return
|
|
for i, l in enumerate(L):
|
|
if l.startswith("import "):
|
|
L.insert(i, imp)
|
|
stats[tag] += 1
|
|
return
|
|
stats[tag + "_MISS"] += 1
|
|
print(f"IMPORT-MISS {rel}: {imp}")
|
|
|
|
|
|
# (rel, line, old, new)
|
|
EDITS = [
|
|
# --- gq: effectively-final (blank decls, single later assignment) ---
|
|
("defpackage/gq.java", 37, "float var3 = 0.0F;", "float var3;"),
|
|
("defpackage/gq.java", 38, "float var4 = 0.0F;", "float var4;"),
|
|
("defpackage/gq.java", 39, "Int2ObjectMap var5 = null;", "Int2ObjectMap var5;"),
|
|
("defpackage/gq.java", 40, "Int2ObjectMap var6 = null;", "Int2ObjectMap var6;"),
|
|
# --- mm ---
|
|
(
|
|
"defpackage/mm.java",
|
|
169,
|
|
"this.activeFadingSounds.put(var1, var8);",
|
|
"this.activeFadingSounds.put(var1, (ml)var8);",
|
|
),
|
|
# --- ach ---
|
|
(
|
|
"defpackage/ach.java",
|
|
458,
|
|
"var6 = Comparator.comparing(var0 ->",
|
|
"var6 = Comparator.<mo>comparing(var0 ->",
|
|
),
|
|
# --- acz: бриджи через Object ---
|
|
(
|
|
"defpackage/acz.java",
|
|
81,
|
|
"var1 = (PerServerVersionScreen)var0;",
|
|
"var1 = (b.k)(Object)var0;",
|
|
),
|
|
(
|
|
"defpackage/acz.java",
|
|
83,
|
|
"return new acx(var1.prevScreen,",
|
|
"return new acx(((PerServerVersionScreen)var0).prevScreen,",
|
|
),
|
|
(
|
|
"defpackage/acz.java",
|
|
105,
|
|
"var1 = (ViaFabricPlusScreen)var0;",
|
|
"var1 = (b.k)(Object)var0;",
|
|
),
|
|
(
|
|
"defpackage/acz.java",
|
|
106,
|
|
"return new acx(((ViaFabricPlusScreen)var1).prevScreen);",
|
|
"return new acx(((ViaFabricPlusScreen)var0).prevScreen);",
|
|
),
|
|
# --- adc ---
|
|
(
|
|
"defpackage/adc.java",
|
|
448,
|
|
"var0.setValue(var2[Math.floorMod(var3 + var1, var2.length)]);",
|
|
"var0.setValue((T)var2[Math.floorMod(var3 + var1, var2.length)]);",
|
|
),
|
|
# --- ado / aeq: typed Stream ---
|
|
(
|
|
"defpackage/ado.java",
|
|
163,
|
|
"try (Stream var15 = Files.list(capesDir()))",
|
|
"try (Stream<Path> var15 = Files.list(capesDir()))",
|
|
),
|
|
(
|
|
"defpackage/aeq.java",
|
|
817,
|
|
"try (Stream var1 = Files.list(var0))",
|
|
"try (Stream<Path> var1 = Files.list(var0))",
|
|
),
|
|
# --- aeo: usage casts ---
|
|
("defpackage/aeo.java", 310, "var10.append(", "((MutableComponent)var10).append("),
|
|
("defpackage/aeo.java", 328, "var10.append(", "((MutableComponent)var10).append("),
|
|
("defpackage/aeo.java", 345, "var10.append(", "((MutableComponent)var10).append("),
|
|
("defpackage/aeo.java", 382, "var10.append(", "((MutableComponent)var10).append("),
|
|
# --- ahw ---
|
|
(
|
|
"defpackage/ahw.java",
|
|
175,
|
|
"? -1: var9.getOrDefault(var11.parent.name, (1226890724 | -1226890725) + (1226890724 & -1226890725));",
|
|
"? -1: ((Integer)var9.getOrDefault(var11.parent.name, (1226890724 | -1226890725) + (1226890724 & -1226890725)));",
|
|
),
|
|
# --- aid ---
|
|
(
|
|
"defpackage/aid.java",
|
|
636,
|
|
"byte var33 = var18 ? 1 : 0;",
|
|
"byte var33 = (byte)(var18 ? 1 : 0);",
|
|
),
|
|
# --- akx ---
|
|
(
|
|
"defpackage/akx.java",
|
|
154,
|
|
"var1.sort((var0x, var1x) -> Integer.compare(var1x.getIntValue(), var0x.getIntValue()));",
|
|
"var1.sort((var0x, var1x) -> Integer.compare(((Entry)var1x).getIntValue(), ((Entry)var0x).getIntValue()));",
|
|
),
|
|
# --- akz ---
|
|
(
|
|
"defpackage/akz.java",
|
|
160,
|
|
"var1.sort(String::compareToIgnoreCase);",
|
|
"((List<String>)var1).sort(String::compareToIgnoreCase);",
|
|
),
|
|
# --- ald ---
|
|
(
|
|
"defpackage/ald.java",
|
|
128,
|
|
"var7.toArray(new Direction[0]),",
|
|
"(Direction[])var7.toArray(new Direction[0]),",
|
|
),
|
|
("defpackage/ald.java", 170, "var2.add(var5);", "var2.add((BakedQuad)var5);"),
|
|
# --- alp / auw: логгер defpackage.id ---
|
|
(
|
|
"defpackage/alp.java",
|
|
54,
|
|
"id.warn(Cif.SECURITY,",
|
|
"defpackage.id.warn(Cif.SECURITY,",
|
|
),
|
|
("defpackage/auw.java", 467, "id.error(", "defpackage.id.error("),
|
|
# --- B -> byte[] ---
|
|
("defpackage/anm.java", 38, "B var2 = null;", "byte[] var2 = null;"),
|
|
("defpackage/ann.java", 36, "B var3 = null;", "byte[] var3 = null;"),
|
|
("defpackage/ans.java", 470, "B var3 = null;", "byte[] var3 = null;"),
|
|
# --- ans: typed list for sort ---
|
|
(
|
|
"defpackage/ans.java",
|
|
154,
|
|
"ArrayList var4 = null;",
|
|
"ArrayList<anr> var4 = null;",
|
|
),
|
|
# --- anl ---
|
|
(
|
|
"defpackage/anl.java",
|
|
823,
|
|
'var7.add("d", var1x)',
|
|
'var7.add("d", (JsonElement)var1x)',
|
|
),
|
|
# --- aua: бридж mixin-интерфейса ---
|
|
("defpackage/aua.java", 126, "((b.j)var0)", "((b.j)(Object)var0)"),
|
|
("defpackage/aua.java", 241, "((b.j)var0)", "((b.j)(Object)var0)"),
|
|
# --- dq: ams var5, blank EF ---
|
|
("defpackage/dq.java", 41, "Object var5 = null;", "ams var5;"),
|
|
("defpackage/dq.java", 42, "String var6 = null;", "String var6;"),
|
|
# --- hy: typed comparator ---
|
|
(
|
|
"defpackage/hy.java",
|
|
351,
|
|
"Comparator var1 = Comparator.comparingInt(",
|
|
"Comparator<hu> var1 = Comparator.comparingInt(",
|
|
),
|
|
# --- hl ---
|
|
(
|
|
"defpackage/hl.java",
|
|
76,
|
|
"LinkedHashMap var1 = new LinkedHashMap();",
|
|
"LinkedHashMap<hk, hh> var1 = new LinkedHashMap();",
|
|
),
|
|
(
|
|
"defpackage/hl.java",
|
|
88,
|
|
"ArrayList var7 = new ArrayList(var1.values());",
|
|
"ArrayList<hh> var7 = new ArrayList(var1.values());",
|
|
),
|
|
# --- hn ---
|
|
(
|
|
"defpackage/hn.java",
|
|
594,
|
|
"HashMap var1 = null;",
|
|
"HashMap<String, Integer> var1 = null;",
|
|
),
|
|
# --- j ---
|
|
("defpackage/j.java", 221, "final i var3 = null;", "i var3 = null;"),
|
|
# --- ld ---
|
|
(
|
|
"defpackage/ld.java",
|
|
289,
|
|
".thenCompose(Function.identity());",
|
|
".thenCompose(var12x -> (java.util.concurrent.CompletionStage<HttpResponse<String>>)(Object)var12x);",
|
|
),
|
|
# --- mr: lambda вместо method ref (raw Optional) ---
|
|
(
|
|
"defpackage/mr.java",
|
|
57,
|
|
"ifPresent(var14::add);",
|
|
"ifPresent(var17 -> var14.add((JsonElement)var17));",
|
|
),
|
|
(
|
|
"defpackage/mr.java",
|
|
110,
|
|
"ifPresent(var14::add);",
|
|
"ifPresent(var17 -> var14.add((JsonElement)var17));",
|
|
),
|
|
# --- nj ---
|
|
("defpackage/nj.java", 1036, "new nl(var3, var3x,", "new nl((nk)var3, var3x,"),
|
|
# --- op: merged slots ---
|
|
("defpackage/op.java", 239, "Constable var3 = null;", "Object var3 = null;"),
|
|
("defpackage/op.java", 242, "Constable var6 = null;", "Object var6 = null;"),
|
|
("defpackage/op.java", 1179, "Object var4 = null;", "ob var4 = null;"),
|
|
# --- ri ---
|
|
(
|
|
"defpackage/ri.java",
|
|
1206,
|
|
"ArrayList var2 = new ArrayList();",
|
|
"ArrayList<rh> var2 = new ArrayList();",
|
|
),
|
|
# --- tf ---
|
|
(
|
|
"defpackage/tf.java",
|
|
239,
|
|
"Optional var16 = null;",
|
|
"Optional<Vec3> var16 = null;",
|
|
),
|
|
(
|
|
"defpackage/tf.java",
|
|
279,
|
|
"var16 = var15.clip(var2, var3);",
|
|
"var16 = var15.clip(var2, var3).map(BlockHitResult::getLocation);",
|
|
),
|
|
(
|
|
"defpackage/tf.java",
|
|
482,
|
|
"Optional var13 = null;",
|
|
"Optional<BlockHitResult> var13 = null;",
|
|
),
|
|
(
|
|
"defpackage/tf.java",
|
|
489,
|
|
"new EntityHitResult(var2, var1x)",
|
|
"new EntityHitResult(var2, var1x.getLocation())",
|
|
),
|
|
# --- ux: int -> boolean ---
|
|
(
|
|
"defpackage/ux.java",
|
|
281,
|
|
"var16, var17, var18, var19);",
|
|
"var16, var17 != 0, var18, var19);",
|
|
),
|
|
# --- vd / vu ---
|
|
(
|
|
"defpackage/vd.java",
|
|
454,
|
|
"var6.sort(Comparator.comparingDouble(var0 -> -mc.player.distanceToSqr(var0)));",
|
|
"var6.sort(Comparator.comparingDouble(var0 -> -mc.player.distanceToSqr((net.minecraft.world.entity.player.Player)var0)));",
|
|
),
|
|
(
|
|
"defpackage/vu.java",
|
|
841,
|
|
"var4.sort(Comparator.comparingDouble(var0 -> -mc.player.distanceToSqr(var0)));",
|
|
"var4.sort(Comparator.comparingDouble(var0 -> -mc.player.distanceToSqr((net.minecraft.world.entity.player.Player)var0)));",
|
|
),
|
|
# --- ww ---
|
|
(
|
|
"defpackage/ww.java",
|
|
147,
|
|
"Optional var2 = decode(var0, var1);",
|
|
"Optional<xd> var2 = decode(var0, var1);",
|
|
),
|
|
# --- agk ---
|
|
(
|
|
"defpackage/agk.java",
|
|
346,
|
|
"ArrayList var3 = null;",
|
|
"ArrayList<agh> var3 = null;",
|
|
),
|
|
# --- b: bare bz + ParseResults ---
|
|
(
|
|
"b/bx.java",
|
|
27,
|
|
", bz.getInstance().getCommandManager().getSource());",
|
|
", defpackage.bz.getInstance().getCommandManager().getSource());",
|
|
),
|
|
(
|
|
"b/t.java",
|
|
49,
|
|
", bz.getInstance().getCommandManager().getSource());",
|
|
", defpackage.bz.getInstance().getCommandManager().getSource());",
|
|
),
|
|
(
|
|
"b/t.java",
|
|
54,
|
|
"getCompletionSuggestions(this.currentParse, cursor);",
|
|
"getCompletionSuggestions((ParseResults<SharedSuggestionProvider>)this.currentParse, cursor);",
|
|
),
|
|
]
|
|
|
|
# (rel, old, new, expect)
|
|
ALL_EDITS = [
|
|
("defpackage/aeh.java", "((Object[])var6)", "((float[])var6)", 3),
|
|
("defpackage/aua.java", "((b.j)var0)", "((b.j)(Object)var0)", 2),
|
|
]
|
|
|
|
# content-based (unprivate ctors)
|
|
CTOR_EDITS = [
|
|
("defpackage/ara.java", "private ara()", "ara()"),
|
|
("defpackage/vk.java", "private vk()", "vk()"),
|
|
("defpackage/hh.java", "private hh(hk var1)", "hh(hk var1)"),
|
|
]
|
|
|
|
IMPORTS = [
|
|
("defpackage/gt.java", "import java.util.Iterator;"),
|
|
("defpackage/aeo.java", "import net.minecraft.network.chat.MutableComponent;"),
|
|
("b/t.java", "import net.minecraft.commands.SharedSuggestionProvider;"),
|
|
]
|
|
|
|
|
|
def main():
|
|
by = collections.defaultdict(list)
|
|
for row in EDITS:
|
|
by[row[0]].append(row)
|
|
# aua строки из EDITS уже есть (126/241) — ALL_EDITS по aua дублирует, убираем оттуда
|
|
for rel, rows in by.items():
|
|
for row in sorted(rows, key=lambda r: -r[1]):
|
|
edit_line(rel, row[1], row[2], row[3], "n")
|
|
for rel, old, new, expect in ALL_EDITS:
|
|
if rel == "defpackage/aua.java":
|
|
continue
|
|
edit_all(rel, old, new, "n", expect)
|
|
for rel, old, new in CTOR_EDITS:
|
|
edit_all(rel, old, new, "ctor")
|
|
for rel, imp in IMPORTS:
|
|
add_import(rel, imp, "import")
|
|
|
|
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 or "COUNT" in k}
|
|
if miss:
|
|
print("PROBLEMS:", dict(miss))
|
|
sys.exit(1)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|