Mobx.dart: Code generator fails on type-inferred @observable fields

Created on 1 Dec 2019  Â·  9Comments  Â·  Source: mobxjs/mobx.dart

Hello, I'm currently facing a strange issue when trying to upgrade to Flutter 1.11 (channel beta)

➜ flutter packages pub run build_runner build -v
[INFO] Generating build script...
[INFO] Generating build script completed, took 375ms

[INFO] BuildDefinition:Initializing inputs
[INFO] BuildDefinition:Reading cached asset graph...
[INFO] BuildDefinition:Reading cached asset graph completed, took 104ms

[INFO] BuildDefinition:Checking for updates since last build...
[INFO] BuildDefinition:Checking for updates since last build completed, took 822ms

[INFO] Build:Running build...
[INFO] Build:Running build completed, took 46ms

[INFO] Build:Caching finalized dependency graph...
[INFO] Build:Caching finalized dependency graph completed, took 77ms

[SEVERE] mobx_codegen:mobx_generator on [censored] (cached):
Error running StoreGenerator
NoSuchMethodError: The method 'toSource' was called on null.
Receiver: null
Tried calling: toSource()
dart:core                                                               Object.noSuchMethod
package:mobx_codegen/src/type_names.dart 6:62                           findVariableTypeName
package:mobx_codegen/src/store_class_visitor.dart 108:16                StoreClassVisitor.visitFieldElement
package:analyzer/src/dart/element/element.dart 5655:53                  FieldElementImpl.accept
package:analyzer/src/dart/element/element.dart 3877:15                  ElementImpl.safelyVisitChildren
package:analyzer/src/dart/element/element.dart 311:5                    AbstractClassElementImpl.visitChildren
package:analyzer/src/dart/element/element.dart 1264:11                  ClassElementImpl.visitChildren
package:mobx_codegen/src/mobx_codegen_base.dart 80:9                    StoreGenerator._generateCodeFromTemplate
package:mobx_codegen/src/mobx_codegen_base.dart 57:13                   StoreGenerator._generateCodeForMixinStore
dart:core                                                               Iterable.toSet
package:mobx_codegen/src/mobx_codegen_base.dart 20:69                   StoreGenerator.generate
package:source_gen/src/builder.dart 280:35                              _generate
package:source_gen/src/builder.dart 73:15                               _Builder._generateForLibrary
package:source_gen/src/builder.dart 67:11                               _Builder.build
package:build                                                           runBuilder
package:build_runner_core/src/generate/build_impl.dart 491:19           _SingleBuild._runForInput.<fn>.<fn>.<fn>
package:build_runner_core/src/generate/performance_tracker.dart 300:15  _NoOpBuilderActionTracker.trackStage
package:build_runner_core/src/generate/build_impl.dart 489:23           _SingleBuild._runForInput.<fn>.<fn>
package:timing/src/timing.dart 222:44                                   NoOpTimeTracker.track
package:build_runner_core/src/generate/build_impl.dart 446:22           _SingleBuild._runForInput.<fn>
package:pool/pool.dart 127:28                                           Pool.withResource
package:build_runner_core/src/generate/build_impl.dart 442:17           _SingleBuild._runForInput
package:build_runner_core/src/generate/build_impl.dart 380:38           _SingleBuild._runBuilder.<fn>
dart:async                                                              Future.wait
package:build_runner_core/src/generate/build_impl.dart 379:36           _SingleBuild._runBuilder
dart:async                                                              _AsyncAwaitCompleter.start
package:build_runner_core/src/generate/build_impl.dart 377:40           _SingleBuild._runBuilder
package:build_runner_core/src/generate/build_impl.dart 325:20           _SingleBuild._runPhases.<fn>.<fn>
dart:async                                                              _completeOnAsyncReturn
package:build_runner_core/src/generate/build_impl.dart                  _SingleBuild._matchingPrimaryInputs

[SEVERE] Build:
Failed after 224ms
pub finished with exit code 1

