Files
tustu/fix_constructors_v2.py
johndoe6345789 a17fd820b6 Add script to fix misnamed constructors in Java files
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.
2026-01-11 20:45:07 +00:00

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()