RepoPilot

How do their APIs compare?

About chrisrm/material-theme-jetbrains · 2 messages · last activity 9/9/2026

Question

How do their APIs compare?

RepoPilot

These two projects don't have comparable public "APIs" in the same sense, since they serve very different purposes — one is a JetBrains IDE theme plugin, the other is a reactive-streams scheduling library. Let me break down what each actually exposes.

chrisrm/material-theme-jetbrains: internal/plugin-extension surface, not a consumable API

This is a JetBrains IDE plugin, so it doesn't expose a public API for other software to call. Its "surface" consists of:

  • Configuration state objects like MTConfig, a PersistentStateComponent annotated with @State/@Storage that IntelliJ serializes to XML (material_theme.xml) [src/main/java/com/mallowigi/idea/MTConfig.java:L69-L74]. This is IntelliJ's plugin SDK convention for persisting settings, not a general-purpose API.
  • SVG color-patching hooks, e.g. MTAccentColorPatcher implements SVGLoader.SvgElementColorPatcherProvider, an IntelliJ platform interface, to recolor icons based on theme/accent attributes [src/main/java/com/mallowigi/idea/MTAccentColorPatcher.java:L42-L108].
  • Runtime bytecode patching via Javassist in classes like MTHackComponent and UIReplacer, which reflectively rewrite IntelliJ platform classes (e.g. ScrollBarPainter$Thumb, TitlePanel, FileColorManagerImpl) at runtime to inject theme behavior [src/main/java/com/mallowigi/idea/MTHackComponent.java:L169-L208, src/main/java/com/mallowigi/idea/UIReplacer.java:L220-L259].
  • Action/enum-driven extension points, like the MTDotIndicators, MTBorderIndicators, MTNoneIndicators classes tied to IndicatorStyles enum for tab indicator rendering [src/main/java/com/mallowigi/idea/actions/indicators/MTDotIndicators.java:L1-L28].

So its "API" is really the set of IntelliJ Platform SDK extension points it implements plus internal, non-stable reflection/bytecode hacks — nothing meant for third-party consumption. Given the RepoPilot verdict of WAIT — Stale, last commit 4 years ago, and the README's explicit archival/deprecation notice, this surface should be treated as frozen and unsupported.

reactivex/rxandroid: a small, intentional public API

RxAndroid is a library with a genuine consumer-facing API, though the retrieved chunks show mostly test utilities and docs rather than the core API classes themselves. From what's available:

  • The README documents the primary entry point pattern: AndroidSchedulers.from(Looper) to bind an Observable to an arbitrary Android Looper via .observeOn(...) [README.md:L90-L104].
  • AndroidSchedulers.mainThread() is referenced in the changelog as the other key scheduler factory, with a fix noted in 3.0.1 for correctly detecting async message support [CHANGES.md:L9-L15].
  • Test scaffolding like EmptyScheduler (extends RxJava3's Scheduler) and CountingRunnable show the library is built directly against io.reactivex.rxjava3.core types [rxandroid/src/test/java/io/reactivex/rxjava3/android/testutil/EmptyScheduler.java:L1-L17, rxandroid/src/test/java/io/reactivex/rxjava3/android/testutil/CountingRunnable.java:L1-L17].

This is a deliberately minimal API surface — essentially two scheduler factory methods (mainThread(), from(Looper)) that integrate with RxJava 3's Scheduler abstraction.

The comparison

Aspectmaterial-theme-jetbrainsrxandroid
API intentNone — internal plugin implementation using IntelliJ SDK extension pointsSmall, intentional public API (scheduler factories)
StabilityFrozen/archived, reflection-based hacks into IDE internalsActively versioned, semantic-ish releases (3.0.1 noted in CHANGES.md)
ConsumabilityNot designed for reuse outside the plugin itself

Public Q&A. Generated by RepoPilot from the actual source of chrisrm/material-theme-jetbrains. AI answers can be incomplete or stale — verify before relying on them.