@startuml
!include jb-plantuml-theme.puml

' https://www.augmentedmind.de/2021/01/17/plantuml-layout-tutorial-styles/

component "[[https://github.com/JetBrains/intellij-community/blob/master/docs/plugin.md plugin]]" as P

folder content as PluginContent {
  [module name="…" 0…N] as M
  [module name="…" N] as M_N


   M .. M_N : a sibling cannot access classes from each other\n unless specified as a dependency

  note right of M : ""content"" is not allowed and is not supported for module.

  folder dependencies as ModuleDependencies {
    (module name="…" 0…N) as MDM
    (plugin id="…" 0…N) as MDP

    note right of MDM
      The dependency is specified in a module descriptor itself in a new model,
      not where the module is referenced.
    end note

    ' force PlantUML to place `module` below of `plugin`
    MDM -[hidden]d- MDP
  }

  note bottom of ModuleDependencies
    Module dependency is always optional.
    If the module depends on an unavailable plugin, it will not be loaded.
  end note

  M .> P : a module can access classes from a containing plugin

  M -down- ModuleDependencies
}

note top of PluginContent
  Every plugin is a module, but not every module is a plugin.
  A plugin is a group of related modules and for now,
  it is the only way to distribute modules.
end note

folder dependencies as PluginDependencies {
  (module name="…" 0…N) as PDM
  (plugin id="…" 0…N) as PDP

  PDM -[hidden]d- PDP
}

note top of PluginDependencies : Same as for ""module""

P -down- PluginContent
P -down- PluginDependencies

@enduml