CodeAssist 3.9.2
馃殌 CodeAssist 3.9.2
EDITOR & COMPLETION
- Smart type completion. Completing a type now inserts the syntax the position expects instead of a bare name: a concrete class in a value position becomes a constructor call (
Foo()), a generic type gets its angle brackets (Box<>), and in a supertype list a class becomesBase()while an interface stays bare. The caret lands inside the parentheses only when the constructor actually has required arguments, and inside the<>first for a generic type. It backs off for interfaces, objects, abstract or sealed classes, and when a.follows, so it never over-triggers. - Reformat on save now works everywhere. The "Reformat on save" setting only ever ran on the desktop
Ctrl-Sshortcut, so on device (and via the toolbar save button) it appeared to do nothing, for both Kotlin and Java. It now runs on every save path. - Horizontal scroll is reliable again. A sideways swipe in the editor could be swallowed by the navigation drawer's edge grab or by a selection handle instead of scrolling the line. Both now defer to the editor, so scrolling a long line just scrolls.
- Static members on mapped Java types. Typing
java.lang.String.(or any type Kotlin maps from a JVM class, by its Java name) now offersvalueOf,format,join, and the rest, andjava.lang.String.valueOf(...)is no longer flagged as unresolved. - Unified Markdown and doc rendering. The AI chat, lesson prose, and the Markdown preview now share one renderer, so chat gains proper headings, lists, quotes, and links. The completion popup's documentation panel now renders Javadoc and KDoc like the hover popup instead of plain text, and the completion list is clipped to its rounded corners.
- First-open only auto-open. A project you deliberately left with no tabs open no longer re-opens the Manifest on every launch. A default file now opens only on a project's genuine first open.
CODE ANALYSIS (Java & Kotlin)
- Flags extending a final class as an error (Kotlin
FINAL_SUPERTYPE), matching the compiler, for bothclass Cow : Animal()and the bare form. - Flags a bare extension used as a value and an imported extension called with no receiver (for example a stray
setContent), and stops false-positiving on a bare property read likedp. - Fixes a false "Unresolved reference" on a builder chain assigned to a top-level property, for example
val a = Retrofit.Builder()...build()thena.create(). The type is now inferred from the real code structure instead of a text guess, which also keeps generics likeMutableStateFlow<Key>.
COMPOSE PREVIEW
- Fixed a preview that could latch a broken render on a cold open. The workspace index settles more than once while dependencies resolve, and a preview lowered during a brief gap could resolve library composables against an incomplete classpath and keep that bad render forever. The preview now re-renders on every index settle, so the final one always wins.
INDEXING PERFORMANCE
- Faster library-source indexing. The Java source-doc index (JDK and Android sources) is now a lexer walk instead of a full structural parse under the global lock, so it parallelizes across cores. This is the dominant cost when indexing a large attached-sources tree.
- Fewer bytecode passes. Plain library
.classfiles (the bulk ofandroid.jar) were parsed about six times per index pass; they are now parsed once and shared across all the binary indexes.
BUILD, TOOLING & DEPENDENCIES
- App logs (Logcat tab) show reliably. Log forwarding was tied to the IDE's Run button, in the same session, and only matched apps whose applicationId equalled their package name. Now the IDE watches the open project's app IDs on project open, so a running debug app's logs appear whether you launched it from Run or from the home-screen icon, and for apps with an
applicationIdSuffixor flavor applicationId. On devices where the OS blocks log capture, a one-line note explains thatprintlnand crashes are still forwarded. - A missing dependency edge is resolved. A versionless Gradle Module Metadata edge versioned only by a dependency constraint was being dropped, which is how AndroidX and Compose version many of their internal edges. This fixes a
ClassNotFoundExceptioncrash (for example Glance'sNavHostlosingandroidx.savedstate:savedstate-compose). - Find in Files keeps its results. Opening a result no longer discards the search on phone, so you can jump straight to the next occurrence.
- The SDK Manager now labels the on-device runtime as "Android runtime (ART)" with a helpful explanation, instead of showing "JDK 0".
UI & LAYOUT
- On wide layouts the build console now docks along the bottom (IntelliJ style) and spans the width between the side rails, with a draggable splitter to resize it, instead of a cramped right-edge pane.
- Fixed the Split view-mode toggle being untappable on gesture-navigation Android: its last segment sat inside the back-gesture zone, so it now sits clear of the edge inset.
AI AGENT
- Added a Reasoning effort choice to AI settings, so the tool-driven agent works with newer OpenAI reasoning models that reject tools combined with reasoning. Also surfaced max response tokens and max tool iterations as sliders. Covers OpenAI, OpenRouter, and custom gateways.
STABILITY
- Hardened the editor against a native crash on budget 32-bit devices (some Itel, Unisoc, and MediaTek phones on Android 12). This is a runtime-level fault below our code, provoked by heavy background memory churn while editing, so on 32-bit processes the IDE now collapses background indexing onto a single thread (64-bit devices and desktop are untouched). Added an opt-in crash breadcrumb so the next report tells us exactly which part of the engine was running, to keep narrowing it down.
SUPPORTING CODEASSIST
- Added one full-screen ad shown only at natural breaks: over a build that runs longer than a few seconds, and on finishing a tutorial (throttled). It is gated by the same free "show ads" toggle and consent as the existing slots, and is inert on desktop and when ads are off. CodeAssist stays completely free.
Full changelog: https://github.com/tyron12233/CodeAssist/releases/tag/v3.9.2