injectable
injectable copied to clipboard
Improve circular dependencies error message
We have multiple issues closed and not resolved regarding the circular dependencies. I think it would significantly help to print more extended information when StackOverflow error occurs in case of circular dependency.
Like "stackoverflow error trying to resolve dependecy X for Y".
Issues: https://github.com/Milad-Akarie/injectable/issues/59, https://github.com/Milad-Akarie/injectable/issues/184, https://github.com/Milad-Akarie/injectable/issues/273, https://github.com/Milad-Akarie/injectable/issues/369, etc.
Just to add some context, here's the log of stackoverflow:
[SEVERE] injectable_generator:injectable_config_builder on lib/core/locator/locator.dart:
Stack Overflow
dart:collection _LinkedHashSetMixin._add
package:injectable_generator/models/importable_type.dart 20:35 ImportableType.allImports
package:injectable_generator/models/importable_type.dart 43:26 ImportableType.hashCode
package:collection/src/equality.dart 190:32 ListEquality.hash
package:injectable_generator/models/importable_type.dart 46:22 ImportableType.hashCode
package:injectable_generator/models/injected_dependency.dart 36:12 InjectedDependency.hashCode
package:collection/src/equality.dart 190:32 ListEquality.hash
package:injectable_generator/models/dependency_config.dart 127:22 DependencyConfig.hashCode
dart:collection SetBase.difference
package:injectable_generator/code_builder/builder_utils.dart 128:32 _sortByDependents
package:injectable_generator/code_builder/builder_utils.dart 128:5 _sortByDependents
package:injectable_generator/code_builder/builder_utils.dart 128:5 _sortByDependents
package:injectable_generator/code_builder/builder_utils.dart 128:5 _sortByDependents
package:injectable_generator/code_builder/builder_utils.dart 128:5 _sortByDependents
package:injectable_generator/code_builder/builder_utils.dart 128:5 _sortByDependents
package:injectable_generator/code_builder/builder_utils.dart 128:5 _sortByDependents
package:injectable_generator/code_builder/builder_utils.dart 128:5 _sortByDependents
package:injectable_generator/code_builder/builder_utils.dart 128:5 _sortByDependents
package:injectable_generator/code_builder/builder_utils.dart 128:5 _sortByDependents
package:injectable_generator/code_builder/builder_utils.dart 128:5 _sortByDependents
package:injectable_generator/code_builder/builder_utils.dart 128:5 _sortByDependents
package:injectable_generator/code_builder/builder_utils.dart 128:5 _sortByDependents
package:injectable_generator/code_builder/builder_utils.dart 128:5 _sortByDependents
package:injectable_generator/code_builder/builder_utils.dart 128:5 _sortByDependents
package:injectable_generator/code_builder/builder_utils.dart 128:5 _sortByDependents
package:injectable_generator/code_builder/builder_utils.dart 128:5 _sortByDependents
package:injectable_generator/code_builder/builder_utils.dart 128:5 _sortByDependents
package:injectable_generator/code_builder/builder_utils.dart 128:5 _sortByDependents
package:injectable_generator/code_builder/builder_utils.dart 128:5 _sortByDependents
package:injectable_generator/code_builder/builder_utils.dart 128:5 _sortByDependents
package:injectable_generator/code_builder/builder_utils.dart 128:5 _sortByDependents
package:injectable_generator/code_builder/builder_utils.dart 128:5 _sortByDependents
package:injectable_generator/code_builder/builder_utils.dart 128:5 _sortByDependents
package:injectable_generator/code_builder/builder_utils.dart 128:5 _sortByDependents
package:injectable_generator/code_builder/builder_utils.dart 128:5 _sortByDependents
package:injectable_generator/code_builder/builder_utils.dart 128:5 _sortByDependents
package:injectable_generator/code_builder/builder_utils.dart 128:5 _sortByDependents
package:injectable_generator/code_builder/builder_utils.dart 128:5 _sortByDependents
package:injectable_generator/code_builder/builder_utils.dart 128:5 _sortByDependents
package:injectable_generator/code_builder/builder_utils.dart 128:5 _sortByDependents
package:injectable_generator/code_builder/builder_utils.dart 128:5 _sortByDependents
. ...
. ...
package:injectable_generator/code_builder/builder_utils.dart 128:5 _sortByDependents
package:injectable_generator/code_builder/builder_utils.dart 128:5 _sortByDependents
package:injectable_generator/code_builder/builder_utils.dart 128:5 _sortByDependents
package:injectable_generator/code_builder/builder_utils.dart 128:5 _sortByDependents
package:injectable_generator/code_builder/builder_utils.dart 128:5 _sortByDependents
package:injectable_generator/code_builder/builder_utils.dart 128:5 _sortByDependents
package:injectable_generator/code_builder/builder_utils.dart 128:5 _sortByDependents
package:injectable_generator/code_builder/builder_utils.dart 128:5 _sortByDependents
package:injectable_generator/code_builder/builder_utils.dart 128:5 _sortByDependents
package:injectable_generator/code_builder/builder_utils.dart 128:5 _sortByDependents
package:injectable_generator/code_builder/builder_utils.dart 128:5 _sortByDependents
package:injectable_generator/code_builder/builder_utils.dart 128:5 _sortByDependents
package:injectable_generator/code_builder/builder_utils.dart 99:3 sortDependencies
package:injectable_generator/code_builder/builder_utils.dart 16:24 new DependencySet
package:injectable_generator/code_builder/library_builder.dart 105:23 new LibraryGenerator
package:injectable_generator/generators/injectable_config_generator.dart 157:23 InjectableConfigGenerator.generateForAnnotatedElement
I will try to make a PR with an improvement for this case.
We can also try to do something described in #273 and implement setter injection in case of circular dependency is detected, but that's a different story.
This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. Thank you for your contributions