#0      throwToolExit (package:flutter_tools/src/base/common.dart:28:3)
#1      _DefaultPub.interactively (package:flutter_tools/src/dart/pub.dart:323:7)
<asynchronous suspension>
#2      PackagesPassthroughCommand.runCommand (package:flutter_tools/src/commands/packages.dart:269:15)
<asynchronous suspension>
#3      FlutterCommand.verifyThenRunCommand (package:flutter_tools/src/runner/flutter_command.dart:556:18)
<asynchronous suspension>
#4      FlutterCommand.run.<anonymous closure> (package:flutter_tools/src/runner/flutter_command.dart:456:33)
<asynchronous suspension>
#5      AppContext.run.<anonymous closure> (package:flutter_tools/src/base/context.dart:146:29)
<asynchronous suspension>
#6      _rootRun (dart:async/zone.dart:1124:13)
#7      _CustomZone.run (dart:async/zone.dart:1021:19)
#8      _runZoned (dart:async/zone.dart:1516:10)
#9      runZoned (dart:async/zone.dart:1463:12)
#10     AppContext.run (package:flutter_tools/src/base/context.dart:145:18)
<asynchronous suspension>
#11     FlutterCommand.run (package:flutter_tools/src/runner/flutter_command.dart:446:20)
#12     CommandRunner.runCommand (package:args/command_runner.dart:197:27)
<asynchronous suspension>
#13     FlutterCommandRunner.runCommand.<anonymous closure> (package:flutter_tools/src/runner/flutter_command_runner.dart:416:21)
<asynchronous suspension>
#14     AppContext.run.<anonymous closure> (package:flutter_tools/src/base/context.dart:146:29)
<asynchronous suspension>
#15     _rootRun (dart:async/zone.dart:1124:13)
#16     _CustomZone.run (dart:async/zone.dart:1021:19)
#17     _runZoned (dart:async/zone.dart:1516:10)
#18     runZoned (dart:async/zone.dart:1463:12)
#19     AppContext.run (package:flutter_tools/src/base/context.dart:145:18)
<asynchronous suspension>
#20     FlutterCommandRunner.runCommand (package:flutter_tools/src/runner/flutter_command_runner.dart:367:19)
<asynchronous suspension>
#21     CommandRunner.run.<anonymous closure> (package:args/command_runner.dart:112:25)
#22     new Future.sync (dart:async/future.dart:222:31)
#23     CommandRunner.run (package:args/command_runner.dart:112:14)
#24     FlutterCommandRunner.run (package:flutter_tools/src/runner/flutter_command_runner.dart:251:18)
#25     run.<anonymous closure>.<anonymous closure> (package:flutter_tools/runner.dart:63:22)
<asynchronous suspension>
#26     _rootRun (dart:async/zone.dart:1124:13)
#27     _CustomZone.run (dart:async/zone.dart:1021:19)
#28     _runZoned (dart:async/zone.dart:1516:10)
#29     runZoned (dart:async/zone.dart:1500:12)
#30     run.<anonymous closure> (package:flutter_tools/runner.dart:61:18)
<asynchronous suspension>
#31     AppContext.run.<anonymous closure> (package:flutter_tools/src/base/context.dart:146:29)
<asynchronous suspension>
#32     _rootRun (dart:async/zone.dart:1124:13)
#33     _CustomZone.run (dart:async/zone.dart:1021:19)
#34     _runZoned (dart:async/zone.dart:1516:10)
#35     runZoned (dart:async/zone.dart:1463:12)
#36     AppContext.run (package:flutter_tools/src/base/context.dart:145:18)
<asynchronous suspension>
#37     runInContext (package:flutter_tools/src/context_runner.dart:65:24)
<asynchronous suspension>
#38     run (package:flutter_tools/runner.dart:50:10)
#39     main (package:flutter_tools/executable.dart:65:9)
<asynchronous suspension>
#40     main (file:///Users/ncabasso/Documents/flutter/packages/flutter_tools/bin/flutter_tools.dart:8:3)
#41     _startIsolate.<anonymous closure> (dart:isolate-patch/isolate_patch.dart:303:32)
#42     _RawReceivePortImpl._handleMessage (dart:isolate-patch/isolate_patch.dart:172:12)

Versions :

mobx: ^0.3.9+3
flutter_mobx: ^0.3.3+3
build_runner: ^1.7.1
mobx_codegen: ^0.3.10+1

bug

Most helpful comment

Cool. I'll get that fixed up. I'll post back here when the PR/release goes up.

All 9 comments

The issue seems to go away when I remove the @observable decorators on data structures (Set, ObservableList etc.).

After further investigation, this seems to be related with the use of the var keyword instead of the actual type.

Can you post a snippet? I'll get it fixed up.

@observable
var foo = ObservableSet()

Something like that?

@observable
var foo = ObservableSet()

Something like that?

Yes !

Cool. I'll get that fixed up. I'll post back here when the PR/release goes up.

I'm going to take a stab at fixing this quick and dirty now, but I also posted on the analyzer's tracker to see if there's a more elegant approach.
https://github.com/dart-lang/sdk/issues/39927

This fix is in PR. Should be merged in the next couple of days.

Thanks for your patience on this. mobx_codegen 0.3.12 is being published as we speak, which resolves this issue.

Was this page helpful?
0 / 5 - 0 ratings