-
Notifications
You must be signed in to change notification settings - Fork 330
Description
What happened
After upgrading to the latest versions of Flutter, Android Studio Narwhal Feature Drop (2025.1.2), Gradle, and Kotlin, Android Studio throws a ClassCastException when trying to retrieve Flutter SDK information.
This happens as soon as the Flutter plugin is active, even without opening a project. It seems related to io.flutter.toolwindow.ToolWindowBadgeUpdater$BadgeIcon being incompatible with com.intellij.openapi.util.ScalableIcon in the new IntelliJ platform.
Steps to Reproduce:
Update Android Studio to Narwhal Feature Drop | 2025.1.2
Update Flutter to the latest stable version (flutter upgrade --force)
Update Gradle and Kotlin to the latest versions supported by Flutter
Install or enable the Flutter plugin (v87.0)
Open Android Studio (with or without a Flutter project)
Expected Behavior:
Flutter plugin should load without errors and display the Flutter tool window normally.
Version information
Android Studio Narwhal Feature Drop | 2025.1.2
• Flutter plugin io.flutter 87.0
• Dart plugin 251.27623.5
Error getting Flutter sdk information.
Exception
Unhandled exception in [Kernel@t4nrgf222uitrdk0ttus, Rete(failFast=false, commands=capacity=2147483647,data=[onReceive], reteState=kotlinx.coroutines.flow.StateFlowImpl@7fc2413d, dbSource=ReteDbSource(reteState=kotlinx.coroutines.flow.StateFlowImpl@7fc2413d)), DbSourceContextElement(kernel Kernel@t4nrgf222uitrdk0ttus), ComponentManager(ProjectImpl@1840229347), com.intellij.codeWithMe.ClientIdContextElementPrecursor@60b1fa38, CoroutineName(com.intellij.openapi.wm.impl.ToolWindowManagerImpl), ModalityState.NON_MODAL, Dispatchers.EDT]
java.lang.ClassCastException: class io.flutter.toolwindow.ToolWindowBadgeUpdater$BadgeIcon cannot be cast to class com.intellij.openapi.util.ScalableIcon (io.flutter.toolwindow.ToolWindowBadgeUpdater$BadgeIcon is in unnamed module of loader com.intellij.ide.plugins.cl.PluginClassLoader @31fcb578; com.intellij.openapi.util.ScalableIcon is in unnamed module of loader com.intellij.util.lang.PathClassLoader @4cb2c100)
at com.intellij.openapi.wm.impl.SquareStripeButton.updatePresentation(SquareStripeButton.kt:244)
at com.intellij.toolWindow.ToolWindowPaneNewButtonManager$createStripeButton$1.updateIcon(ToolWindowPaneNewButtonManager.kt:203)
at com.intellij.openapi.wm.impl.ToolWindowManagerImpl.toolWindowPropertyChanged(ToolWindowManagerImpl.kt:2355)
at com.intellij.openapi.wm.impl.ToolWindowImpl.setIcon(ToolWindowImpl.kt:583)
at io.flutter.toolwindow.ToolWindowBadgeUpdater.lambda$updateBadgedIcon$0(ToolWindowBadgeUpdater.java:39)
at com.intellij.openapi.wm.impl.ToolWindowManagerImpl$invokeLater$1.invokeSuspend(ToolWindowManagerImpl.kt:1621)
at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:104)
at com.intellij.openapi.application.impl.EdtCoroutineDispatcher$wrapWithLocking$2$1.run(EdtCoroutineDispatcher.kt:71)
at com.intellij.openapi.application.WriteIntentReadAction.lambda$run$0(WriteIntentReadAction.java:24)
at com.intellij.openapi.application.impl.AnyThreadWriteThreadingSupport.runWriteIntentReadAction$lambda$6(AnyThreadWriteThreadingSupport.kt:274)
at com.intellij.openapi.application.impl.AnyThreadWriteThreadingSupport.runWithTemporaryThreadLocal(AnyThreadWriteThreadingSupport.kt:204)
at com.intellij.openapi.application.impl.AnyThreadWriteThreadingSupport.runWriteIntentReadAction(AnyThreadWriteThreadingSupport.kt:274)
at com.intellij.openapi.application.impl.AnyThreadWriteThreadingSupport.runWriteIntentReadAction(AnyThreadWriteThreadingSupport.kt:222)
at com.intellij.openapi.application.impl.ApplicationImpl.runWriteIntentReadAction(ApplicationImpl.java:1009)
at com.intellij.openapi.application.WriteIntentReadAction.compute(WriteIntentReadAction.java:55)
at com.intellij.openapi.application.WriteIntentReadAction.run(WriteIntentReadAction.java:23)
at com.intellij.openapi.application.impl.EdtCoroutineDispatcher$wrapWithLocking$$inlined$Runnable$2.run(Runnable.kt:15)
at com.intellij.openapi.application.impl.DispatchedRunnable.run(DispatchedRunnable.kt:42)
at com.intellij.openapi.application.TransactionGuardImpl.runWithWritingAllowed(TransactionGuardImpl.java:240)
at com.intellij.openapi.application.TransactionGuardImpl.access$100(TransactionGuardImpl.java:25)
at com.intellij.openapi.application.TransactionGuardImpl$2.run(TransactionGuardImpl.java:222)
at com.intellij.openapi.application.impl.FlushQueue.runNextEvent(FlushQueue.java:117)
at com.intellij.openapi.application.impl.FlushQueue.flushNow(FlushQueue.java:43)
at java.desktop/java.awt.event.InvocationEvent.dispatch(Unknown Source)
at java.desktop/java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.desktop/java.awt.EventQueue$4.run(Unknown Source)
at java.desktop/java.awt.EventQueue$4.run(Unknown Source)
at java.base/java.security.AccessController.doPrivileged(Unknown Source)
at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
at java.desktop/java.awt.EventQueue.dispatchEvent(Unknown Source)
at com.intellij.ide.IdeEventQueue.defaultDispatchEvent(IdeEventQueue.kt:585)
at com.intellij.ide.IdeEventQueue._dispatchEvent(IdeEventQueue.kt:482)
at com.intellij.ide.IdeEventQueue.dispatchEvent$lambda$12$lambda$11$lambda$10$lambda$9(IdeEventQueue.kt:307)
at com.intellij.openapi.progress.impl.CoreProgressManager.computePrioritized(CoreProgressManager.java:864)
at com.intellij.ide.IdeEventQueue.dispatchEvent$lambda$12$lambda$11$lambda$10(IdeEventQueue.kt:306)
at com.intellij.ide.IdeEventQueueKt.performActivity$lambda$3(IdeEventQueue.kt:958)
at com.intellij.openapi.application.TransactionGuardImpl.performActivity(TransactionGuardImpl.java:109)
at com.intellij.ide.IdeEventQueueKt.performActivity(IdeEventQueue.kt:958)
at com.intellij.ide.IdeEventQueue.dispatchEvent$lambda$12(IdeEventQueue.kt:301)
at com.intellij.ide.IdeEventQueue.dispatchEvent(IdeEventQueue.kt:341)
at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.desktop/java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.desktop/java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.desktop/java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.desktop/java.awt.EventDispatchThread.run(Unknown Source)
Suppressed: kotlinx.coroutines.internal.DiagnosticCoroutineContextException: [Kernel@t4nrgf222uitrdk0ttus, Rete(failFast=false, commands=capacity=2147483647,data=[onReceive], reteState=kotlinx.coroutines.flow.StateFlowImpl@7fc2413d, dbSource=ReteDbSource(reteState=kotlinx.coroutines.flow.StateFlowImpl@7fc2413d)), DbSourceContextElement(kernel Kernel@t4nrgf222uitrdk0ttus), ComponentManager(ProjectImpl@1840229347), com.intellij.codeWithMe.ClientIdContextElementPrecursor@60b1fa38, CoroutineName(com.intellij.openapi.wm.impl.ToolWindowManagerImpl), ModalityState.NON_MODAL, StandaloneCoroutine{Cancelled}@31993c41, Dispatchers.EDT]