Contexte du Refactoring Bidji - Point de Reprise
Dernière mise à jour : 2026-02-06 Statut du projet : Phase 1 terminée ✅
🎯 Objectif Global
Refactorer le système de génération de code Bidji (BidjicTask) pour remplacer le preprocessing fragile par replaceAll() par un système robuste et maintenable.
📊 État d’Avancement
| Phase | Statut | Durée Estimée | Durée Réelle |
|---|---|---|---|
| Phase 1 : Inventaire & Documentation | ✅ TERMINÉE | 2-3 jours | ~2 heures |
| Phase 2 : Amélioration Immédiate | ⏳ À faire | 3-5 jours | - |
| Phase 3 : Nouvelle Syntaxe | 📅 Planifiée | 5-7 jours | - |
| Phase 4 : Cleanup Architectural | 📅 Planifiée | 3-5 jours | - |
✅ Ce Qui A Été Fait (Phase 1)
Fichiers Créés
-
doc/Refactoring.md(2000+ lignes)- Plan complet de refactoring en 4 phases
- Analyse critique du système actuel
- Proposition de nouvelle syntaxe
- Code d’exemple complet pour Phase 2 et 3
- Roadmap détaillée
-
doc/BidjicDirectives.md(800+ lignes)- Guide complet pour développeurs de templates
- Documentation de 49 directives avec exemples
- 4 exemples complets de génération de code
- Section “Pièges Courants”
- Guide de migration
-
doc/BidjicDirectivesReference.md(400+ lignes)- Référence technique rapide (“cheat sheet”)
- Tableaux récapitulatifs
- Ordre d’exécution par priorité
- Statistiques : 42 actives, 7 deprecated
-
doc/Phase1-Inventaire-Complete.md- Rapport détaillé de Phase 1
- Analyse des 49 directives
- Problèmes identifiés
- Recommandations pour Phase 2
-
src/test/java/org/bidji/preprocessor/BidjicPreprocessorTest.java(600+ lignes)- 60+ tests unitaires préparés
- Prêts à être activés en Phase 2
- Tests de non-régression
Connaissances Acquises
- 49 directives identifiées et documentées (42 actives + 7 deprecated)
- Problème critique : Ordre d’exécution des
replaceAll()non documenté et fragile - 7 directives deprecated à supprimer (aliases inutiles)
- Templates du projet n’utilisent pas les directives (ce sont des templates internes au framework)
- Code source problématique :
BidjicTask.freemarkerize()lignes 1003-1072
🔴 Problèmes Identifiés
Critique
freemarkerize()fragile - 60+replaceAll()sans validation, ordre implicite- Aucune validation - Directives inconnues = erreurs silencieuses
- Impossible à débugger - Pas de logs de transformation
Moyen
- 7 directives deprecated - Aliases inutiles (ex:
property?kind_of_string) - Variables statiques - Non thread-safe (
currentTask,PACKAGE,MODULE) execute2()trop long - God method de 300+ lignes
📋 Prochaines Étapes - Phase 2
Tâches Prioritaires
1. Créer BidjicPreprocessor (🔴 Haute priorité)
Fichier : src/main/java/org/bidji/preprocessor/BidjicPreprocessor.java
Contenu :
- Système de règles avec priorités explicites
- Validation automatique de l’ordre
- Logs de transformation (mode debug)
- 60+ règles documentées
Code d’exemple : Voir doc/Refactoring.md section “Phase 2.1”
Temps estimé : 1-2 jours
2. Activer les Tests (🔴 Critique)
Fichier : src/test/java/org/bidji/preprocessor/BidjicPreprocessorTest.java
Actions :
- Décommenter les 60+ tests
- Vérifier qu’ils passent tous au vert
- Ajouter tests de performance si nécessaire
Temps estimé : 0.5 jour
3. Créer TemplateValidator (🟡 Moyenne priorité)
Fichier : src/main/java/org/bidji/preprocessor/TemplateValidator.java
Contenu :
- Détection de directives inconnues
- Warnings pour directives deprecated
- Vérification erreurs communes
Code d’exemple : Voir doc/Refactoring.md section “Phase 2.2”
Temps estimé : 1 jour
4. Intégrer dans BidjicTask (🔴 Haute priorité)
Fichier : src/main/java/org/bidji/taskdefs/BidjicTask.java
Modifications :
// AVANT (ligne ~1003)
private String freemarkerize(String templateContent) {
String res = templateContent;
// 60+ replaceAll()...
return res;
}
// APRÈS
private String freemarkerize(String templateContent) {
BidjicPreprocessor preprocessor = new BidjicPreprocessor();
return preprocessor.preprocess(templateContent, verbose);
}
Temps estimé : 0.5 jour
5. Génération Auto de Doc (🟡 Moyenne priorité)
Action : Ajouter méthode printMarkdownReference() à BidjicPreprocessor
Intégration Ant :
<target name="bidji-doc-directives">
<java classname="org.bidji.preprocessor.BidjicPreprocessor">
<arg value="--markdown"/>
</java>
</target>
Temps estimé : 0.5 jour
Livrables Phase 2
-
BidjicPreprocessor.java(~300 lignes) -
TemplateValidator.java(~150 lignes) - 60+ tests au vert
- Intégration dans
BidjicTask - Documentation auto-générée
Critères de Succès Phase 2
- ✅ Tous les tests passent
- ✅ Compatibilité 100% avec système actuel (aucun breaking change)
- ✅ Logs de transformation disponibles en mode verbose
- ✅ Warnings pour directives deprecated
- ✅ Documentation auto-générée
- ✅ Performance équivalente ou meilleure
📚 Fichiers Clés à Connaître
Documentation
doc/Refactoring.md- Plan complet (LIRE EN PREMIER)doc/BidjicDirectives.md- Guide utilisateurdoc/BidjicDirectivesReference.md- Référence rapidedoc/Phase1-Inventaire-Complete.md- Rapport Phase 1doc/CONTEXTE-REFACTORING.md- Ce fichier (point de reprise)
Code Source à Modifier
-
src/main/java/org/bidji/taskdefs/BidjicTask.java(lignes 1003-1072)- Méthode
freemarkerize()à remplacer - Variables statiques à éliminer (Phase 4)
- Méthode
execute2()à décomposer (Phase 4)
- Méthode
-
src/main/java/org/bidji/util/ModelHelper.java(500+ lignes)- À séparer en classes cohésives (Phase 4)
Tests
src/test/java/org/bidji/preprocessor/BidjicPreprocessorTest.java- Tests prêts à activer en Phase 2
À Créer en Phase 2
src/main/java/org/bidji/preprocessor/BidjicPreprocessor.javasrc/main/java/org/bidji/preprocessor/TemplateValidator.java
🔑 Informations Techniques Clés
Les 49 Directives (Résumé)
| Catégorie | Nombre | Priorité | Exemples |
|---|---|---|---|
| Nested (critical order) | 4 | 100-110 | nested?entity, nested?entity.@default_sort |
| Application | 2 | 10-80 | app?entities, model?has_complex_types |
| Propriétés Entité | 5 | 65-70 | entity?properties, entity?native_properties |
| Métadonnées Entité | 9 | 45-50 | entity.@name, entity.@package |
| UI Entité | 6 | 55-60 | entity?has_detail_tabs, entity?dataform_properties |
| Relations | 4 | 50 | entity?one_to_many_properties |
| Types Propriété | 9 | 30-35 | property?type_or_string, property?dbtype |
| Attributs (deprecated) | 7 | 20 | property?kind_of_string ⚠️ |
| Widgets | 1 | 40 | widget?property |
| Debug | 2 | 5 | entity?dump, property?dump |
Ordre Critique
⚠️ nested?entity.@default_sort (priorité 110) DOIT être avant nested?entity (priorité 100)
Sinon :
// ❌ INCORRECT
"nested?entity" → transformé en "Model?api.get_entity(nested.@type)"
"nested?entity.@default_sort" → ne matche plus car déjà transformé !
// ✅ CORRECT
"nested?entity.@default_sort" → transformé d'abord
"nested?entity" → transformé ensuite
Variables Globales dans Templates
${bidji} [# Modèle racine]
${entity} [# Entité courante]
${Model} [# Nom du modèle]
${Package} [# Package extrait du chemin]
${Module} [# Module extrait du chemin]
${Model?api} [# Helper ModelHelper]
💡 Décisions Architecturales Prises
✅ Approche Retenue pour Phase 2
Preprocessing structuré avec système de règles :
- Chaque règle = Pattern + Remplacement + Description + Priorité
- Validation automatique de l’ordre au chargement de classe
- Logs optionnels pour debugging
- 100% de compatibilité backward
Alternative rejetée : Parser complet (trop complexe pour Phase 2)
✅ Approche Retenue pour Phase 3
Directives FreeMarker natives :
- Namespace clair :
bidji.entity.*,bidji.property.*,bidji.ui.* - Support dual (legacy + nouveau) pendant migration
- Validation par FreeMarker (erreurs claires)
Alternative rejetée : Garder le preprocessing éternellement
🎓 Leçons Apprises
-
Les templates internes n’utilisent pas les directives
- Bidji est un framework, les directives sont pour les utilisateurs
- Impossible d’analyser l’usage réel sans templates externes
-
Le preprocessing est plus fragile que prévu
- 60+ replaceAll() dans un ordre implicite
- Aucune validation ni logging
- Bugs potentiels difficiles à détecter
-
Les directives sont bien conçues conceptuellement
- Nommage cohérent
- Séparation
?(query) vs.@(attribut) - Bonne base pour nouvelle syntaxe
🚀 Comment Reprendre
Si vous reprenez demain
- Relire ce fichier (
CONTEXTE-REFACTORING.md) - Consulter
doc/Refactoring.mdsection “Phase 2” - Commencer par créer
BidjicPreprocessor.java
Si vous reprenez dans 1 semaine
- Lire
doc/Refactoring.mden entier (rappel du contexte) - Lire
doc/Phase1-Inventaire-Complete.md(ce qui a été fait) - Relire ce fichier (
CONTEXTE-REFACTORING.md) - Consulter le code existant :
BidjicTask.freemarkerize()
Si vous reprenez dans 1 mois
- Lire
doc/BidjicDirectives.md(comprendre les directives) - Lire
doc/Refactoring.mdsections 1-2 (problème + plan) - Lire
doc/Phase1-Inventaire-Complete.md(travail fait) - Examiner
BidjicPreprocessorTest.java(tests préparés)
📞 Questions Fréquentes
Q: Les tests sont-ils utilisables maintenant ?
R: Non, ils sont commentés car BidjicPreprocessor n’existe pas encore. À activer en Phase 2.
Q: Peut-on sauter la Phase 2 et aller direct en Phase 3 ?
R: Non recommandé. Phase 2 = sécurité avec tests. Phase 3 = changement majeur.
Q: Les directives deprecated peuvent-elles être supprimées maintenant ?
R: Non. Les marquer deprecated en Phase 2, supprimer en Phase 3+ après migration utilisateurs.
Q: Le code actuel continue-t-il de fonctionner ?
R: Oui, Phase 1 = documentation uniquement, aucun changement de code.
Q: Combien de temps pour finir le refactoring complet ?
R:
- Phase 2 : 3-5 jours (amélioration immédiate)
- Phase 3 : 5-7 jours (nouvelle syntaxe)
- Phase 4 : 3-5 jours (cleanup)
- Total : 11-17 jours (environ 2-3 semaines)
📝 Notes pour la Prochaine Session
Points d’Attention
- ⚠️ Ordre des règles nested est critique - bien tester
- ⚠️ Performance - benchmarker avant/après avec templates réels
- ⚠️ Compatibilité - aucun breaking change en Phase 2
- ⚠️ Tests - tous doivent passer au vert avant intégration
Quick Wins Possibles
Si peu de temps disponible, faire dans l’ordre :
- Créer
BidjicPreprocessor(1-2 jours) → Amélioration immédiate - Activer les tests (0.5 jour) → Sécurité
- Intégrer dans BidjicTask (0.5 jour) → Déploiement
Les autres tâches (TemplateValidator, doc auto) peuvent attendre.
✅ Checklist de Reprise
Avant de commencer à coder Phase 2 :
- J’ai lu
CONTEXTE-REFACTORING.md(ce fichier) - J’ai consulté
doc/Refactoring.mdsection Phase 2 - Je comprends le problème avec
freemarkerize() - J’ai regardé le code de
BidjicPreprocessorTest.java - J’ai un environnement de dev fonctionnel (Java, Ant)
- Je peux compiler et tester le projet Bidji
- Je suis prêt à créer les classes dans
org.bidji.preprocessor
Bon courage pour la suite du refactoring ! 🚀
Contact : Voir doc/Refactoring.md pour toute question ou clarification.