feat: implement named dependency

This commit is contained in:
Sergey Penkovsky
2025-05-17 21:38:14 +03:00
parent a4ee97b79f
commit 220f1ed097

View File

@@ -20,7 +20,6 @@ class ModuleGenerator extends GeneratorForAnnotation<ann.module> {
final className = classElement.displayName; final className = classElement.displayName;
final generatedClassName = r'$' + className; final generatedClassName = r'$' + className;
final buffer = StringBuffer(); final buffer = StringBuffer();
buffer.writeln('final class $generatedClassName extends $className {'); buffer.writeln('final class $generatedClassName extends $className {');
buffer.writeln(' @override'); buffer.writeln(' @override');
buffer.writeln(' void builder(Scope currentScope) {'); buffer.writeln(' void builder(Scope currentScope) {');
@@ -57,15 +56,50 @@ class ModuleGenerator extends GeneratorForAnnotation<ann.module> {
nameArg = cv.getField('value')?.toStringValue(); nameArg = cv.getField('value')?.toStringValue();
} }
} }
// ЗДЕСЬ ЛОГИКА ДЛЯ ПАРАМЕТРОВ МЕТОДА
final args = method.parameters.map((p) {
// Ищем @named у параметра
ElementAnnotation? paramNamed;
try {
paramNamed = p.metadata.firstWhere(
(m) =>
m
.computeConstantValue()
?.type
?.getDisplayString(withNullability: false)
.toLowerCase()
.contains('named') ??
false,
);
} catch (_) {
paramNamed = null;
}
String namedArg = '';
if (paramNamed != null) {
final cv = paramNamed.computeConstantValue();
if (cv != null) {
final namedValue = cv.getField('value')?.toStringValue();
if (namedValue != null) {
namedArg = "(named: '$namedValue')";
}
}
}
return "currentScope.resolve<${p.type.getDisplayString(withNullability: false)}>$namedArg";
}).join(', ');
final returnType = final returnType =
method.returnType.getDisplayString(withNullability: false); method.returnType.getDisplayString(withNullability: false);
final methodName = method.displayName; final methodName = method.displayName;
final args = method.parameters // С переносом строки, если есть параметры
.map((p) => final hasLongArgs = args.length > 60 || args.contains('\n');
"currentScope.resolve<${p.type.getDisplayString(withNullability: false)}>()") if (hasLongArgs) {
.join(', '); buffer.write(' bind<$returnType>()\n'
' .toProvide(\n () => $methodName($args))');
} else {
buffer.write(' bind<$returnType>()' buffer.write(' bind<$returnType>()'
'.toProvide(() => $methodName($args))'); '.toProvide(() => $methodName($args))');
}
if (nameArg != null) { if (nameArg != null) {
buffer.write(".withName('$nameArg')"); buffer.write(".withName('$nameArg')");
} }
@@ -76,6 +110,7 @@ class ModuleGenerator extends GeneratorForAnnotation<ann.module> {
} }
buffer.writeln(' }'); buffer.writeln(' }');
buffer.writeln('}'); buffer.writeln('}');
return buffer.toString(); return buffer.toString();
} }
} }