16 KiB
REFAC-INDEX-C1a : inventaire des fonctions C++ et graphe d'appels (lecture seule)
Fiche C1a, relevé du 2026-10-15. Aucune écriture dans le code, aucun build, aucun éditeur, aucun MCP, aucun git qui écrit. Outil : refac.py (scratchpad de session), analyse lexicale.
Livrables : REFAC-FONCTIONS.csv, REFAC-APPELS.csv (séparateur ;, UTF-8), REFAC-SANS-APPELANT.csv (complément, liste complète des fonctions sans appelant interne avec la réserve), ce fichier.
1. Comptes bruts
| Mesure | Valeur | Preuve |
|---|---|---|
Fichiers .h/.cpp/.inl suivis analysés |
176 | git ls-files des deux dépôts, filtre de périmètre, hors fichiers modifiés ou non suivis |
| Fichiers contenant au moins une définition | 97 | script |
| Définitions de fonctions | 1011 | établi pour le comptage par le script, voir § 6 et § 7 |
| UFUNCTION exposées au Blueprint (définies) | 30 | estimé : drapeau lu sur la déclaration d'en-tête |
| Fonctions statiques | 67 | |
| Tick / TickComponent | 17 | |
| Arêtes d'appel (sites d'appel) | 12256 | |
| dont internes (cible dans l'inventaire) | 3169 | estimé |
| dont moteur (cible hors inventaire) | 9087 | estimé : inclut constructeurs, macros non reconnues, fonctions libres du moteur |
| dont internes ambiguës (nom partagé par plusieurs classes) | 1210 | colonne ambigu=oui |
Par module (définitions) :
| Module | Définitions |
|---|---|
| LifePlay | 485 |
| LPSandbox | 132 |
| StreetMapRuntime | 93 |
| LPModTools | 82 |
| LPAnimMeasure | 77 |
| LifePlayEditorTools | 68 |
| StreetMapImporting | 43 |
| LPAnimCore | 31 |
2. Les 15 fonctions les plus appelées (appels internes non ambigus)
| # | Classe::Fonction | Sites d'appel |
|---|---|---|
| 1 | FStreetMapNode::GetLocation |
70 |
| 2 | At |
61 |
| 3 | IndexOf |
60 |
| 4 | Live |
34 |
| 5 | BoneOf |
31 |
| 6 | FWhoEval::Bool |
28 |
| 7 | SandboxCfgReadString |
27 |
| 8 | TintBrush |
23 |
| 9 | FLPSkeletonProfile::Bone |
23 |
| 10 | PromptState |
22 |
| 11 | FEditor::Link |
21 |
| 12 | Direction |
17 |
| 13 | FWhoEval::Eat |
17 |
| 14 | Append |
16 |
| 15 | Intern |
16 |
3. Fonctions sans appelant interne (candidates à code mort)
Total sans aucune arête entrante interne (ambiguës comptées pour toutes leurs classes candidates) : 364 sur 1011. Sans réserve de cycle de vie ni d'exposition : 176 ; les autres (188) portent une réserve (colonne reserve_moteur_ou_blueprint du CSV complémentaire).
Réserve forte : une UFUNCTION, un virtual/override, un Tick, un constructeur, un cycle de vie moteur ou un _Implementation est appelé par le moteur, un Blueprint ou une réflexion, jamais visible dans ce graphe. Même une fonction « sans réserve » peut être appelée par un Blueprint (hors périmètre), un commandlet via nom de chaîne, un délégué lié par AddDynamic/BindUObject (le nom n'est pas suivi d'une parenthèse) ou depuis un fichier non suivi/modifié. Aucune n'est à supprimer sur cette seule liste.
Les 60 premières sans réserve (ordre module, fichier) :
| Module | Fichier:ligne | Classe::Fonction |
|---|---|---|
| LPAnimCore | Plugins/LPAnimCore/Source/LPAnimCore/LPAnimRedirect.cpp:21 |
::SetUALRoot |
| LPAnimCore | Plugins/LPAnimCore/Source/LPAnimCore/LPAnimRedirect.cpp:34 |
::IsGameTarget |
| LPAnimCore | Plugins/LPAnimCore/Source/LPAnimCore/LPAnimRedirect.cpp:52 |
::SetBodyRoot |
| LPAnimCore | Plugins/LPAnimCore/Source/LPAnimCore/LPAnimRedirect.cpp:57 |
::BodyClipPath |
| LPAnimCore | Plugins/LPAnimCore/Source/LPAnimCore/LPCoupleSim.h:185 |
FSweepOptions::Sandbox |
| LPAnimCore | Plugins/LPAnimCore/Source/LPAnimCore/LPCoupleSimCore.cpp:20 |
::MeshToActor |
| LPAnimCore | Plugins/LPAnimCore/Source/LPAnimCore/LPCoupleSimCore.cpp:60 |
::FitFromAnimBounds |
| LPAnimCore | Plugins/LPAnimCore/Source/LPAnimCore/LPCoupleSimCore.cpp:80 |
::FitFromLiveBounds |
| LPAnimCore | Plugins/LPAnimCore/Source/LPAnimCore/LPCoupleSimCore.cpp:106 |
::CapsuleHalfOf |
| LPAnimCore | Plugins/LPAnimCore/Source/LPAnimCore/LPCoupleSimCore.cpp:112 |
::AccumulateAnimBounds |
| LPAnimCore | Plugins/LPAnimCore/Source/LPAnimCore/LPCoupleSimCore.cpp:178 |
::AccumulateLiveBody |
| LPAnimCore | Plugins/LPAnimCore/Source/LPAnimCore/LPCoupleSimCore.cpp:223 |
::EnsureBox |
| LPAnimCore | Plugins/LPAnimCore/Source/LPAnimCore/LPCoupleSimCore.cpp:245 |
::ApplyBoxFit |
| LPAnimCore | Plugins/LPAnimCore/Source/LPAnimCore/LPCoupleSimCore.cpp:256 |
::PlaceBodyMesh |
| LPAnimCore | Plugins/LPAnimCore/Source/LPAnimCore/LPCoupleSimCore.cpp:265 |
::SaveAndFreeze |
| LPAnimCore | Plugins/LPAnimCore/Source/LPAnimCore/LPCoupleSimCore.cpp:283 |
::RestoreMove |
| LPAnimCore | Plugins/LPAnimCore/Source/LPAnimCore/LPCoupleSimCore.cpp:294 |
::AttachPartner |
| LPAnimCore | Plugins/LPAnimCore/Source/LPAnimCore/LPCoupleSimCore.cpp:308 |
::Unweld |
| LPAnimCore | Plugins/LPAnimCore/Source/LPAnimCore/LPCoupleSimCore.cpp:431 |
::ResolveCoupleMove |
| LPAnimMeasure | Plugins/LPSandbox/Source/LPAnimMeasure/LPAnimMeasurePaths.cpp:25 |
::ToolsAnimDir |
| LPAnimMeasure | Plugins/LPSandbox/Source/LPAnimMeasure/LPPoseMeasure.cpp:57 |
::SetMethod |
| LPAnimMeasure | Plugins/LPSandbox/Source/LPAnimMeasure/LPPoseMeasure.cpp:83 |
::MethodForProfile |
| LPAnimMeasure | Plugins/LPSandbox/Source/LPAnimMeasure/LPPoseMeasure.cpp:979 |
::TPoses |
| LPAnimMeasure | Plugins/LPSandbox/Source/LPAnimMeasure/LPPoseMeasure.cpp:995 |
::TFitResult |
| LPAnimMeasure | Plugins/LPSandbox/Source/LPAnimMeasure/LPPoseMeasure.cpp:1014 |
::TFitReport |
| LPAnimMeasure | Plugins/LPSandbox/Source/LPAnimMeasure/LPPoseMeasure.cpp:1023 |
::WriteRetargetPose |
| LPAnimMeasure | Plugins/LPSandbox/Source/LPAnimMeasure/LPPoseMeasure.cpp:1161 |
::TransferPose |
| LPAnimMeasure | Plugins/LPSandbox/Source/LPAnimMeasure/LPPoseMeasure.cpp:1263 |
::Sample |
| LPAnimMeasure | Plugins/LPSandbox/Source/LPAnimMeasure/LPPoseMeasure.cpp:1449 |
::AlignToReference |
| LPAnimMeasure | Plugins/LPSandbox/Source/LPAnimMeasure/LPPoseMeasure.cpp:1474 |
::FormatPassage |
| LPAnimMeasure | Plugins/LPSandbox/Source/LPAnimMeasure/LPPoseMeasure.cpp:1487 |
::FormatKept |
| LPAnimMeasure | Plugins/LPSandbox/Source/LPAnimMeasure/LPPoseMeasure.cpp:1503 |
::FormatSnapshot |
| LPAnimMeasure | Plugins/LPSandbox/Source/LPAnimMeasure/LPPoseMeasure.cpp:1618 |
::KeyBones |
| LPAnimMeasure | Plugins/LPSandbox/Source/LPAnimMeasure/LPPoseMeasure.cpp:1634 |
::LogReport |
| LPAnimMeasure | Plugins/LPSandbox/Source/LPAnimMeasure/LPPoseOrchestrator.cpp:230 |
::SampleAt |
| LPAnimMeasure | Plugins/LPSandbox/Source/LPAnimMeasure/LPPoseOrchestrator.cpp:249 |
::Restore |
| LPAnimMeasure | Plugins/LPSandbox/Source/LPAnimMeasure/LPSkeletonProfile.cpp:129 |
::Identify |
| LPAnimMeasure | Plugins/LPSandbox/Source/LPAnimMeasure/LPSkeletonProfile.h:29 |
FLPSkeletonProfile::Has |
| LPModTools | Plugins/LPSandbox/Source/LPModTools/LPAnimChecks.cpp:162 |
::TrunkCapsules |
| LPModTools | Plugins/LPSandbox/Source/LPModTools/LPAnimChecks.cpp:210 |
::SelfTest |
| LPModTools | Plugins/LPSandbox/Source/LPModTools/LPAnimChecks.cpp:226 |
::CheckClip |
| LPSandbox | Plugins/LPSandbox/Source/LPSandbox/LPSandboxActionVM.cpp:46 |
::MakePerson |
| LPSandbox | Plugins/LPSandbox/Source/LPSandbox/LPSandboxActionVM.cpp:517 |
::LoadActions |
| LPSandbox | Plugins/LPSandbox/Source/LPSandbox/LPSandboxActionVM.cpp:586 |
::ReadInteractKey |
| LPSandbox | Plugins/LPSandbox/Source/LPSandbox/LPSandboxActionVM.cpp:627 |
::CollectActions |
| LPSandbox | Plugins/LPSandbox/Source/LPSandbox/LPSandboxCamera.cpp:50 |
FLPSandboxCamera::ResetView |
| LPSandbox | Plugins/LPSandbox/Source/LPSandbox/LPSandboxInteraction.cpp:147 |
ULPSandboxInteractionMod::BuildPanel |
| LPSandbox | Plugins/LPSandbox/Source/LPSandbox/LPSandboxInteraction.cpp:164 |
ULPSandboxInteractionMod::TickInput |
| LPSandbox | Plugins/LPSandbox/Source/LPSandbox/LPSandboxInteraction.cpp:261 |
ULPSandboxInteractionMod::OnFellOff |
| LPSandbox | Plugins/LPSandbox/Source/LPSandbox/LPSandboxInteraction.cpp:267 |
ULPSandboxInteractionMod::OnBodyChanged |
| LPSandbox | Plugins/LPSandbox/Source/LPSandbox/LPSandboxMeasure.cpp:689 |
ULPSandboxMeasureMod::BuildPanel |
| LPSandbox | Plugins/LPSandbox/Source/LPSandbox/LPSandboxMeasure.cpp:837 |
ULPSandboxMeasureMod::TickInput |
| LPSandbox | Plugins/LPSandbox/Source/LPSandbox/LPSandboxMeasureMod.h:51 |
ULPSandboxMeasureMod::OnFellOff |
| LPSandbox | Plugins/LPSandbox/Source/LPSandbox/LPSandboxMeasureMod.h:53 |
ULPSandboxMeasureMod::OnBodyChanged |
| LPSandbox | Plugins/LPSandbox/Source/LPSandbox/LPSandboxMeasureTour.cpp:571 |
ULPSandboxMeasureMod::SaveVignette |
| LPSandbox | Plugins/LPSandbox/Source/LPSandbox/LPSandboxMeasureTour.cpp:611 |
ULPSandboxMeasureMod::SavePlancheFrame |
| LPSandbox | Plugins/LPSandbox/Source/LPSandbox/LPSandboxModRegistry.cpp:64 |
::SettingsPath |
| LPSandbox | Plugins/LPSandbox/Source/LPSandbox/LPSandboxModRegistry.cpp:76 |
FLPSandboxModRegistry::RegisterFactory |
| LPSandbox | Plugins/LPSandbox/Source/LPSandbox/LPSandboxModRegistry.cpp:589 |
FLPSandboxModRegistry::SetEnabled |
| LPSandbox | Plugins/LPSandbox/Source/LPSandbox/LPSandboxModRegistry.cpp:614 |
FLPSandboxModRegistry::Move |
Liste complète : REFAC-SANS-APPELANT.csv (364 lignes).
4. Les 20 fonctions les plus longues (lignes, accolades comprises)
| # | Lignes | Fichier:ligne | Classe::Fonction |
|---|---|---|---|
| 1 | 622 | Plugins/StreetMap/Source/StreetMapImporting/StreetMapFactory.cpp:49 |
UStreetMapFactory::LoadFromOpenStreetMapXMLFile |
| 2 | 348 | Plugins/LPSandbox/Source/LPSandbox/LPSandboxMeasure.cpp:106 |
ULPSandboxMeasureMod::BeginMeasure |
| 3 | 337 | Source/LifePlay/LPCameraModeSubsystem.cpp:1389 |
ULPCameraModeSubsystem::TickCoupleMouse |
| 4 | 332 | Plugins/StreetMap/Source/StreetMapImporting/OSMFile.cpp:128 |
FOSMFile::ProcessAttribute |
| 5 | 322 | Plugins/StreetMap/Source/StreetMapRuntime/StreetMapComponent.cpp:206 |
UStreetMapComponent::GenerateMesh |
| 6 | 314 | Source/LifePlayEditorTools/LPPairCollisionTestCommandlet.cpp:206 |
ULPPairCollisionTestCommandlet::Main |
| 7 | 302 | Plugins/LPSandbox/Source/LPModTools/LPAuditBlueprintCallsCommandlet.cpp:677 |
ULPAuditBlueprintCallsCommandlet::Main |
| 8 | 298 | Plugins/LPSandbox/Source/LPModTools/LPAnimEvalCommandlet.cpp:253 |
ULPAnimEvalCommandlet::Main |
| 9 | 260 | Plugins/LPSandbox/Source/LPModTools/LPHairFromStaticMeshCommandlet.cpp:203 |
ULPHairFromStaticMeshCommandlet::Main |
| 10 | 254 | Source/LifePlayEditorTools/LPTitleModManagerCommandlet.cpp:150 |
ULPTitleModManagerCommandlet::Main |
| 11 | 251 | Source/LifePlay/LPDebugSubsystem.cpp:339 |
::WritePersonsDump |
| 12 | 235 | Source/LifePlay/LPModGuard.cpp:244 |
FLPModGuard::Run |
| 13 | 206 | Plugins/LPSandbox/Source/LPAnimMeasure/LPPoseOrchestrator.cpp:281 |
::Run |
| 14 | 198 | Source/LifePlay/LPOutdoorRoomSubsystem.cpp:346 |
ULPOutdoorRoomSubsystem::LiftSunkPersons |
| 15 | 192 | Source/LifePlay/LPSettingsSubsystem.cpp:562 |
ULPSettingsSubsystem::PlaceSettingsButton |
| 16 | 184 | Source/LifePlay/LPHairstyleSubsystem.cpp:429 |
ULPHairstyleSubsystem::Sync |
| 17 | 171 | Plugins/LPSandbox/Source/LPSandbox/LPSandboxModRegistry.cpp:304 |
FLPSandboxModRegistry::Evaluate |
| 18 | 169 | Source/LifePlayEditorTools/LPEditWidgetCommandlet.cpp:72 |
ULPEditWidgetCommandlet::Main |
| 19 | 167 | Source/LifePlay/LPDirectControlSubsystem.cpp:1072 |
ULPDirectControlSubsystem::FitPersonBounds |
| 20 | 167 | Plugins/LPSandbox/Source/LPAnimMeasure/LPPoseMeasure.cpp:212 |
::TablesFor |
(Longueur = ligne de fermeture moins ligne du nom + 1 ; commentaires et lignes vides inclus.)
5. Fichiers de l'addon modifiés ou non suivis, non analysés (16)
Relevé git status --porcelain -uall dans D:\Game\LifePlay-Sandbox-5.8 (et dans le jeu : aucun fichier source concerné), filtré sur Plugins/LPSandbox/Source/*.{h,cpp,inl}. Ces fichiers sont absents de l'inventaire : leurs fonctions et leurs appels manquent donc aussi au graphe (le module LPSandbox est sous-compté).
| Statut | Fichier |
|---|---|
M |
Plugins/LPSandbox/Source/LPSandbox/LPPairSandbox.cpp |
M |
Plugins/LPSandbox/Source/LPSandbox/LPPairSandbox.h |
M |
Plugins/LPSandbox/Source/LPSandbox/LPPairSandboxMenu.h |
M |
Plugins/LPSandbox/Source/LPSandbox/LPSandboxActors.cpp |
M |
Plugins/LPSandbox/Source/LPSandbox/LPSandboxActors.h |
?? |
Plugins/LPSandbox/Source/LPSandbox/LPSandboxCharGenMod.cpp |
?? |
Plugins/LPSandbox/Source/LPSandbox/LPSandboxCharGenMod.h |
M |
Plugins/LPSandbox/Source/LPSandbox/LPSandboxCoupleMod.cpp |
M |
Plugins/LPSandbox/Source/LPSandbox/LPSandboxCoupleMod.h |
M |
Plugins/LPSandbox/Source/LPSandbox/LPSandboxMod.h |
M |
Plugins/LPSandbox/Source/LPSandbox/LPSandboxModWrappers.cpp |
M |
Plugins/LPSandbox/Source/LPSandbox/LPSandboxScene.cpp |
M |
Plugins/LPSandbox/Source/LPSandbox/LPSandboxScene.h |
M |
Plugins/LPSandbox/Source/LPSandbox/LPSandboxSidebar.cpp |
?? |
Plugins/LPSandbox/Source/LPSandbox/LPSandboxStage.cpp |
?? |
Plugins/LPSandbox/Source/LPSandbox/LPSandboxStage.h |
6. Limites de la méthode
- Analyse lexicale sur le texte nettoyé (commentaires, chaînes et lignes
#blanchis) : aucun préprocesseur, aucune résolution de types, aucun modèle. - Branches
#if/#else: les deux branches sont lues ; une fonction définie dans les deux est comptée deux fois, et des accolades déséquilibrées entre branches peuvent fausser une portée (aucun contrôle d'équilibre n'est fait fichier par fichier). - Définitions écrites par macro (
DEFINE_FUNCTION,DECLARE_*,IMPLEMENT_*) ou lambdas de portée globale : non comptées. Une initialisation par accolades dans l'en-tête d'un constructeur (: A{x}) peut faire manquer cette fonction. - Appels
->F(et.F(: rattachés par le nom seul à toutes les classes qui définissentF;ambigu=ouisi plusieurs classes, ou si le nom figure dans une liste de noms courants du moteur (Add,Contains,GetName,Num,Sort,Run… 28 noms, liste dansrefac.py), ou si toutes les définitions internes du nom sont statiques (un appel par./->vise alors presque sûrement le moteur). Les arêtes ambiguës sont exclues du classement du § 2 mais comptées comme entrantes au § 3. Les autres noms qui coïncident avec ceux du moteur restent de faux internes possibles. La colonneappelé_classed'une arête ambiguë liste les candidates séparées par|. - Appels sans qualificatif : résolus dans la classe de l'appelant et ses bases connues (héritage lu sur la déclaration
class X : public Y), puis dans les fonctions libres ; un appel hérité d'une classe du moteur est « moteur ». - Appels
Classe::F(: interne seulement si le couple est défini dans l'inventaire ; sinon moteur. Les appels par délégué, par nom de chaîne (FindFunction,ProcessEvent), par Blueprint ou parTFunctionne sont pas vus. Une déclarationType Nom(args)est écartée par heuristique et peut être prise à tort pour un appel (ou l'inverse). ufunction_bp,statiqueetvirtual/overrided'une définition.cppsont lus sur la déclaration de l'en-tête (clé classe+nom, surcharges fusionnées par OU) : une surcharge non exposée peut hériter de l'exposition d'une sœur.- Périmètre :
Source/,Plugins/StreetMap/Source,Plugins/LPAnimCore/Sourcedu jeu ;Plugins/LPSandbox/Sourcede l'addon. Exclus :Plugins/ModdingExtra,Source/LPSandboxAppde l'addon, les.cs, les fichiers non suivis ou modifiés. - Aucun lien avec les Blueprints : une fonction « sans appelant » peut être appelée par un graphe Blueprint (voir OBA-T23 et la cartographie des nœuds).
7. Niveaux de preuve
| Énoncé | Niveau |
|---|---|
| Liste des fichiers du périmètre et fichiers modifiés de l'addon | établi (sortie git) |
| Nombre de définitions, leur fichier et leur ligne | estimé : script validé à la main sur 3 fichiers (voir le compte rendu), pas de comparaison à un analyseur de compilateur |
Exposition Blueprint (ufunction_bp), statique |
estimé |
| Arêtes internes non ambiguës | estimé (nom + classe de l'appelant, sans types) |
| Arêtes ambiguës, arêtes moteur | incertain |
| « Sans appelant » = code mort | incertain, jamais établi sur ce seul graphe |
| Longueurs de fonctions | estimé (dépend de la détection de portée) |