From 468e418a77443abaf3a66d23c63fe618d3b53b4d Mon Sep 17 00:00:00 2001 From: Ethan Date: Mon, 25 Nov 2024 11:42:51 -0700 Subject: [PATCH] Implicit supers --- lib/src/eval/bindgen/bridge_declaration.dart | 4 +++- lib/src/eval/bindgen/parameters.dart | 5 +++-- lib/src/eval/bindgen/statics.dart | 17 +++++++++++++++++ lib/src/eval/bindgen/type.dart | 3 ++- lib/src/eval/cli/bind.dart | 2 +- 5 files changed, 26 insertions(+), 5 deletions(-) diff --git a/lib/src/eval/bindgen/bridge_declaration.dart b/lib/src/eval/bindgen/bridge_declaration.dart index 5880c34..809b845 100644 --- a/lib/src/eval/bindgen/bridge_declaration.dart +++ b/lib/src/eval/bindgen/bridge_declaration.dart @@ -38,7 +38,9 @@ String? bindBridgeDeclaration(BindgenContext ctx, ClassElement element) { } var extendsStr = ''; - if (element.supertype != null && !element.supertype!.isDartCoreObject) { + if (element.supertype != null && + !element.supertype!.isDartCoreObject && + !ctx.implicitSupers) { extendsStr = '\n\$extends: ${bridgeTypeRefFromType(ctx, element.supertype!)},'; } diff --git a/lib/src/eval/bindgen/parameters.dart b/lib/src/eval/bindgen/parameters.dart index 40359e5..86a8efa 100644 --- a/lib/src/eval/bindgen/parameters.dart +++ b/lib/src/eval/bindgen/parameters.dart @@ -38,12 +38,13 @@ String _parameterFrom(BindgenContext ctx, ParameterElement parameter) { '''; } -String argumentAccessors(BindgenContext ctx, List params) { +String argumentAccessors(BindgenContext ctx, List params, + {Map paramMapping = const {}}) { final paramBuffer = StringBuffer(); for (var i = 0; i < params.length; i++) { final param = params[i]; if (param.isNamed) { - paramBuffer.write('${param.name}: '); + paramBuffer.write('${paramMapping[param.name] ?? param.name}: '); } final type = param.type; if (type.isDartCoreFunction || type is FunctionType) { diff --git a/lib/src/eval/bindgen/statics.dart b/lib/src/eval/bindgen/statics.dart index c0841f5..d87fb68 100644 --- a/lib/src/eval/bindgen/statics.dart +++ b/lib/src/eval/bindgen/statics.dart @@ -18,6 +18,23 @@ String _$constructor( constructor.name.isNotEmpty ? '.${constructor.name}' : ''; final fullyQualifiedConstructorId = '${element.name}$namedConstructor'; + final oConstructor = constructor; + + final paramMapping = {}; + for (var i = 0; i < constructor.parameters.length; i++) { + final param = constructor.parameters[i]; + paramMapping[param.name] = param.name; + } + + while (constructor.redirectedConstructor != null) { + constructor = constructor.redirectedConstructor!; + for (var i = 0; i < constructor.parameters.length; i++) { + final param = constructor.parameters[i]; + final oParam = oConstructor.parameters[i]; + paramMapping[param.name] = oParam.name; + } + } + return ''' /// Wrapper for the [${element.name}.$name] constructor static \$Value? \$$name(Runtime runtime, \$Value? thisValue, List<\$Value?> args) { diff --git a/lib/src/eval/bindgen/type.dart b/lib/src/eval/bindgen/type.dart index 58640ad..211d585 100644 --- a/lib/src/eval/bindgen/type.dart +++ b/lib/src/eval/bindgen/type.dart @@ -210,7 +210,8 @@ String? wrapType(BindgenContext ctx, DartType type, String expr, final typeEl = type.element; if (typeEl is ClassElement && typeEl.metadata.any((e) => e.element?.displayName == 'Bind')) { - ctx.imports.add(typeEl.library.source.uri.toString()); + ctx.imports.add( + typeEl.library.source.uri.toString().replaceAll('.dart', '.eval.dart')); return '${unionStr}\$$name.wrap($expr)'; } diff --git a/lib/src/eval/cli/bind.dart b/lib/src/eval/cli/bind.dart index 6d3cbd0..4fb82db 100644 --- a/lib/src/eval/cli/bind.dart +++ b/lib/src/eval/cli/bind.dart @@ -9,7 +9,7 @@ import 'package:pubspec_parse/pubspec_parse.dart'; const defaultImports = ''' // ignore_for_file: unused_import // ignore_for_file: unnecessary_import - +// ignore_for_file: no_leading_underscores_for_local_identifiers import 'package:dart_eval/dart_eval.dart'; import 'package:dart_eval/dart_eval_bridge.dart';