본문 바로가기

정리/Language

java code 분석기

728x90

import os
import re
import openpyxl
from openpyxl import Workbook
from typing import List, Dict

# Java 파일 검색
def find_java_files(project_folder: str) -> List[str]:
    java_files = []
    for root, dirs, files in os.walk(project_folder):
        for file in files:
            if file.endswith('.java'):
                java_files.append(os.path.join(root, file))
    return java_files

# Java 파일 분석
def parse_java_file(java_file_path: str) -> Dict:
    with open(java_file_path, 'r', encoding='utf-8') as file:
        content = file.read()

    # Spring Service 이름 찾기
    services = re.findall(r'@Service\s+public\s+class\s+(\w+)', content)

    # 함수 이름 추출
    functions = re.findall(r'(public|private|protected|static|\s)+[\w<>[\]]+\s+(\w+)\s*\([^)]*\)\s*\{', content)

    # 문자열 추출
    strings = re.findall(r'".+?"', content)

    # 테이블 이름 추출
    table_names = [s.strip('"') for s in strings if re.match(r'^[a-zA-Z0-9_]+$', s.strip('"'))]

    return {
        "services": services,
        "functions": [func[1] for func in functions],
        "tables": table_names,
    }

# 엑셀 파일 생성
def write_to_excel(data: List[Dict], output_file: str):
    workbook = Workbook()
    sheet = workbook.active
    sheet.title = "Java Analysis"

    # 엑셀 헤더 추가
    sheet.append(["FOLDER", "JAVA", "SERVICE", "FUNCTION", "TABLE"])

    # 데이터 행 추가
    for row in data:
        sheet.append([row["FOLDER"], row["JAVA"], row["SERVICE"], row["FUNCTION"], row["TABLE"]])

    # 엑셀 저장
    workbook.save(output_file)

# 프로젝트 폴더 분석
def analyze_project_folder(project_folder: str, output_file: str):
    java_files = find_java_files(project_folder)
    data = []

    for java_file in java_files:
        folder = os.path.dirname(java_file)
        java_name = os.path.basename(java_file)

        parsed_data = parse_java_file(java_file)

        # 각 Service, Function, Table에 대해 엑셀 행 생성
        for service in parsed_data["services"]:
            for function in parsed_data["functions"]:
                for table in parsed_data["tables"]:
                    data.append({
                        "FOLDER": folder,
                        "JAVA": java_name,
                        "SERVICE": service,
                        "FUNCTION": function,
                        "TABLE": table,
                    })

    write_to_excel(data, output_file)

# 실행
if __name__ == "__main__":
    project_folder = "path/to/eclipse/project/src"  # 분석할 프로젝트 폴더 경로
    output_file = "java_analysis.xlsx"             # 저장할 엑셀 파일 이름
    analyze_project_folder(project_folder, output_file)
    print(f"Analysis complete. Results saved to {output_file}.")