Skip to content

Dart analysis issue with Android Studio (Flutter 3.27.3, Dart 3.6.1) #60683

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
Sakari369 opened this issue May 7, 2025 · 11 comments
Closed

Dart analysis issue with Android Studio (Flutter 3.27.3, Dart 3.6.1) #60683

Sakari369 opened this issue May 7, 2025 · 11 comments
Assignees
Labels
area-devexp For issues related to the analysis server, IDE support, linter, `dart fix`, and diagnostic messages. P2 A bug or feature request we're likely to work on

Comments

@Sakari369
Copy link

I'm having an issue inside Android Studio, not sure if this related to dart analyzer or not, but in Android Studio when I switch between .dart files and have Dart analyzer enabled, Android Studio always throws this error:

Dart Analysis Issue
UnimplementedError

The error shows this

`

Dart analysis issue

UnimplementedError

Version information

  • Dart SDK 3.6.1
  • Dart IntelliJ 243.26753.1
  • Android Studio Meerkat Feature Drop | 2024.3.2
  • Mac OS X 14.6.1

Details

UnimplementedError
#0 ElementImpl2.enclosingElement2 (package:analyzer/src/dart/element/element.dart:3106:38)
#1 _ReferenceFinder.visitAssignmentExpression (package:analysis_server/src/services/correction/dart/import_add_show.dart:71:51)
#2 AssignmentExpressionImpl.accept (package:analyzer/src/dart/ast/ast.dart:954:15)
#3 ExpressionStatementImpl.visitChildren (package:analyzer/src/dart/ast/ast.dart:6366:17)
#4 RecursiveAstVisitor.visitExpressionStatement (package:analyzer/dart/ast/visitor.dart:1099:10)
#5 ExpressionStatementImpl.accept (package:analyzer/src/dart/ast/ast.dart:6362:50)
#6 NodeListImpl.accept (package:analyzer/src/dart/ast/ast.dart:13009:20)
#7 SwitchPatternCaseImpl.visitChildren (package:analyzer/src/dart/ast/ast.dart:17380:16)
#8 RecursiveAstVisitor.visitSwitchPatternCase (package:analyzer/dart/ast/visitor.dart:1740:10)
#9 SwitchPatternCaseImpl.accept (package:analyzer/src/dart/ast/ast.dart:17374:50)
#10 NodeListImpl.accept (package:analyzer/src/dart/ast/ast.dart:13009:20)
#11 SwitchStatementImpl.visitChildren (package:analyzer/src/dart/ast/ast.dart:17497:14)
#12 RecursiveAstVisitor.visitSwitchStatement (package:analyzer/dart/ast/visitor.dart:1746:10)
#13 SwitchStatementImpl.accept (package:analyzer/src/dart/ast/ast.dart:17492:50)
#14 NodeListImpl.accept (package:analyzer/src/dart/ast/ast.dart:13009:20)
#15 BlockImpl.visitChildren (package:analyzer/src/dart/ast/ast.dart:2051:17)
#16 RecursiveAstVisitor.visitBlock (package:analyzer/dart/ast/visitor.dart:883:10)
#17 BlockImpl.accept (package:analyzer/src/dart/ast/ast.dart:2047:50)
#18 IfStatementImpl.visitChildren (package:analyzer/src/dart/ast/ast.dart:9730:20)
#19 RecursiveAstVisitor.visitIfStatement (package:analyzer/dart/ast/visitor.dart:1273:10)
#20 IfStatementImpl.accept (package:analyzer/src/dart/ast/ast.dart:9724:50)
#21 NodeListImpl.accept (package:analyzer/src/dart/ast/ast.dart:13009:20)
#22 BlockImpl.visitChildren (package:analyzer/src/dart/ast/ast.dart:2051:17)
#23 RecursiveAstVisitor.visitBlock (package:analyzer/dart/ast/visitor.dart:883:10)
#24 BlockImpl.accept (package:analyzer/src/dart/ast/ast.dart:2047:50)
#25 BlockFunctionBodyImpl.visitChildren (package:analyzer/src/dart/ast/ast.dart:2007:12)
#26 RecursiveAstVisitor.visitBlockFunctionBody (package:analyzer/dart/ast/visitor.dart:889:10)
#27 BlockFunctionBodyImpl.accept (package:analyzer/src/dart/ast/ast.dart:1999:50)
#28 FunctionExpressionImpl.visitChildren (package:analyzer/src/dart/ast/ast.dart:8624:11)
#29 RecursiveAstVisitor.visitFunctionExpression (package:analyzer/dart/ast/visitor.dart:1213:10)
#30 FunctionExpressionImpl.accept (package:analyzer/src/dart/ast/ast.dart:8613:50)
#31 NodeListImpl.accept (package:analyzer/src/dart/ast/ast.dart:13009:20)
#32 ArgumentListImpl.visitChildren (package:analyzer/src/dart/ast/ast.dart:476:16)
#33 RecursiveAstVisitor.visitArgumentList (package:analyzer/dart/ast/visitor.dart:823:10)
#34 ArgumentListImpl.accept (package:analyzer/src/dart/ast/ast.dart:472:50)
#35 MethodInvocationImpl.visitChildren (package:analyzer/src/dart/ast/ast.dart:12258:19)
#36 RecursiveAstVisitor.visitMethodInvocation (package:analyzer/dart/ast/visitor.dart:1411:10)
#37 _ReferenceFinder.visitMethodInvocation (package:analysis_server/src/services/correction/dart/import_add_show.dart:96:11)
#38 MethodInvocationImpl.accept (package:analyzer/src/dart/ast/ast.dart:12246:50)
#39 ExpressionStatementImpl.visitChildren (package:analyzer/src/dart/ast/ast.dart:6366:17)
#40 RecursiveAstVisitor.visitExpressionStatement (package:analyzer/dart/ast/visitor.dart:1099:10)
#41 ExpressionStatementImpl.accept (package:analyzer/src/dart/ast/ast.dart:6362:50)
#42 NodeListImpl.accept (package:analyzer/src/dart/ast/ast.dart:13009:20)
#43 BlockImpl.visitChildren (package:analyzer/src/dart/ast/ast.dart:2051:17)
#44 RecursiveAstVisitor.visitBlock (package:analyzer/dart/ast/visitor.dart:883:10)
#45 BlockImpl.accept (package:analyzer/src/dart/ast/ast.dart:2047:50)
#46 BlockFunctionBodyImpl.visitChildren (package:analyzer/src/dart/ast/ast.dart:2007:12)
#47 RecursiveAstVisitor.visitBlockFunctionBody (package:analyzer/dart/ast/visitor.dart:889:10)
#48 BlockFunctionBodyImpl.accept (package:analyzer/src/dart/ast/ast.dart:1999:50)
#49 MethodDeclarationImpl.visitChildren (package:analyzer/src/dart/ast/ast.dart:12069:10)
#50 RecursiveAstVisitor.visitMethodDeclaration (package:analyzer/dart/ast/visitor.dart:1405:10)
#51 MethodDeclarationImpl.accept (package:analyzer/src/dart/ast/ast.dart:12061:50)
#52 NodeListImpl.accept (package:analyzer/src/dart/ast/ast.dart:13009:20)
#53 ClassDeclarationImpl.visitChildren (package:analyzer/src/dart/ast/ast.dart:2939:13)
#54 RecursiveAstVisitor.visitClassDeclaration (package:analyzer/dart/ast/visitor.dart:937:10)
#55 ClassDeclarationImpl.accept (package:analyzer/src/dart/ast/ast.dart:2929:50)
#56 NodeListImpl.accept (package:analyzer/src/dart/ast/ast.dart:13009:20)
#57 CompilationUnitImpl.visitChildren (package:analyzer/src/dart/ast/ast.dart:3621:21)
#58 RecursiveAstVisitor.visitCompilationUnit (package:analyzer/dart/ast/visitor.dart:961:10)
#59 CompilationUnitImpl.accept (package:analyzer/src/dart/ast/ast.dart:3614:50)
#60 ImportAddShow.compute (package:analysis_server/src/services/correction/dart/import_add_show.dart:48:10)
#61 AssistProcessor._addFromProducers.compute (package:analysis_server/src/services/correction/assist_internal.dart:207:24)
#62 AssistProcessor._addFromProducers (package:analysis_server/src/services/correction/assist_internal.dart:228:15)

#63 AssistProcessor.compute (package:analysis_server/src/services/correction/assist_internal.dart:181:5)

#64 EditGetAssistsHandler._computeServerAssists (package:analysis_server/src/handler/legacy/edit_get_assists.dart:105:23)

#65 OperationPerformanceImpl.runAsync (package:analyzer/src/util/performance/operation_performance.dart:174:14)

#66 EditGetAssistsHandler.handle (package:analysis_server/src/handler/legacy/edit_get_assists.dart:57:19)

#67 LegacyAnalysisServer.handleRequest.. (package:analysis_server/src/legacy_analysis_server.dart:569:11)

#68 OperationPerformanceImpl.runAsync (package:analyzer/src/util/performance/operation_performance.dart:174:14)

#69 LegacyAnalysisServer.handleRequest. (package:analysis_server/src/legacy_analysis_server.dart:550:7)

#0      EditGetAssistsHandler._computeServerAssists (package:analysis_server/src/handler/legacy/edit_get_assists.dart:117:9)
<asynchronous suspension>
#1      OperationPerformanceImpl.runAsync (package:analyzer/src/util/performance/operation_performance.dart:174:14)
<asynchronous suspension>
#2      EditGetAssistsHandler.handle (package:analysis_server/src/handler/legacy/edit_get_assists.dart:57:19)
<asynchronous suspension>
#3      LegacyAnalysisServer.handleRequest.<anonymous closure>.<anonymous closure> (package:analysis_server/src/legacy_analysis_server.dart:569:11)
<asynchronous suspension>
#4      OperationPerformanceImpl.runAsync (package:analyzer/src/util/performance/operation_performance.dart:174:14)
<asynchronous suspension>
#5      LegacyAnalysisServer.handleRequest.<anonymous closure> (package:analysis_server/src/legacy_analysis_server.dart:550:7)
<asynchronous suspension>

Debug log

1746598954615 <= {"id":"2958"}
1746598954615 <= {"event":"server.status","params":{"analysis":{"isAnalyzing":true}}}
1746598954634 <= {"event":"analysis.errors","params":{"file":"file:///Users/sakari/dvl/omg/shader_playground/lib/shader_app.dart","errors":[{"severity":"INFO","type":"HINT","location":{"file":"file://...
1746598954636 <= {"event":"analysis.highlights","params":{"file":"file:///Users/sakari/dvl/omg/shader_playground/lib/shader_app.dart","regions":[{"type":"DIRECTIVE","offset":0,"length":20},{"type":"BU...
1746598954642 <= {"event":"analysis.navigation","params":{"file":"file:///Users/sakari/dvl/omg/shader_playground/lib/shader_app.dart","regions":[{"offset":7,"length":12,"targets":[0]},{"offset":28,"le...
1746598954642 <= {"event":"analysis.closingLabels","params":{"file":"file:///Users/sakari/dvl/omg/shader_playground/lib/shader_app.dart","labels":[{"offset":3614,"length":445,"label":"Container"},{"of...
1746598954644 <= {"event":"analysis.outline","params":{"file":"file:///Users/sakari/dvl/omg/shader_playground/lib/shader_app.dart","kind":"LIBRARY","outline":{"element":{"kind":"COMPILATION_UNIT","nam...
1746598954644 <= {"event":"analysis.overrides","params":{"file":"file:///Users/sakari/dvl/omg/shader_playground/lib/shader_app.dart","overrides":[{"offset":3573,"length":5,"superclassMember":{"element...
1746598954648 <= {"event":"flutter.outline","params":{"file":"file:///Users/sakari/dvl/omg/shader_playground/lib/shader_app.dart","outline":{"kind":"DART_ELEMENT","offset":0,"length":19778,"codeOffset...
1746598954649 <= {"event":"server.status","params":{"analysis":{"isAnalyzing":false}}}
1746598954649 <= {"event":"analysis.implemented","params":{"file":"file:///Users/sakari/dvl/omg/shader_playground/lib/shader_app.dart","classes":[],"members":[]}}
1746598954994 => {"id":"2959","method":"edit.getAssists","params":{"file":"file:///Users/sakari/dvl/omg/shader_playground/lib/shader_app.dart","offset":18610,"length":0},"clientRequestTime":1746598954...
1746598954999 <= {"id":"2959","result":{"assists":[]}}
1746598956116 => {"id":"2960","method":"analysis.setPriorityFiles","params":{"files":["file:///Users/sakari/dvl/omg/shader_playground/lib/ui_elements/shader_param_panel.dart"]},"clientRequestTime":174...
1746598956116 => {"id":"2961","method":"analysis.setSubscriptions","params":{"subscriptions":{"CLOSING_LABELS":["file:///Users/sakari/dvl/omg/shader_playground/lib/ui_elements/shader_param_panel.dart"...
1746598956120 <= {"id":"2960"}
1746598956120 <= {"id":"2961"}
1746598956120 <= {"event":"server.status","params":{"analysis":{"isAnalyzing":true}}}
1746598956126 <= {"event":"analysis.errors","params":{"file":"file:///Users/sakari/dvl/omg/shader_playground/lib/ui_elements/shader_param_panel.dart","errors":[{"severity":"WARNING","type":"STATIC_WAR...
1746598956126 <= {"event":"analysis.highlights","params":{"file":"file:///Users/sakari/dvl/omg/shader_playground/lib/ui_elements/shader_param_panel.dart","regions":[{"type":"DIRECTIVE","offset":0,"len...
1746598956128 <= {"event":"analysis.navigation","params":{"file":"file:///Users/sakari/dvl/omg/shader_playground/lib/ui_elements/shader_param_panel.dart","regions":[{"offset":7,"length":31,"targets":[...
1746598956128 <= {"event":"analysis.closingLabels","params":{"file":"file:///Users/sakari/dvl/omg/shader_playground/lib/ui_elements/shader_param_panel.dart","labels":[{"offset":2691,"length":422,"labe...
1746598956128 <= {"event":"analysis.outline","params":{"file":"file:///Users/sakari/dvl/omg/shader_playground/lib/ui_elements/shader_param_panel.dart","kind":"LIBRARY","outline":{"element":{"kind":"CO...
1746598956128 <= {"event":"analysis.overrides","params":{"file":"file:///Users/sakari/dvl/omg/shader_playground/lib/ui_elements/shader_param_panel.dart","overrides":[{"offset":3141,"length":5,"supercl...
1746598956129 <= {"event":"flutter.outline","params":{"file":"file:///Users/sakari/dvl/omg/shader_playground/lib/ui_elements/shader_param_panel.dart","outline":{"kind":"DART_ELEMENT","offset":0,"lengt...
1746598956130 <= {"event":"server.status","params":{"analysis":{"isAnalyzing":false}}}
1746598956130 <= {"event":"analysis.implemented","params":{"file":"file:///Users/sakari/dvl/omg/shader_playground/lib/ui_elements/shader_param_panel.dart","classes":[],"members":[]}}
1746598956448 => {"id":"2962","method":"edit.getAssists","params":{"file":"file:///Users/sakari/dvl/omg/shader_playground/lib/ui_elements/shader_param_panel.dart","offset":0,"length":0},"clientRequest...
1746598956452 <= {"event":"server.error","params":{"isFatal":false,"message":"Internal error: UnimplementedError\n#0      ElementImpl2.enclosingElement2 (package:analyzer/src/dart/element/element.dart...
1746598956453 <= {"id":"2962","error":{"code":"SERVER_ERROR","message":"UnimplementedError\n#0      ElementImpl2.enclosingElement2 (package:analyzer/src/dart/element/element.dart:3106:38)\n#1      _Re...

`

