initial commit by dev prasad
This commit is contained in:
63
fix_args.py
Normal file
63
fix_args.py
Normal file
@@ -0,0 +1,63 @@
|
||||
import re
|
||||
|
||||
with open('src/main/java/com/example/whatsappautomation/service/ChatbotService.java', 'r') as f:
|
||||
content = f.read()
|
||||
|
||||
# We want to match: sendPaginatedButtons(state, arg2, arg3, new String[]{...}, new String[]{...})
|
||||
# and replace it with: sendPaginatedButtons(state, arg2, new String[]{...}, new String[]{...})
|
||||
# Note: arg2 and arg3 might be getMessage(...) or "string".
|
||||
# It's safest to match: sendPaginatedButtons(state, (whatever), (whatever), new String[]{
|
||||
|
||||
def replacer(match):
|
||||
# match.group(1) is the part from `state, ` up to `, new String[]{`
|
||||
# this part contains `arg2, arg3`. We need to split by comma from the right, but arg2 or arg3 might have commas!
|
||||
# Wait, getting the last argument before `new String[]{` is the best way.
|
||||
# Actually, the button text (arg3) is almost always `getMessage("something.btn", state)` or `"View Options"` or similar.
|
||||
# Let's just use regex to match the third argument which is always followed by `, new String\[\]\{`
|
||||
pass
|
||||
|
||||
# Let's write a simple python parser for the arguments of sendPaginatedButtons
|
||||
new_content = ""
|
||||
idx = 0
|
||||
while True:
|
||||
start_idx = content.find('sendPaginatedButtons(state, ', idx)
|
||||
if start_idx == -1:
|
||||
new_content += content[idx:]
|
||||
break
|
||||
|
||||
new_content += content[idx:start_idx]
|
||||
|
||||
# find the start of `new String[]{`
|
||||
arrays_start = content.find('new String[]{', start_idx)
|
||||
|
||||
# The text between `start_idx + len('sendPaginatedButtons(state, ')` and `arrays_start` is `arg2, arg3, `
|
||||
# We want to remove `arg3, `.
|
||||
# `arg3` is either a string literal `"..."` or a `getMessage(...)` call.
|
||||
args_str = content[start_idx + len('sendPaginatedButtons(state, '):arrays_start].strip()
|
||||
# args_str ends with `,`. Let's remove the trailing comma.
|
||||
args_str = args_str[:-1].strip()
|
||||
|
||||
# Now we need to split args_str into arg2 and arg3.
|
||||
# If it ends with `state)`, arg3 is `getMessage(..., state)`.
|
||||
# If it ends with `"`, arg3 is a string literal.
|
||||
|
||||
# Actually, we can just find the LAST comma that is NOT inside parentheses!
|
||||
# A simple comma split works if we respect parens.
|
||||
def rsplit_args(s):
|
||||
depth = 0
|
||||
for i in range(len(s)-1, -1, -1):
|
||||
if s[i] == ')': depth += 1
|
||||
elif s[i] == '(': depth -= 1
|
||||
elif s[i] == ',' and depth == 0:
|
||||
return s[:i].strip(), s[i+1:].strip()
|
||||
return s, ""
|
||||
|
||||
arg2, arg3 = rsplit_args(args_str)
|
||||
|
||||
new_content += f"sendPaginatedButtons(state, {arg2}, "
|
||||
idx = arrays_start
|
||||
|
||||
with open('src/main/java/com/example/whatsappautomation/service/ChatbotService.java', 'w') as f:
|
||||
f.write(new_content)
|
||||
|
||||
print("Fixed arguments")
|
||||
Reference in New Issue
Block a user