Files
tustu/scripts/legacy/fix_constructors_v2.py
johndoe6345789 db8eac5a02 feat: Add unified command-line utility for TunerStudio project
- Introduced `tustu_tools.py` to consolidate various scripts into a single command-line tool.
- Implemented key generation functionality with multiple algorithms.
- Added dummy data generation and email formatting capabilities.
- Included structure analysis and constructor fixing for Java files.
- Created wrapper script `tustu-tools` for easy access to the utility.
- Developed test scripts for dummy data and email generation.
- Added a script for reorganizing the app directory structure.
2026-01-11 21:05:10 +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()