This happens every time I switch a tab in my Android Studio.
I don't know when this started happening, but earlier this used not to happen.

I am stuck to Flutter 3.27.3 though (due to 3.29 disabling Skia backend on iOS), so I am guessing might this be the reason ?

This is my Flutter Doctor output:

`❯ flutter doctor -v
[✓] Flutter (Channel stable, 3.27.3, on macOS 14.6.1 23G93 darwin-arm64, locale en-FI)
• Flutter version 3.27.3 on channel stable at /Users/sakari/dvl/flutter
• Upstream repository https://github.com/flutter/flutter.git
• Framework revision c519ee916e (4 months ago), 2025-01-21 10:32:23 -0800
• Engine revision e672b006cb
• Dart version 3.6.1
• DevTools version 2.40.2

[✓] Android toolchain - develop for Android devices (Android SDK version 35.0.0)
• Android SDK at /Users/sakari/Library/Android/sdk
• Platform android-35, build-tools 35.0.0
• ANDROID_HOME = /Users/sakari/Library/Android/sdk
• Java binary at: /Users/sakari/dvl/jdk/jdk-17.0.13+11/Contents/Home/bin/java
• Java version OpenJDK Runtime Environment Temurin-17.0.13+11 (build 17.0.13+11)
• All Android licenses accepted.

[✓] Xcode - develop for iOS and macOS (Xcode 16.2)
• Xcode at /Applications/Xcode.app/Contents/Developer
• Build 16C5032a
• CocoaPods version 1.16.2

[✓] Chrome - develop for the web
• Chrome at /Applications/Google Chrome.app/Contents/MacOS/Google Chrome

[✓] Android Studio (version 2024.3)
• Android Studio at /Users/sakari/Applications/Android Studio.app/Contents
• Flutter plugin can be installed from:
🔨 https://plugins.jetbrains.com/plugin/9212-flutter
• Dart plugin can be installed from:
🔨 https://plugins.jetbrains.com/plugin/6351-dart
• Java version OpenJDK Runtime Environment (build 21.0.6+-13368085-b895.109)

[✓] VS Code (version 1.93.1)
• VS Code at /Applications/Visual Studio Code.app/Contents
• Flutter extension can be installed from:
🔨 https://marketplace.visualstudio.com/items?itemName=Dart-Code.flutter

[✓] Connected device (3 available)
• macOS (desktop) • macos • darwin-arm64 • macOS 14.6.1 23G93 darwin-arm64
• Mac Designed for iPad (desktop) • mac-designed-for-ipad • darwin • macOS 14.6.1 23G93 darwin-arm64
• Chrome (web) • chrome • web-javascript • Google Chrome 136.0.7103.93
! Error: Browsing on the local area network for Moonstone. Ensure the device is unlocked and attached with a cable or associated with
the same local area network as this Mac.
The device must be opted into Developer Mode to connect wirelessly. (code -27)
! Error: Browsing on the local area network for SpacePad. Ensure the device is unlocked and attached with a cable or associated with the
same local area network as this Mac.
The device must be opted into Developer Mode to connect wirelessly. (code -27)

[✓] Network resources
• All expected network resources are available.

• No issues found!`

