mirror of
https://github.com/johndoe6345789/tustu.git
synced 2026-04-24 13:45:00 +00:00
- 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.
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()
|