wave N+2: vfbuild16 fixes (aaj EF lambda copies in joinServer/loadThread/sendChat)
This commit is contained in:
parent
1434ba25c4
commit
1160e7f845
3 changed files with 190 additions and 9 deletions
121
tools/waves_n2.py
Normal file
121
tools/waves_n2.py
Normal file
|
|
@ -0,0 +1,121 @@
|
|||
"""Волна N+2 поверх vfbuild16 (12 EF-ошибок в aaj.java). Запуск: python3 tools/waves_n2.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 insert_before(rel, ln, lines, tag="ins"):
|
||||
L = get(rel)
|
||||
i = ln - 1
|
||||
if lines[0] in L[max(0, i - 5) : i]:
|
||||
stats[tag + "_skip"] += 1
|
||||
return
|
||||
L[i:i] = lines
|
||||
stats[tag] += len(lines)
|
||||
|
||||
|
||||
A = "defpackage/aaj.java"
|
||||
|
||||
EDITS = [
|
||||
(A, 1888, ", var1, var3.at()));", ", var1f, var3f.at()));"),
|
||||
(
|
||||
A,
|
||||
1876,
|
||||
"if (!var2.equals(this.chatWith)) {",
|
||||
"if (!var2f.equals(this.chatWith)) {",
|
||||
),
|
||||
(A, 1865, "this.chatPending.remove(var3);", "this.chatPending.remove(var3f);"),
|
||||
(
|
||||
A,
|
||||
1797,
|
||||
"if (!var1.equals(this.chatWith)) {",
|
||||
"if (!var1f.equals(this.chatWith)) {",
|
||||
),
|
||||
(A, 1501, "if (var3.level != null) {", "if (var3f.level != null) {"),
|
||||
(
|
||||
A,
|
||||
1494,
|
||||
"new ServerData(var1.username(), var2, Type.OTHER),",
|
||||
"new ServerData(var1.username(), var2f, Type.OTHER),",
|
||||
),
|
||||
(A, 1493, "ServerAddress.parseString(var2),", "ServerAddress.parseString(var2f),"),
|
||||
(A, 1492, "var3,", "var3f,"),
|
||||
(
|
||||
A,
|
||||
1486,
|
||||
"var3.disconnectWithProgressScreen();",
|
||||
"var3f.disconnectWithProgressScreen();",
|
||||
),
|
||||
]
|
||||
|
||||
INSERTS = [
|
||||
(
|
||||
A,
|
||||
1859,
|
||||
[
|
||||
" final String var1f = var1;",
|
||||
" final String var2f = var2;",
|
||||
" final amw var3f = var3;",
|
||||
],
|
||||
),
|
||||
(A, 1772, [" final String var1f = var1;"]),
|
||||
(
|
||||
A,
|
||||
1479,
|
||||
[
|
||||
" final Minecraft var3f = var3;",
|
||||
" final String var2f = var2;",
|
||||
],
|
||||
),
|
||||
]
|
||||
|
||||
|
||||
def main():
|
||||
rows = [("e", ln, a, b) for _, ln, a, b in EDITS] + [
|
||||
("i", ln, a, None) for _, ln, a in INSERTS
|
||||
]
|
||||
for kind, ln, a, b in sorted(rows, key=lambda r: -r[1]):
|
||||
if kind == "e":
|
||||
edit_line(A, ln, a, b)
|
||||
else:
|
||||
insert_before(A, ln, a)
|
||||
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()
|
||||
Loading…
Add table
Add a link
Reference in a new issue