Add Bundle Graph visualization view to bndtools Eclipse plugin#7106
Open
Add Bundle Graph visualization view to bndtools Eclipse plugin#7106
Conversation
Copilot
AI
changed the title
[WIP] Add Bundle Graph visualization feature to bndtools
Add Bundle Graph view for visualizing OSGi bundle dependencies in bndtools
Feb 20, 2026
Copilot
AI
changed the title
Add Bundle Graph view for visualizing OSGi bundle dependencies in bndtools
Bundle Graph: compute dependency edges from JAR manifest Import/Export-Package headers
Feb 20, 2026
Copilot
AI
changed the title
Bundle Graph: compute dependency edges from JAR manifest Import/Export-Package headers
Add Bundle Graph view for visualizing OSGi bundle dependencies in bndtools
Feb 21, 2026
Copilot
AI
changed the title
Add Bundle Graph view for visualizing OSGi bundle dependencies in bndtools
Add Bundle Graph visualization for OSGi bundle dependencies in bndtools
Feb 21, 2026
Copilot
AI
changed the title
Add Bundle Graph visualization for OSGi bundle dependencies in bndtools
bndtools Bundle Graph view: new feature
Feb 21, 2026
Copilot
AI
changed the title
bndtools Bundle Graph view: new feature
bndtools: Add Bundle Graph view for visualizing OSGi bundle dependencies
Feb 22, 2026
b140277 to
2564eec
Compare
Copilot
AI
changed the title
bndtools: Add Bundle Graph view for visualizing OSGi bundle dependencies
bndtools: Add Bundle Graph view for OSGi bundle dependency visualization
Feb 22, 2026
Add manifest-based dependency calculation to Bundle Graph view Signed-off-by: Christoph Rueger <chrisrueger@gmail.com> Co-Authored-By: chrisrueger <188422+chrisrueger@users.noreply.github.com>
6c2f2e6 to
99e27e2
Compare
Co-authored-by: chrisrueger <188422+chrisrueger@users.noreply.github.com>
Contributor
|
@kriegfrj thanks for the suggestion. Bundle edges which came to existence solely on
If there is at least one non-optional import, then it is considered mandatory. Now there is a dropdown where you can choose between 3 options:
|
…node Co-authored-by: chrisrueger <188422+chrisrueger@users.noreply.github.com>
Copilot
AI
changed the title
Bundle Graph: EdgeFilter combo, optional edge styling, and disconnected-node hiding
Add Bundle Graph visualization to bndtools (Eclipse view for OSGi bundle dependencies)
Feb 23, 2026
…phModel Co-authored-by: chrisrueger <188422+chrisrueger@users.noreply.github.com>
Co-authored-by: chrisrueger <188422+chrisrueger@users.noreply.github.com>
Copilot
AI
changed the title
Add Bundle Graph visualization to bndtools (Eclipse view for OSGi bundle dependencies)
Add Bundle Graph visualization view to bndtools Eclipse plugin
Feb 23, 2026
Expose and display origin sources for bundle graphs and update UI labels. Added a sources() API to BundleGraphModel and extended SimpleBundleGraphModel to store a List<String> of sources with updated constructors. Project/Repository/Bndrun universe providers now pass source names to the model. BundleGraphView now shows origin + shortened sources in the label (with a tooltip for full text), updates the part name, and includes a helper to shorten long source strings. Also initialize the view selection with all model nodes, and rename the view title in plugin.xml from "Bundle Graph" to "Graph". Signed-off-by: Christoph Rueger <chrisrueger@gmail.com>
… lists Co-authored-by: chrisrueger <188422+chrisrueger@users.noreply.github.com>
…es are shared Co-authored-by: chrisrueger <188422+chrisrueger@users.noreply.github.com>
Copilot
AI
changed the title
Add Bundle Graph visualization view to bndtools Eclipse plugin
Add Bundle Graph visualization to bndtools Eclipse plugin
Feb 23, 2026
Co-authored-by: chrisrueger <188422+chrisrueger@users.noreply.github.com>
Copilot
AI
changed the title
Add Bundle Graph visualization to bndtools Eclipse plugin
Add Bundle Graph view to bndtools: visualize workspace/repository bundle dependencies
Feb 23, 2026
Co-authored-by: chrisrueger <188422+chrisrueger@users.noreply.github.com>
Copilot
AI
changed the title
Add Bundle Graph view to bndtools: visualize workspace/repository bundle dependencies
Add Bundle Graph visualization view to bndtools Eclipse plugin
Feb 23, 2026
…bundles list Co-authored-by: chrisrueger <188422+chrisrueger@users.noreply.github.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.


