Skip to content

bandlab/bandlab-android-intellij-plugin

Repository files navigation

BandLab Android IntelliJ Plugin

Build IntelliJ IDEA License

This plugin offers a suite of features to help developers work more efficiently with the BandLab Android project.

Please note that this plugin is not available for external use; we've open-sourced it solely to demonstrate our approach to improving develop experience through IDE integration.

Module Creation

Module Creation Wizard

The UI is implemented using Jewel (Compose Desktop)! 🔮

  • Create modules following BandLab Android conventions (:api, :impl, :ui, :screen).
  • Support for batch creation of multiple modules.
  • Contextual module path pre-filling and autocomplete.
  • Optional :impl and :screen exposure to AppGraph (default) or MixEditorGraph.
  • Templates for Activities and Pages.
  • Support adding to spotlight after creating modules.

Templates

Templates

Activity Template

Generates Activity, ViewModel, and Manifest per latest conventions.

Page Template

Generates Page and ViewModel.

Notes: Page is our internal framework to render a Composable with a given injected ViewModel type.

interface Page<ViewModel : Any> {

    @Composable
    fun Content(viewModel: ViewModel)
}

Two-level Injection template

Generates an interface and an impl for two-level injection.

Notes: Two-level injection is useful when you have both app-level and screen-level dependencies for a class whose dependencies you want to invert. In such cases, you can avoid manually passing screen-level dependencies. There are two factories: a screen-level factory and an app-level factory, like this:

interface FeatureViewModel {
    val state: FeatureState
    
    @Inject
    class Factory(
        private val coroutineScope: CoroutineScope,
        private val appLevelFactory: AppLevelFactory,
    ) {
        fun create(
            params: FeatureParams,
        ): FeatureViewModel = appLevelFactory.create(
            params = params,
            coroutineScope = coroutineScope
        )
    }
    
    interface AppLevelFactory {
        fun create(
            params: FeatureParams,
            coroutineScope: CoroutineScope,
        ): FeatureViewModel
    }
}

Automation Templates

Automation Templates

Generate Robot, Semantics, and Verifier templates following our automation conventions. Available only under the androidTest source set.


Module Analyzer

module analyzer

Right-click a module to analyze it using DAGP and our internal scoring plugin (predicts JVM module compatibility).

The plugin helps invoke these tasks in your IDE's Run tab:

  • Android modules: ./gradlew :module:analyzeModule
  • Non-Android modules: ./gradlew :module:projectHealth

Update Localized Strings

update strings

Update all localized strings for a given module from Tolgee. There are multiple entry points:

  1. Right-click on a module that contains libs.plugins.localizer plugin.
  2. Right-click (or Shift+Cmd+A) on a strings.xml, or strings-plurals.xml file.

The plugin helps invoke ./gradlew :module:updateStrings in your IDE's Run tab.


build.gradle Actions

build.gradle actions

Dependency Sorting

Right-click build.gradle to sort plugins and dependencies alphabetically.

Test Fixtures Plugin

Right-click build.gradle to apply the Test Fixtures plugin and automatically create the required folders.

Project Path Autocomplete

auto-complete project path

Since we avoid Gradle type-safe accessors, this plugin provides autocomplete and validation for project paths. Invalid paths are highlighted with a red underline.

Acknowledgments: The feature was adapted from Slack foundry.


License

Copyright 2026 BandLab Singapore Pte Ltd

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.

Plugin based on the IntelliJ Platform Plugin Template.

About

IntelliJ plugin for BandLab Android project

Topics

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages