mirror of
https://github.com/johndoe6345789/tustu.git
synced 2026-04-24 13:45:00 +00:00
This commit introduces a new Python script, `fix_constructors_v2.py`, which automates the process of correcting constructor names in Java files based on Gradle error outputs. The script scans specified Java files, identifies constructors that do not match their class names, and updates them accordingly. It handles various edge cases, ensuring that only relevant constructors are modified. The script also provides feedback on the changes made during execution.
89 lines
3.6 KiB
Python
89 lines
3.6 KiB
Python
#!/usr/bin/env python3
|
|
"""
|
|
Fix misnamed constructors in Java files based on Gradle error output.
|
|
"""
|
|
|
|
import re
|
|
import os
|
|
from pathlib import Path
|
|
|
|
# Map of files to fix (file_path: [(line_num, wrong_name, class_name)])
|
|
fixes = {}
|
|
|
|
# Read the known error pattern - these classes have constructors with wrong names
|
|
# The files are inner classes where constructor name doesn't match class name
|
|
|
|
error_files = [
|
|
"/home/rewrich/Documents/GitHub/tustu/app/com/efiAnalytics/apps/ts/dashboard/GaugeClusterRefreshActionListener.java",
|
|
"/home/rewrich/Documents/GitHub/tustu/app/com/efiAnalytics/apps/ts/dashboard/GaugeClusterIndexActionListener.java",
|
|
"/home/rewrich/Documents/GitHub/tustu/app/com/efiAnalytics/apps/ts/dashboard/CheckBoxStateActionListener.java",
|
|
"/home/rewrich/Documents/GitHub/tustu/app/com/efiAnalytics/apps/ts/dashboard/HtmlDisplayHyperlinkListener.java",
|
|
"/home/rewrich/Documents/GitHub/tustu/app/com/efiAnalytics/apps/ts/dashboard/GaugePropertiesPanel.java",
|
|
]
|
|
|
|
def get_class_name_from_file(filepath):
|
|
"""Extract the main class name from a Java file."""
|
|
with open(filepath, 'r', encoding='utf-8', errors='ignore') as f:
|
|
content = f.read()
|
|
|
|
# Find class declaration
|
|
match = re.search(r'\bclass\s+([A-Za-z_][A-Za-z0-9_]*)', content)
|
|
if match:
|
|
return match.group(1)
|
|
return None
|
|
|
|
def fix_constructor_in_file(filepath, class_name):
|
|
"""Fix constructor names in a file."""
|
|
with open(filepath, 'r', encoding='utf-8', errors='ignore') as f:
|
|
lines = f.readlines()
|
|
|
|
modified = False
|
|
|
|
for i, line in enumerate(lines):
|
|
# Look for constructor-like patterns that don't match the class name
|
|
# Pattern: identifier(params) { where identifier is a single letter or wrong name
|
|
match = re.match(r'^(\s*)([A-Za-z_][A-Za-z0-9_]*)\s*\([^)]*\)\s*\{\s*\}?\s*$', line)
|
|
if match:
|
|
indent = match.group(1)
|
|
name = match.group(2)
|
|
|
|
# Skip if it's already correct or if it's a keyword
|
|
if name in ['public', 'private', 'protected', 'static', 'final']:
|
|
continue
|
|
|
|
# If it's a single letter or doesn't match class name, it's likely a constructor
|
|
if (len(name) <= 2 or name != class_name) and name[0].isupper():
|
|
# Check if previous line doesn't have a return type
|
|
if i > 0:
|
|
prev_line = lines[i-1].strip()
|
|
# If no obvious return type, assume it's a constructor
|
|
if not re.search(r'\b(void|int|boolean|String|long|double|float|byte|short|char|public|private|protected)\s*$', prev_line):
|
|
# Replace with class name
|
|
fixed_line = re.sub(r'^(\s*)' + re.escape(name), r'\1' + class_name, line)
|
|
lines[i] = fixed_line
|
|
modified = True
|
|
print(f"Fixed: {filepath}:{i+1} - {name} -> {class_name}")
|
|
|
|
if modified:
|
|
with open(filepath, 'w', encoding='utf-8') as f:
|
|
f.writelines(lines)
|
|
return True
|
|
return False
|
|
|
|
def main():
|
|
# Find all Java files in the app directory that might have this issue
|
|
app_dir = Path('/home/rewrich/Documents/GitHub/tustu/app')
|
|
|
|
fixed_files = 0
|
|
total_fixes = 0
|
|
|
|
for java_file in app_dir.rglob('*.java'):
|
|
class_name = get_class_name_from_file(java_file)
|
|
if class_name and fix_constructor_in_file(java_file, class_name):
|
|
fixed_files += 1
|
|
|
|
print(f"\nProcessed files. Fixed {fixed_files} files.")
|
|
|
|
if __name__ == '__main__':
|
|
main()
|