I am running Android Studio Meerkat Feature Drop | 2024.3.2

Any idea why this is happening ? How might I fix this ?

@Sakari369 Sakari369 added the area-devexp For issues related to the analysis server, IDE support, linter, `dart fix`, and diagnostic messages. label May 7, 2025
@FMorschel
Copy link
Contributor

FMorschel commented May 7, 2025

CC @scheglov @bwilkerson

@bwilkerson
Copy link
Member

I am stuck to Flutter 3.27.3 though (due to 3.29 disabling Skia backend on iOS), so I am guessing might this be the reason ?

The issue has nothing to do with the changes to Skia, it's a result of an incomplete implementation in the analyzer.

@johnniwinther @scheglov

This needs to be implemented on the analyzer side. Unfortunately, the exception message doesn't indicate what class of element doesn't have the required implementation of enclosingElement2.

We should fix this before the 3.9 / 3.33 release. And probably before publishing another version of the analyzer package.

Also, on the server side, we should guard the execution of CorrectionProducers such that any exception thrown causes the correction to not be produced but doesn't prevent other correction producers from running and results from being returned. I'm surprised that this isn't already being done.

@scheglov
Copy link
Contributor

scheglov commented May 7, 2025

It looks that in analyzer 7.4.4 the only subclass does not override and implement enclosingElement2 is GenericFunctionTypeElementImpl2.

