Skip to content

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Repository files navigation

Refactorización automática de código Java mediante Modelos de Lenguaje

Este repositorio proporciona una herramienta para la refactorizar de Issues SonarQube en código Java automáticamente, utilizando modelos de lenguaje (LLMs o SLMs).


Descripción general

El flujo principal del proyecto es:

  1. Analizar código Java con SonarQube.
  2. Identificar issues (por ejemplo: java:S117).
  3. Construir un prompt estructurado basado en la issue.
  4. Enviar el prompt a un modelo de lenguaje (OpenAI, Anthropic, Google o Hugging Face).
  5. Obtener el código refactorizado automáticamente.

Estructura del repositorio

.
├── refactorization_ayesa.py       # Lógica principal de refactorización
├── Test_refactorization.py        # Ejemplo usando OpenAI
├── Test_hugginFace_endpoint.py    # Ejemplo usando Hugging Face Endpoint
├── prompts_SQ_rules.json          # Reglas de refactorización por issue
├── sonarQube/                     # Módulo de análisis con SonarQube
├── .env                           # Variables de entorno
└── README.md

Requisitos

  • Python 3.9+

  • SonarQube corriendo localmente o remoto

  • Acceso a algún proveedor de modelos:

    • OpenAI
    • Anthropic
    • Google GenAI
    • Hugging Face Endpoint

Instalar dependencias:

pip install requests python-dotenv langchain

Variables de entorno

Crear un archivo .env:

OPENAI_API_KEY=tu_api_key
HF=tu_token_huggingface

Uso básico

1. Analizar código con SonarQube

El flujo de la herramienta requiere como entrada el análisis del código mediante SonarQube, es posible utilizar el código en sonarQube/ para llevar acabo dicho análisis, este código supone que existe un despliegue de SonarQube server en local.

from sonarQube.analyzer import Analyzer

analyzer = Analyzer(
    token="TU_TOKEN",
    url_host="http://localhost:9000",
)

analysis, errors = analyzer.analyze(code)

2. Seleccionar una issue

issue = None

for i in analysis:
    if i.get('rule') == "java:S117":
        issue = i
        break

3. Refactorizar el código

from refactorization_ayesa import refactorize

result = refactorize(
    provider="openai",          # o huggingface_endpoint, anthropic, google_genai
    model_name="gpt-4.1",
    key=API_KEY,
    code=code,
    issue=issue
)

print(result)

Proveedores soportados

OpenAI


Hugging Face Endpoint (SLM propio)

provider="huggingface_endpoint"
model_name="https://<endpoint-url>"

El uso de Hugging Face Endpoint requiere el despliegue previo del modelo.

Anthropic


Google GenAI


Cómo funciona el prompt

El sistema genera automáticamente un prompt con:

  • Localización del problema (línea o rango)
  • Descripción de la regla SonarQube
  • Reglas estrictas (HARD RULES)
  • Código original
  • Instrucción de devolver solo código Java

Ejemplo simplificado:

### Instructions:
Rewrite the code to fix the problem...

### HARD RULES:
- Preserve package
- One single Java file
- No extra imports

### Problem:
...

### Original code:
```java
...

Corrected code:


---

## Ejemplos incluidos

### `Test_refactorization.py`
- Usa OpenAI (`gpt-4.1`)
- Flujo completo SonarQube → LLM

### `Test_hugginFace_endpoint.py`
- Usa un modelo desplegado en Hugging Face
- Ideal para modelos finamente ajustados (SLM)

---

## Consideraciones importantes

- El modelo **debe devolver solo código Java**.
- El endpoint de Hugging Face debe estar **desplegado previamente**.
- Un `max_new_tokens` muy alto puede causar errores de memoria.
- El archivo `prompts_SQ_rules.json` debe contener las reglas por cada issue.



About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages