Scabbard Versions Save

🗡 A tool to visualize Dagger 2 dependency graphs

0.5.0

2 years ago

Infra

  • Migrated processor artifacts to mavenCentral at dev.arunkumar:scabbard-processor:0.5.0 coordinate.
  • Consuming projects no longer need to add jcenter() repository.

Processor

  • Scabbard now generates images to StandardLocation.SOURCE_OUTPUT folder which is the same folder as dagger or other annotation processor generated code. This location is by default indexed by IntelliJ/Android Studio and fixes issues where gutter icons were not shown due to folder not getting indexed. The generated images also can be directly viewed under java (generated) source set in IDE.

Missing Binding Visualization.

Scabbard can add hyperlinks to generated full binding graph when Dagger's missing binding error is detected. This requires fullBindingGraphValidation to be set to true. Clicking the component name will open the full binding graph which would contain the missing binding visualization as shown below:

Dagger Hilt

  • Updated to support latest generated code changes by Hilt.
  • Fix Scabbard not working on a project when only hilt-android-compiler was applied.

Anvil support

  • Scabbard will add gutter icons to generated code for @MergeComponent and @MergeSubcomponent annotations
  • samples/kotlin-anvil added
  • No changes in gradle setup required to enable this feature.

SVG

Gutter icons now shows option to open the svg file in browser directly. From the browser, the svg file can be navigated using component hyperlinks

Dependencies

Update to Kotlin 1.5.0andDagger 2.37`

Misc

  • Improved documentation.

0.4.0

3 years ago

New

Announcement post

IntelliJ Plugin

Dagger Hilt Support

  • Gutter icons for @AndroidEntryPoint, @HiltAndroidApp and @DefineComponent.

  • Gutters Open Component Hierarchy images - see below.

Processor

Component Hierarchy support

Scabbard generates a new tree_$component.$format file that shows the component hierarchy and scopes.

  • Fixed StaticLoggerBinder". SLF4J: Defaulting to no-operation (NOP) logger implementation SLF4J: warning in build log

Gradle plugin

  • Support hilt
  • [Perf] Scabbard will lazily add required dependencies and only on projects that use dagger.
  • Support java plugin

Documentation

  • Added Maven sample. See guide here.

0.3.0

3 years ago

New

IntelliJ Plugin

  • New modern Gutter icon aligned with design of native Dagger gutter icons present in Android Studio 4.1.

  • When full binding graph validation is enabled, Scabbard generates multiple images (full and normal). Previously Gutter icon would only open the normal image, now it shows option to open the correct file as shown below:

Processor

  • @BindsInstance nodes are now rendered differently in parallelogram shape.

  • Scabbard will now show inherited bindings in a Subcomponent. This is helpful when we like to know which bindings are inherited and from which component.

  • Nodes in Entry Points will have proper styling like Scope Colors applied to them (previously only dependency graph has styling applied).

0.2.0

4 years ago

New

  • Scabbard now supports SVG output format. SVG helps in reducing file sizes and supports mild interactivity. For example, you could click on a subcomponent to navigate to it's sub graph as shown here when opened in a browser. Navigation is considered a beta and needs more work for multi-module projects.
    • SVG can be enabled by
      scabbard {
          enabled true
          outputFormat "svg" // default png
      }
      
    • All examples are updated with svgs and are interactive.
  • Support for simple names. All graphs now use simple names instead of qualified names by default.
    • To continue using qualified names:
      scabbard {
          enabled true
          qualifiedNames true // default false
      }
      
  • When full binding graph validation is used, full binding graph images are generated seperated and prefixed with full_.
  • Generated images will have flat dir structure in StandardLocation.CLASS_OUTPUT.
    • Java : build/classes/java/$sourceSet/scabbard
    • Kotlin : build/tmp/kapt3/classes/$sourceSet/scabbard

IntelliJ plugin

  • Gutter icons for @ContributesAndroidInjector. Previously when dagger.Android was used, one has to manually navigate to the generated subcomponent to view the graph. Now it is possible to directly open the generated subcomponents' graph with this new icon.
  • Intellij plugins now recognize full binding graph validation images. i.e images prefixed with full_.

Gradle plugin

  • [Breaking] Better support for Kotlin buildscripts. Previously the syntax for Kotlin scripts used to be unpleasant with closures. Now that has been refactored to below.
    • New syntax
      scabbard { // this : ScabbardPluginExtension 
          enabled = true
          failOnError = false
          outputFormat = "svg"
      }
      
    • Diff
      - scabbard.configure(closureOf<ScabbardSpec> {
      + scabbard { // this : ScabbardPluginExtension 
          enabled = true
          failOnError = false
      + }
      - })
      
  • Simple multi module project setup. When Scabbard plugin is applied to a root build.gradle, it automatically configures all subprojects.
  • Plugin no longer relies on order of applied plugins (i.e after Java, Kotlin) to function properly.

Misc

  • Add Dagger coffee app with thermosiphon to examples ☕.
    • Image
  • Remove red color from scope colors and use red only for Missing Binding.
  • Multibindings don't have repeated SET or MAP labels. Now it is only Set|Map<Type>.
  • Fixed subcomponent creator to -> subcomponent edge labels were often getting overlapped.
  • Fixed when both failOnError and fullBindingGraphValidation are used, build fails with FilerException.
  • Fixed build fails with kapt not found for java projects.
  • Scabbard now always generates .dot file even if image generation fails for any reason. (OOM etc.)

0.1.0

4 years ago

Scabbard initial release

  • Visualize entry points, dependency graph, component relationship and scopes in your dagger setup.
  • IDE integration.

https://plugins.gradle.org/plugin/scabbard.gradle