Adds a new Bundle Graph Eclipse ViewPart that renders a Mermaid dependency graph of OSGi bundles in a bndtools workspace, with an interactive dual-list selection UI and multiple universe loading strategies.
Model layer (
bndtools.views.bundlegraph.model)BundleNode(bsn, version, projectName)— canonical identity onbsn+versiononly (projectNameis display metadata;equals/hashCodedeliberately exclude it so repo-loaded and project-loaded nodes of the same bundle match)BundleEdge(from, to, boolean optional)— edge with optionality flag;optional=trueiff allImport-Packageentries that create that edge carryresolution:=optionalBundleGraphModelinterface:nodes(),edges(),dependenciesOf(),dependantsOf(),origin()SimpleBundleGraphModel— in-memory implementation; 2-arg constructors delegate to 3-arg(nodes, edges, origin)for backward compatGraphClosures— BFS transitive closure for dependency/dependant expansionDependency calculator (
ManifestDependencyCalculator)Reads
Import-Package/Export-Packagefrom JAR manifests viaaQute.bnd.osgi.Jar.getManifest()+aQute.bnd.osgi.Domain:Map<BundleNode, File>→Set<BundleEdge>with per-edge optionality trackingUniverse providers
ProjectUniverseProviderList<IProject>Projects: p1, p2BndrunUniverseProvider.bndrunIFileBndrun: file.bndrunRepositoryUniverseProviderList<RepositoryPlugin>Repositories: r1, r2"Add from Repositories" is additive — merges into the existing universe without replacing it.
Renderer (
MermaidRenderer)EdgeFilterenum (ALL/ONLY_MANDATORY/ONLY_OPTIONAL) filters edges at render time; when a non-ALLfilter is active, nodes with no visible edges are hidden, and secondary↔secondary edges not touching any primary node are suppressed.View (
BundleGraphView)SashFormvertical split: selection panel (top, collapsible via toolbar toggle) + browser (bottom)Deletekey removes selected nodes from universeCtrl/Cmd+Ccopies BSNs to clipboard−/+buttons + percentage combo; browser wraps Mermaid SVG in a scrollabletransform: scale()containerSupplier<BundleGraphModel>and retains still-valid selected nodesallowMultiple="true"inplugin.xmlso multiple graph sessions can be open simultaneously; each invocation gets a unique secondary IDmermaid.min.jsv11.12.3 (MIT) loaded viaFileLocator— no CDN required; falls back to CDN with a warning if the bundle entry is missingDrag and drop
Both "Available bundles" and "Selected input bundles" lists accept drops from:
.bndrunfiles → extracts-runbundles, resolves JAR, computes edgesIProjectresources →ProjectUniverseProviderRepositoryBundle/RepositoryBundleVersion/RepositoryPluginfrom the bndtools Repositories view → resolves latest version, downloads JAR, computes edgesPlugin contributions (
plugin.xml)bndtools.views.BundleGraphView, categorybndtoolsbndtools.commands.showBundleGraph+ handlerShowBundleGraphHandler.bndrunfiles andIProjectresourcesTests
GraphClosuresTest— BFS closure correctness including cross-providerBundleNodeidentityMermaidRendererTest— all edge filter modes, primary/secondary styling, optional edge rendering, node hidingManifestDependencyCalculatorTest— edge derivation from manifests, optionality trackingWarning
Firewall rules blocked me from connecting to one or more addresses (expand for details)
I tried to connect to the following addresses, but was blocked by firewall rules:
bndtools.jfrog.io/usr/lib/jvm/temurin-17-jdk-amd64/bin/java /usr/lib/jvm/temurin-17-jdk-amd64/bin/java --add-opens=java.base/java.lang=ALL-UNNAMED --add-opens=java.base/java.lang.invoke=ALL-UNNAMED --add-opens=java.base/java.util=ALL-UNNAMED --add-opens=java.prefs/java.util.prefs=ALL-UNNAMED --add-exports=jdk.compiler/com.sun.tools.javac.api=ALL-UNNAMED --add-exports=jdk.compiler/com.sun.tools.javac.util=ALL-UNNAMED --add-opens=java.base/java.util=ALL-UNNAMED --add-opens=java.prefs/java.util.prefs=ALL-UNNAMED --add-opens=java.base/java.nio.charset=ALL-UNNAMED --add-opens=java.base/java.net=ALL-UNNAMED --add-opens=java.base/java.util.concurrent=ALL-UNNAMED --add-opens=java.base/java.util.concurrent.atomic=ALL-UNNAMED --add-opens=java.xml/javax.xml.namespace=ALL-UNNAMED --add-opens=java.base/java.time=ALL-UNNAMED -Xms1024m -Xmx2048m -Dfile.encoding=UTF-8 -Duser.country -Duser.language=en(dns block)scans-in.gradle.com/usr/lib/jvm/temurin-17-jdk-amd64/bin/java /usr/lib/jvm/temurin-17-jdk-amd64/bin/java --add-opens=java.base/java.lang=ALL-UNNAMED --add-opens=java.base/java.lang.invoke=ALL-UNNAMED --add-opens=java.base/java.util=ALL-UNNAMED --add-opens=java.prefs/java.util.prefs=ALL-UNNAMED --add-exports=jdk.compiler/com.sun.tools.javac.api=ALL-UNNAMED --add-exports=jdk.compiler/com.sun.tools.javac.util=ALL-UNNAMED --add-opens=java.base/java.util=ALL-UNNAMED --add-opens=java.prefs/java.util.prefs=ALL-UNNAMED --add-opens=java.base/java.nio.charset=ALL-UNNAMED --add-opens=java.base/java.net=ALL-UNNAMED --add-opens=java.base/java.util.concurrent=ALL-UNNAMED --add-opens=java.base/java.util.concurrent.atomic=ALL-UNNAMED --add-opens=java.xml/javax.xml.namespace=ALL-UNNAMED --add-opens=java.base/java.time=ALL-UNNAMED -Xms1024m -Xmx2048m -Dfile.encoding=UTF-8 -Duser.country -Duser.language=en(dns block)If you need me to access, download, or install something from one of these locations, you can either:
🔒 GitHub Advanced Security automatically protects Copilot coding agent pull requests. You can protect all pull requests by enabling Advanced Security for your repositories. Learn more about Advanced Security.