mirror of
https://github.com/pese-git/cherrypick.git
synced 2026-01-23 21:13:35 +00:00
feat: implement named dependency
This commit is contained in:
@@ -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'
|
||||||
buffer.write(' bind<$returnType>()'
|
' .toProvide(\n () => $methodName($args))');
|
||||||
'.toProvide(() => $methodName($args))');
|
} else {
|
||||||
|
buffer.write(' bind<$returnType>()'
|
||||||
|
'.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();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user