injectable icon indicating copy to clipboard operation
injectable copied to clipboard

Improve circular dependencies error message

Open 0ttik opened this issue 1 year ago • 4 comments

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.

0ttik avatar Oct 24 '23 12:10 0ttik

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

0ttik avatar Oct 25 '23 07:10 0ttik

I will try to make a PR with an improvement for this case.

0ttik avatar Oct 25 '23 07:10 0ttik

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.

0ttik avatar Oct 27 '23 08:10 0ttik

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

github-actions[bot] avatar Nov 26 '23 08:11 github-actions[bot]