From 1c7cfc4baecc0082f9b9e930615bce9b06b8db82 Mon Sep 17 00:00:00 2001 From: Kasefuchs Date: Thu, 25 Apr 2024 21:37:16 +0300 Subject: [PATCH] Add option to disable throw on duplicate dependencies --- injectable/lib/src/injectable_annotations.dart | 7 +++++++ .../lib/generators/injectable_config_generator.dart | 7 ++++++- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/injectable/lib/src/injectable_annotations.dart b/injectable/lib/src/injectable_annotations.dart index 06a8de3..69f2201 100644 --- a/injectable/lib/src/injectable_annotations.dart +++ b/injectable/lib/src/injectable_annotations.dart @@ -59,6 +59,11 @@ class InjectableInit { /// defaults to false final bool throwOnMissingDependencies; + /// throw an error and abort generation + /// in case of duplicate dependencies + /// defaults to true + final bool throwOnDuplicateDependencies; + /// a List of external package modules to be registered /// in the default package initializer before root dependencies /// classes passed here must extend [MicroPackageModule] @@ -89,6 +94,7 @@ class InjectableInit { this.asExtension = true, this.usesNullSafety = true, this.throwOnMissingDependencies = false, + this.throwOnDuplicateDependencies = true, this.includeMicroPackages = true, this.externalPackageModulesAfter, this.externalPackageModulesBefore, @@ -104,6 +110,7 @@ class InjectableInit { this.externalPackageModulesBefore, this.usesConstructorCallback = false, this.throwOnMissingDependencies = false, + this.throwOnDuplicateDependencies = true, this.ignoreUnregisteredTypesInPackages = const [], this.usesNullSafety = true, }) : _isMicroPackage = true, diff --git a/injectable_generator/lib/generators/injectable_config_generator.dart b/injectable_generator/lib/generators/injectable_config_generator.dart index 6ca915c..377cade 100644 --- a/injectable_generator/lib/generators/injectable_config_generator.dart +++ b/injectable_generator/lib/generators/injectable_config_generator.dart @@ -35,6 +35,8 @@ class InjectableConfigGenerator extends GeneratorForAnnotation { annotation.read('usesConstructorCallback').boolValue; final throwOnMissingDependencies = annotation.read('throwOnMissingDependencies').boolValue; + final throwOnDuplicateDependencies = + annotation.read('throwOnDuplicateDependencies').boolValue; final targetFile = element.source?.uri; final preferRelativeImports = annotation.read("preferRelativeImports").boolValue; @@ -141,7 +143,10 @@ class InjectableConfigGenerator extends GeneratorForAnnotation { targetFile, throwOnMissingDependencies, ); - _validateDuplicateDependencies(deps); + + if (throwOnDuplicateDependencies) { + _validateDuplicateDependencies(deps); + } /// don't allow registering of the same dependency with both async and sync factories final groupedByType = deps.groupListsBy((d) => (d.type, d.instanceName));