@bwilkerson
Copy link
Member

Should we remove the throw and make the method (in ElementImpl2) be abstract?

@scheglov
Copy link
Contributor

scheglov commented May 7, 2025

It is still the same in 8.0.0-dev, only GenericFunctionTypeElementImpl2.
Not sure what to return, probably null.
The whole GenericFunctionTypeElementImpl2 is weird, exists only to host type parameters and formal parameters.
It cannot be referenced.

Yes, making ElementImpl2 .enclosingElement2 abstract instead of throwing sounds right to me.

@bwilkerson
Copy link
Member

It cannot be referenced.

I'm not sure what that means.

The getter is being invoked here (https://github.com/dart-lang/sdk/blob/main/pkg/analysis_server/lib/src/services/correction/dart/import_add_show.dart#L71) as a result of asking an AssignmentExpression for its writeElement2.

Maybe the bug is that we're associating the wrong write element with the node?

@scheglov
Copy link
Contributor

scheglov commented May 7, 2025

I don't mean that the API is not used, only that the fact that we give GenericFunctionType node a fragment and element is strange. The node itself cannot be referenced, in contrast to a class declaration for example. The same way as you cannot reference int in void foo(int a) {}, it is a property of another element.

Anyway, we will not do any significant change right now.

@scheglov scheglov self-assigned this May 7, 2025
@scheglov scheglov added the P2 A bug or feature request we're likely to work on label May 7, 2025
@scheglov
Copy link
Contributor

scheglov commented May 7, 2025

copybara-service bot pushed a commit that referenced this issue May 7, 2025
…ement2, when GenericFunctionTypeElementImpl2.

Bug: #60683
Change-Id: I122eed163c8f713ca1dd416c194eb432f23802de
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/427300
Reviewed-by: Brian Wilkerson <[email protected]>
Commit-Queue: Konstantin Shcheglov <[email protected]>
@scheglov
Copy link
Contributor

scheglov commented May 7, 2025

CL for back-porting as analyzer 7.4.5: https://dart-review.googlesource.com/c/sdk/+/427322

@scheglov scheglov closed this as completed May 7, 2025
@FMorschel
Copy link
Contributor

Also, on the server side, we should guard the execution of CorrectionProducers such that any exception thrown causes the correction to not be produced but doesn't prevent other correction producers from running and results from being returned. I'm surprised that this isn't already being done.

Just to be sure this wasn't forgotten. Has this been done too @bwilkerson?

@bwilkerson
Copy link
Member

Not that I'm aware of, no.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
area-devexp For issues related to the analysis server, IDE support, linter, `dart fix`, and diagnostic messages. P2 A bug or feature request we're likely to work on
Projects
None yet
Development

No branches or pull requests

4 participants