Based on when and what-for the plugin is applied during the analysis, plugins are categorized into different types.

Consult this diagram for an overview of orders and (implicit or explicit) dependencies:

┌───────────┐   ┌───────────────────┐   ┌─────────────┐   ┌───────────────┐   ┌───────┐
│           │   │                   │   │             │   │               │   │       │
│ *Builder* ├──▶│ Project Discovery ├──▶│ File Loader ├──▶│ Dependencies  ├──▶│ *DFA* │
│           │   │  (if necessary)   │   │             │   │   (static)    │   │       │
└───────────┘   └───────────────────┘   └──────┬──────┘   └───────────────┘   └───────┘
                                               │                                  ▲
                                               │          ┌───────────────┐       │
                                               │          │               │       │
                                               └─────────▶│ Loading Order ├───────┘
                                                          │               │
                                                          └───────────────┘

Enumeration Members

DependencyIdentification: "package-versions"

Plugins that are applied right after the builder has been created and before any analysis is done.

FlowrAnalyzerPackageVersionsPlugin - for the base class to implement such a plugin.

FileLoad: "file-load"

Plugins that are applied to load and parse files.

FlowrAnalyzerFilePlugin - for the base class to implement such a plugin.

LoadingOrder: "loading-order"

Plugins that are used to determine the order in which files are loaded and analyzed.

FlowrAnalyzerLoadingOrderPlugin - for the base class to implement such a plugin.

ProjectDiscovery: "project-discovery"

Plugins that are applied to discover the project structure, files, and folders to analyze.

FlowrAnalyzerProjectDiscoveryPlugin - for the base class to implement such a plugin.