From a0df24dd2c6d69b7266a27d16a2d08b44901ed51 Mon Sep 17 00:00:00 2001 From: Ilya Zverev Date: Sat, 3 Jan 2026 23:01:46 +0200 Subject: [PATCH 1/2] Migrate to analyzer 8.2 --- CHANGELOG.md | 3 +- lib/src/eval/bindgen/bindgen.dart | 94 +++++++-------- lib/src/eval/bindgen/bridge.dart | 41 ++++--- lib/src/eval/bindgen/bridge_declaration.dart | 110 +++++++++--------- lib/src/eval/bindgen/configure.dart | 78 ++++++------- lib/src/eval/bindgen/enum.dart | 6 +- lib/src/eval/bindgen/function.dart | 4 +- lib/src/eval/bindgen/methods.dart | 12 +- lib/src/eval/bindgen/parameters.dart | 16 +-- lib/src/eval/bindgen/permission.dart | 10 +- lib/src/eval/bindgen/properties.dart | 38 +++--- lib/src/eval/bindgen/statics.dart | 73 ++++++------ lib/src/eval/bindgen/type.dart | 44 +++---- lib/src/eval/compiler/compiler.dart | 6 +- .../compiler/declaration/constructor.dart | 8 +- .../eval/compiler/expression/identifier.dart | 4 +- .../expression/instance_creation.dart | 4 +- .../eval/compiler/expression/keywords.dart | 2 +- .../expression/method_invocation.dart | 4 +- .../eval/compiler/helpers/argument_list.dart | 4 +- lib/src/eval/compiler/type.dart | 17 ++- lib/src/eval/compiler/util/tree_shake.dart | 2 +- pubspec.yaml | 2 +- 23 files changed, 288 insertions(+), 294 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 61e6a04c..9654b329 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,7 @@ - Support for top level functions in the binding generator - Support for operator overloads in the binding generator - Fix return types of Uri constructors +- Update analyzer to v8. - Improve error messages ## 0.8.2 @@ -481,4 +482,4 @@ with previous versions. ## 0.0.1 - Create parser and interpreter -- Add interop \ No newline at end of file +- Add interop diff --git a/lib/src/eval/bindgen/bindgen.dart b/lib/src/eval/bindgen/bindgen.dart index 034e8af7..cf4b29dd 100644 --- a/lib/src/eval/bindgen/bindgen.dart +++ b/lib/src/eval/bindgen/bindgen.dart @@ -1,7 +1,7 @@ import 'package:analyzer/dart/analysis/analysis_context_collection.dart'; import 'package:analyzer/dart/analysis/results.dart'; import 'package:analyzer/dart/ast/ast.dart'; -import 'package:analyzer/dart/element/element2.dart'; +import 'package:analyzer/dart/element/element.dart'; import 'package:analyzer/file_system/physical_file_system.dart'; import 'package:collection/collection.dart'; import 'package:dart_eval/dart_eval_bridge.dart'; @@ -195,10 +195,10 @@ class Bindgen implements BridgeDeclarationRegistry { } ({bool process, bool isBridge, bool alsoWrap}) _shouldProcess( - BindgenContext ctx, Annotatable element) { - final metadata = element.metadata2; + BindgenContext ctx, Element element) { + final metadata = element.metadata; final bindAnno = metadata.annotations - .firstWhereOrNull((element) => element.element2?.displayName == 'Bind'); + .firstWhereOrNull((element) => element.element?.displayName == 'Bind'); final bindAnnoValue = bindAnno?.computeConstantValue(); if (bindAnnoValue == null && !ctx.all) { @@ -208,10 +208,10 @@ class Bindgen implements BridgeDeclarationRegistry { bindAnnoValue?.getField('implicitSupers')?.toBoolValue() ?? false; ctx.implicitSupers = implicitSupers; final override = bindAnnoValue?.getField('overrideLibrary'); - if (override != null && !override.isNull && element is Element2) { + if (override != null && !override.isNull) { final overrideUri = override.toStringValue(); if (overrideUri != null) { - ctx.libOverrides[(element as Element2).name3!] = overrideUri; + ctx.libOverrides[element.name!] = overrideUri; } } @@ -225,7 +225,7 @@ class Bindgen implements BridgeDeclarationRegistry { ); } - String? _$instance(BindgenContext ctx, ClassElement2 element) { + String? _$instance(BindgenContext ctx, ClassElement element) { final (:process, :isBridge, :alsoWrap) = _shouldProcess(ctx, element); if (!process) { return null; @@ -233,28 +233,28 @@ class Bindgen implements BridgeDeclarationRegistry { if (isBridge && element.isSealed) { throw CompileError( - 'Cannot bind sealed class ${element.name3} as a bridge type. ' + 'Cannot bind sealed class ${element.name} as a bridge type. ' 'Please remove the @Bind annotation, use a wrapper, or make the class non-sealed.'); } registerClasses.add(( file: ctx.filename, - uri: ctx.libOverrides[element.name3!] ?? ctx.uri, - name: '${element.name3!}${isBridge ? '\$bridge' : ''}', + uri: ctx.libOverrides[element.name!] ?? ctx.uri, + name: '${element.name!}${isBridge ? '\$bridge' : ''}', )); if (isBridge) { String code = ''' -/// dart_eval bridge binding for [${element.name3}] -class \$${element.name3}\$bridge extends ${element.name3} with \$Bridge<${element.name3}> { +/// dart_eval bridge binding for [${element.name}] +class \$${element.name}\$bridge extends ${element.name} with \$Bridge<${element.name}> { ${bindForwardedConstructors(ctx, element)} /// Configure this class for use in a [Runtime] ${bindConfigureForRuntime(ctx, element, isBridge: true)} -/// Compile-time type specification of [\$${element.name3}\$bridge] +/// Compile-time type specification of [\$${element.name}\$bridge] ${bindTypeSpec(ctx, element)} -/// Compile-time type declaration of [\$${element.name3}\$bridge] +/// Compile-time type declaration of [\$${element.name}\$bridge] ${bindBridgeType(ctx, element)} -/// Compile-time class declaration of [\$${element.name3}] +/// Compile-time class declaration of [\$${element.name}] ${bindBridgeDeclaration(ctx, element, isBridge: true)} ${$constructors(ctx, element, isBridge: true)} ${$staticMethods(ctx, element)} @@ -270,11 +270,11 @@ ${bindDecoratorMethods(ctx, element)} if (alsoWrap) { // Add a rudimentary wrapper, because you cannot wrap things in a bridge. code += ''' -/// dart_eval lightweight wrapper binding for [${element.name3}] -class \$${element.name3} implements \$Instance { -/// Compile-time type specification of [\$${element.name3}] +/// dart_eval lightweight wrapper binding for [${element.name}] +class \$${element.name} implements \$Instance { +/// Compile-time type specification of [\$${element.name}] ${bindTypeSpec(ctx, element)} -/// Compile-time type declaration of [\$${element.name3}] +/// Compile-time type declaration of [\$${element.name}] ${bindBridgeType(ctx, element)} ${$wrap(ctx, element)} ${$getRuntimeType(element)} @@ -289,15 +289,15 @@ ${$setProperty(ctx, element)} } return ''' -/// dart_eval wrapper binding for [${element.name3}] -class \$${element.name3} implements \$Instance { +/// dart_eval wrapper binding for [${element.name}] +class \$${element.name} implements \$Instance { /// Configure this class for use in a [Runtime] ${bindConfigureForRuntime(ctx, element)} -/// Compile-time type specification of [\$${element.name3}] +/// Compile-time type specification of [\$${element.name}] ${bindTypeSpec(ctx, element)} -/// Compile-time type declaration of [\$${element.name3}] +/// Compile-time type declaration of [\$${element.name}] ${bindBridgeType(ctx, element)} -/// Compile-time class declaration of [\$${element.name3}] +/// Compile-time class declaration of [\$${element.name}] ${bindBridgeDeclaration(ctx, element)} ${$constructors(ctx, element)} ${$staticMethods(ctx, element)} @@ -312,7 +312,7 @@ ${$setProperty(ctx, element)} '''; } - String? _$enum(BindgenContext ctx, EnumElement2 element) { + String? _$enum(BindgenContext ctx, EnumElement element) { final (:process, :isBridge, :alsoWrap) = _shouldProcess(ctx, element); if (!process) { return null; @@ -320,20 +320,20 @@ ${$setProperty(ctx, element)} registerEnums.add(( file: ctx.filename, - uri: ctx.libOverrides[element.name3!] ?? ctx.uri, - name: element.name3!, + uri: ctx.libOverrides[element.name!] ?? ctx.uri, + name: element.name!, )); return ''' -/// dart_eval enum wrapper binding for [${element.name3}] -class \$${element.name3} implements \$Instance { +/// dart_eval enum wrapper binding for [${element.name}] +class \$${element.name} implements \$Instance { /// Configure this enum for use in a [Runtime] ${bindConfigureEnumForRuntime(ctx, element)} - /// Compile-time type specification of [\$${element.name3}] + /// Compile-time type specification of [\$${element.name}] ${bindTypeSpec(ctx, element)} - /// Compile-time type declaration of [\$${element.name3}] + /// Compile-time type declaration of [\$${element.name}] ${bindBridgeType(ctx, element)} - /// Compile-time class declaration of [\$${element.name3}] + /// Compile-time class declaration of [\$${element.name}] ${bindBridgeDeclaration(ctx, element)} ${$enumValues(ctx, element)} ${$staticMethods(ctx, element)} @@ -348,7 +348,7 @@ class \$${element.name3} implements \$Instance { '''; } - String? _$function(BindgenContext ctx, ExecutableElement2 element) { + String? _$function(BindgenContext ctx, ExecutableElement element) { if (element is! TopLevelFunctionElement) return null; final (:process, :isBridge, :alsoWrap) = _shouldProcess(ctx, element); if (!process) { @@ -357,14 +357,14 @@ class \$${element.name3} implements \$Instance { registerFunctions.add(( file: ctx.filename, - uri: ctx.libOverrides[element.name3!] ?? ctx.uri, - name: element.name3!, + uri: ctx.libOverrides[element.name!] ?? ctx.uri, + name: element.name!, )); return ''' -/// dart_eval function wrapper binding for [${element.name3}] -class \$${element.name3}Fn implements EvalCallable { - const \$${element.name3}Fn(); +/// dart_eval function wrapper binding for [${element.name}] +class \$${element.name}Fn implements EvalCallable { + const \$${element.name}Fn(); ${bindConfigureFunctionForRuntime(ctx, element)} ${bindFunctionDeclaration(ctx, element)} @@ -373,16 +373,16 @@ class \$${element.name3}Fn implements EvalCallable { '''; } - String $superclassWrapper(BindgenContext ctx, InterfaceElement2 element) { + String $superclassWrapper(BindgenContext ctx, InterfaceElement element) { final supertype = element.supertype; final objectWrapper = '\$Object(\$value)'; - if (supertype == null || ctx.implicitSupers || element is EnumElement2) { + if (supertype == null || ctx.implicitSupers || element is EnumElement) { ctx.imports.add('package:dart_eval/stdlib/core.dart'); return objectWrapper; } final narrowWrapper = wrapType(ctx, supertype, '\$value'); if (narrowWrapper == null) { - print('Warning: Could not wrap supertype $supertype of ${element.name3},' + print('Warning: Could not wrap supertype $supertype of ${element.name},' ' falling back to \$Object. Add a @Bind annotation to $supertype' ' or set `implicitSupers: true`'); ctx.imports.add('package:dart_eval/stdlib/core.dart'); @@ -391,25 +391,25 @@ class \$${element.name3}Fn implements EvalCallable { return narrowWrapper; } - String $getRuntimeType(InterfaceElement2 element) { + String $getRuntimeType(InterfaceElement element) { return ''' @override int \$getRuntimeType(Runtime runtime) => runtime.lookupType(\$spec); '''; } - String $wrap(BindgenContext ctx, InterfaceElement2 element) { + String $wrap(BindgenContext ctx, InterfaceElement element) { return ''' final \$Instance _superclass; @override - final ${element.name3} \$value; + final ${element.name} \$value; @override - ${element.name3} get \$reified => \$value; + ${element.name} get \$reified => \$value; - /// Wrap a [${element.name3}] in a [\$${element.name3}] - \$${element.name3}.wrap(this.\$value) : _superclass = ${$superclassWrapper(ctx, element)}; + /// Wrap a [${element.name}] in a [\$${element.name}] + \$${element.name}.wrap(this.\$value) : _superclass = ${$superclassWrapper(ctx, element)}; '''; } } diff --git a/lib/src/eval/bindgen/bridge.dart b/lib/src/eval/bindgen/bridge.dart index 09087c61..9c827933 100644 --- a/lib/src/eval/bindgen/bridge.dart +++ b/lib/src/eval/bindgen/bridge.dart @@ -1,46 +1,45 @@ -import 'package:analyzer/dart/element/element2.dart'; +import 'package:analyzer/dart/element/element.dart'; import 'package:analyzer/dart/element/nullability_suffix.dart'; import 'package:analyzer/dart/element/type.dart'; import 'package:dart_eval/src/eval/bindgen/context.dart'; import 'package:dart_eval/src/eval/bindgen/type.dart'; -String bindForwardedConstructors(BindgenContext ctx, ClassElement2 element, +String bindForwardedConstructors(BindgenContext ctx, ClassElement element, {bool isBridge = false}) { - return element.constructors2 + return element.constructors .where((cstr) => !cstr.isPrivate) .map((e) => _$forwardedConstructor(ctx, element, e, isBridge: isBridge)) .join('\n'); } String _$forwardedConstructor( - BindgenContext ctx, ClassElement2 element, ConstructorElement2 constructor, + BindgenContext ctx, ClassElement element, ConstructorElement constructor, {bool isBridge = false}) { - final name = constructor.name3 ?? ''; - final namedConstructor = - constructor.name3 != null && constructor.name3 != 'new' - ? '.${constructor.name3}' - : ''; + final name = constructor.name ?? ''; + final namedConstructor = constructor.name != null && constructor.name != 'new' + ? '.${constructor.name}' + : ''; final fullyQualifiedConstructorId = - '\$${element.name3}\$bridge$namedConstructor'; + '\$${element.name}\$bridge$namedConstructor'; return ''' - /// Forwarded constructor for [${element.name3}.$name] + /// Forwarded constructor for [${element.name}.$name] $fullyQualifiedConstructorId(${parameterHeader(constructor.formalParameters, forConstructor: true)}); '''; } -String bindDecoratorMethods(BindgenContext ctx, ClassElement2 element) { +String bindDecoratorMethods(BindgenContext ctx, ClassElement element) { final methods = { if (ctx.implicitSupers) for (var s in element.allSupertypes) - for (final m in s.element3.methods2) m.name3: m, - for (final m in element.methods2) m.name3: m + for (final m in s.element.methods) m.name: m, + for (final m in element.methods) m.name: m }; return methods.values .where((method) => !method.isPrivate && !method.isStatic) .where( - (m) => !(const ['==', 'toString', 'noSuchMethod'].contains(m.name3))) + (m) => !(const ['==', 'toString', 'noSuchMethod'].contains(m.name))) .map((e) { final returnType = e.returnType; final needsCast = returnType.isDartCoreList || @@ -53,18 +52,18 @@ String bindDecoratorMethods(BindgenContext ctx, ClassElement2 element) { @override $returnType ${e.displayName}(${parameterHeader(e.formalParameters)}) => ${needsCast ? '(' : ''}\$_invoke('${e.displayName}', [ - ${e.formalParameters.map((p) => wrapVar(ctx, p.type, p.name3 ?? '')).join(', ')} - ])${needsCast ? 'as ${returnType.element3!.name3}$q)$q.cast()' : ''}; + ${e.formalParameters.map((p) => wrapVar(ctx, p.type, p.name ?? '')).join(', ')} + ])${needsCast ? 'as ${returnType.element!.name}$q)$q.cast()' : ''}; '''; }).join('\n'); } -String bindDecoratorProperties(BindgenContext ctx, ClassElement2 element) { +String bindDecoratorProperties(BindgenContext ctx, ClassElement element) { final properties = { if (ctx.implicitSupers) for (var s in element.allSupertypes) - for (final p in s.element3.fields2) p.name3: p, - for (final p in element.fields2) p.name3: p + for (final p in s.element.fields) p.name: p, + for (final p in element.fields) p.name: p }; return properties.values @@ -109,7 +108,7 @@ String parameterHeader(List params, } } paramBuffer.write( - param.name3 == null || param.name3!.isEmpty ? 'arg$i' : param.name3); + param.name == null || param.name!.isEmpty ? 'arg$i' : param.name); if (i < params.length - 1) { paramBuffer.write(', '); } diff --git a/lib/src/eval/bindgen/bridge_declaration.dart b/lib/src/eval/bindgen/bridge_declaration.dart index 5f674bb0..7266d020 100644 --- a/lib/src/eval/bindgen/bridge_declaration.dart +++ b/lib/src/eval/bindgen/bridge_declaration.dart @@ -1,19 +1,19 @@ -import 'package:analyzer/dart/element/element2.dart'; +import 'package:analyzer/dart/element/element.dart'; import 'package:dart_eval/src/eval/bindgen/context.dart'; import 'package:dart_eval/src/eval/bindgen/parameters.dart'; import 'package:dart_eval/src/eval/bindgen/type.dart'; -String bindTypeSpec(BindgenContext ctx, InterfaceElement2 element) { - final uri = ctx.libOverrides[element.name3] ?? ctx.uri; +String bindTypeSpec(BindgenContext ctx, InterfaceElement element) { + final uri = ctx.libOverrides[element.name] ?? ctx.uri; return ''' static const \$spec = BridgeTypeSpec( '$uri', - '${element.name3!.replaceAll(r'$', r'\$')}', + '${element.name!.replaceAll(r'$', r'\$')}', ); '''; } -String bindBridgeType(BindgenContext ctx, InterfaceElement2 element) { +String bindBridgeType(BindgenContext ctx, InterfaceElement element) { return ''' static const \$type = BridgeTypeRef(\$spec); '''; @@ -21,37 +21,37 @@ String bindBridgeType(BindgenContext ctx, InterfaceElement2 element) { String bindFunctionDeclaration( BindgenContext ctx, TopLevelFunctionElement element) { - final uri = ctx.libOverrides[element.name3] ?? ctx.uri; + final uri = ctx.libOverrides[element.name] ?? ctx.uri; return ''' static const \$declaration = BridgeFunctionDeclaration( '$uri', - '${element.name3!.replaceAll(r'$', r'\$')}', + '${element.name!.replaceAll(r'$', r'\$')}', ${bridgeFunctionDef(ctx, function: element)} ); '''; } -String? bindBridgeDeclaration(BindgenContext ctx, InterfaceElement2 element, +String? bindBridgeDeclaration(BindgenContext ctx, InterfaceElement element, {bool isBridge = false}) { - if (element is ClassElement2 && element.constructors2.isEmpty) { + if (element is ClassElement && element.constructors.isEmpty) { return null; } var genericsStr = ''; - final typeParams = element.typeParameters2; - if (typeParams.isNotEmpty && element is ClassElement2) { + final typeParams = element.typeParameters; + if (typeParams.isNotEmpty && element is ClassElement) { genericsStr = '''\ngenerics: { ${typeParams.map((e) { final boundStr = e.bound != null && !ctx.implicitSupers ? '\$extends: ${bridgeTypeRefFromType(ctx, e.bound!)}' : ''; - return '\'${e.name3}\': BridgeGenericParam($boundStr)'; + return '\'${e.name}\': BridgeGenericParam($boundStr)'; }).join(',')} },'''; } var extendsStr = ''; - if (element is ClassElement2 && + if (element is ClassElement && element.supertype != null && !element.supertype!.isDartCoreObject && !ctx.implicitSupers) { @@ -60,28 +60,28 @@ String? bindBridgeDeclaration(BindgenContext ctx, InterfaceElement2 element, } var implementsStr = ''; - if (element is ClassElement2 && element.interfaces.isNotEmpty) { + if (element is ClassElement && element.interfaces.isNotEmpty) { implementsStr = '\n\$implements: [${element.interfaces.map((e) => bridgeTypeRefFromType(ctx, e)).join(', ')}],'; } var enumValuesStr = ''; - if (element is EnumElement2) { + if (element is EnumElement) { enumValuesStr = ''' - values: [${element.constants2.map((e) => "'${e.name3}'").join(', ')}], + values: [${element.constants.map((e) => "'${e.name}'").join(', ')}], '''; } return ''' - static const \$declaration = ${element is ClassElement2 ? 'BridgeClassDef(BridgeClassType(' : 'BridgeEnumDef('} + static const \$declaration = ${element is ClassElement ? 'BridgeClassDef(BridgeClassType(' : 'BridgeEnumDef('} \$type, - ${element is ClassElement2 && element.isAbstract ? 'isAbstract: true,' : ''} + ${element is ClassElement && element.isAbstract ? 'isAbstract: true,' : ''} $enumValuesStr $genericsStr $extendsStr $implementsStr - ${element is ClassElement2 ? '),' : ''} - ${element is ClassElement2 ? ''' + ${element is ClassElement ? '),' : ''} + ${element is ClassElement ? ''' constructors: { ${constructors(ctx, element)} }, @@ -98,7 +98,7 @@ ${setters(ctx, element)} fields: { ${fields(ctx, element)} }, - ${element is ClassElement2 ? ''' + ${element is ClassElement ? ''' wrap: ${!isBridge}, bridge: $isBridge, ''' : ''} @@ -106,57 +106,54 @@ ${fields(ctx, element)} '''; } -String constructors(BindgenContext ctx, InterfaceElement2 element) { - return element.constructors2 +String constructors(BindgenContext ctx, InterfaceElement element) { + return element.constructors .where((e) => !e.isPrivate) .map((e) => bridgeConstructorDef(ctx, constructor: e)) .join('\n'); } -String methods(BindgenContext ctx, InterfaceElement2 element) { +String methods(BindgenContext ctx, InterfaceElement element) { final methods = { if (ctx.implicitSupers) for (var s in element.allSupertypes) - for (final m in s.element3.methods2.where((m) => !m.isStatic)) - m.name3: m, - for (final m in element.methods2) m.name3: m + for (final m in s.element.methods.where((m) => !m.isStatic)) m.name: m, + for (final m in element.methods) m.name: m }; return methods.values .where( - (m) => !(const ['==', 'toString', 'noSuchMethod'].contains(m.name3))) + (m) => !(const ['==', 'toString', 'noSuchMethod'].contains(m.name))) .where((m) => !m.isPrivate) .map((m) => bridgeMethodDef(ctx, method: m)) .join('\n'); } -String getters(BindgenContext ctx, InterfaceElement2 element) { +String getters(BindgenContext ctx, InterfaceElement element) { final getters = { if (ctx.implicitSupers) for (var s in element.allSupertypes) - for (final a in s.element3.getters2.where((a) => !a.isStatic)) - a.name3: a, - for (final a in element.getters2) a.name3: a + for (final a in s.element.getters.where((a) => !a.isStatic)) a.name: a, + for (final a in element.getters) a.name: a }; return getters.values - .where((m) => !(const ['hashCode', 'runtimeType'].contains(m.name3))) + .where((m) => !(const ['hashCode', 'runtimeType'].contains(m.name))) .where((element) => !element.isPrivate) .where((element) => !element.isSynthetic || - (element is EnumElement2 && - element.nonSynthetic2 is FieldElement2 && - !(element.nonSynthetic2 as FieldElement2).isEnumConstant)) + (element is EnumElement && + element.nonSynthetic is FieldElement && + !(element.nonSynthetic as FieldElement).isEnumConstant)) .map((e) => bridgeGetterDef(ctx, getter: e)) .join('\n'); } -String setters(BindgenContext ctx, InterfaceElement2 element) { +String setters(BindgenContext ctx, InterfaceElement element) { final setters = { if (ctx.implicitSupers) for (var s in element.allSupertypes) - for (final a in s.element3.setters2.where((a) => !a.isStatic)) - a.name3: a, - for (final a in element.setters2) a.name3: a + for (final a in s.element.setters.where((a) => !a.isStatic)) a.name: a, + for (final a in element.setters) a.name: a }; return setters.values @@ -165,15 +162,14 @@ String setters(BindgenContext ctx, InterfaceElement2 element) { .join('\n'); } -String fields(BindgenContext ctx, InterfaceElement2 element) { +String fields(BindgenContext ctx, InterfaceElement element) { final allFields = { if (ctx.implicitSupers) for (var s in element.allSupertypes) - if (s is ClassElement2) - for (final f - in (s as ClassElement2).fields2.where((f) => !f.isStatic)) - f.name3: f, - for (final f in element.fields2) f.name3: f + if (s is ClassElement) + for (final f in (s as ClassElement).fields.where((f) => !f.isStatic)) + f.name: f, + for (final f in element.fields) f.name: f }; final fields = allFields.values.where((element) => @@ -187,9 +183,9 @@ String fields(BindgenContext ctx, InterfaceElement2 element) { } String bridgeConstructorDef(BindgenContext ctx, - {required ConstructorElement2 constructor}) { + {required ConstructorElement constructor}) { return ''' - '${constructor.name3 == 'new' ? '' : constructor.name3}': BridgeConstructorDef( + '${constructor.name == 'new' ? '' : constructor.name}': BridgeConstructorDef( BridgeFunctionDef( returns: BridgeTypeAnnotation(\$type), namedParams: [${namedParameters(ctx, element: constructor)}], @@ -201,7 +197,7 @@ String bridgeConstructorDef(BindgenContext ctx, } String bridgeFunctionDef(BindgenContext ctx, - {required ExecutableElement2 function}) { + {required ExecutableElement function}) { return ''' BridgeFunctionDef( returns: ${bridgeTypeAnnotationFrom(ctx, function.returnType)}, @@ -211,9 +207,9 @@ String bridgeFunctionDef(BindgenContext ctx, '''; } -String bridgeMethodDef(BindgenContext ctx, {required MethodElement2 method}) { +String bridgeMethodDef(BindgenContext ctx, {required MethodElement method}) { return ''' - '${method.name3}': BridgeMethodDef( + '${method.name}': BridgeMethodDef( ${bridgeFunctionDef(ctx, function: method)} ${method.isStatic ? 'isStatic: true,' : ''} ), @@ -221,9 +217,9 @@ String bridgeMethodDef(BindgenContext ctx, {required MethodElement2 method}) { } String bridgeGetterDef(BindgenContext ctx, - {required PropertyAccessorElement2 getter}) { + {required PropertyAccessorElement getter}) { return ''' - '${getter.name3}': BridgeMethodDef( + '${getter.name}': BridgeMethodDef( ${bridgeFunctionDef(ctx, function: getter)} ${getter.isStatic ? 'isStatic: true,' : ''} ), @@ -231,18 +227,18 @@ String bridgeGetterDef(BindgenContext ctx, } String bridgeSetterDef(BindgenContext ctx, - {required PropertyAccessorElement2 setter}) { + {required PropertyAccessorElement setter}) { return ''' - '${setter.name3}': BridgeMethodDef( + '${setter.name}': BridgeMethodDef( ${bridgeFunctionDef(ctx, function: setter)} ${setter.isStatic ? 'isStatic: true,' : ''} ), '''; } -String bridgeFieldDef(BindgenContext ctx, {required FieldElement2 field}) { +String bridgeFieldDef(BindgenContext ctx, {required FieldElement field}) { return ''' - '${field.name3}': BridgeFieldDef( + '${field.name}': BridgeFieldDef( ${bridgeTypeAnnotationFrom(ctx, field.type)}, isStatic: ${field.isStatic}, ), diff --git a/lib/src/eval/bindgen/configure.dart b/lib/src/eval/bindgen/configure.dart index 8fbe6305..cb6255c8 100644 --- a/lib/src/eval/bindgen/configure.dart +++ b/lib/src/eval/bindgen/configure.dart @@ -1,7 +1,7 @@ -import 'package:analyzer/dart/element/element2.dart'; +import 'package:analyzer/dart/element/element.dart'; import 'package:dart_eval/src/eval/bindgen/context.dart'; -String bindConfigureForRuntime(BindgenContext ctx, ClassElement2 element, +String bindConfigureForRuntime(BindgenContext ctx, ClassElement element, {bool isBridge = false}) => ''' static void configureForRuntime(Runtime runtime) { @@ -12,7 +12,7 @@ static void configureForRuntime(Runtime runtime) { } '''; -String bindConfigureEnumForRuntime(BindgenContext ctx, EnumElement2 element) => +String bindConfigureEnumForRuntime(BindgenContext ctx, EnumElement element) => ''' static void configureForRuntime(Runtime runtime) { ${enumValuesForRuntime(ctx, element)} @@ -24,28 +24,28 @@ static void configureForRuntime(Runtime runtime) { String bindConfigureFunctionForRuntime( BindgenContext ctx, TopLevelFunctionElement element) { - final uri = ctx.libOverrides[element.name3] ?? ctx.uri; + final uri = ctx.libOverrides[element.name] ?? ctx.uri; return ''' static void configureForRuntime(Runtime runtime) { - return runtime.registerBridgeFunc('$uri', '${element.name3!.replaceAll(r'$', r'\$')}', const \$${element.name3}Fn().call); + return runtime.registerBridgeFunc('$uri', '${element.name!.replaceAll(r'$', r'\$')}', const \$${element.name}Fn().call); } '''; } -String enumValuesForRuntime(BindgenContext ctx, EnumElement2 element) { - final uri = ctx.libOverrides[element.name3] ?? ctx.uri; +String enumValuesForRuntime(BindgenContext ctx, EnumElement element) { + final uri = ctx.libOverrides[element.name] ?? ctx.uri; return ''' runtime.registerBridgeEnumValues( '$uri', - '${element.name3}', - \$${element.name3}._\$values + '${element.name}', + \$${element.name}._\$values ); '''; } -String constructorsForRuntime(BindgenContext ctx, ClassElement2 element, +String constructorsForRuntime(BindgenContext ctx, ClassElement element, {bool isBridge = false}) { - return element.constructors2 + return element.constructors .where( (cstr) => (!element.isAbstract || cstr.isFactory) && !cstr.isPrivate) .map((e) => constructorForRuntime(ctx, element, e, isBridge: isBridge)) @@ -53,91 +53,91 @@ String constructorsForRuntime(BindgenContext ctx, ClassElement2 element, } String constructorForRuntime( - BindgenContext ctx, ClassElement2 element, ConstructorElement2 constructor, + BindgenContext ctx, ClassElement element, ConstructorElement constructor, {bool isBridge = false}) { - var name = constructor.name3 ?? ''; + var name = constructor.name ?? ''; if (name == 'new') { name = ''; } - final fullyQualifiedConstructorId = '${element.name3}.$name'; + final fullyQualifiedConstructorId = '${element.name}.$name'; - final staticName = constructor.name3 ?? ''; - final uri = ctx.libOverrides[element.name3] ?? ctx.uri; + final staticName = constructor.name ?? ''; + final uri = ctx.libOverrides[element.name] ?? ctx.uri; final bridgeParam = isBridge ? ', isBridge: true' : ''; return ''' runtime.registerBridgeFunc( '$uri', '$fullyQualifiedConstructorId', - \$${element.name3}${isBridge ? '\$bridge' : ''}.\$$staticName + \$${element.name}${isBridge ? '\$bridge' : ''}.\$$staticName $bridgeParam ); '''; } -String staticMethodsForRuntime(BindgenContext ctx, InterfaceElement2 element, +String staticMethodsForRuntime(BindgenContext ctx, InterfaceElement element, {bool isBridge = false}) { - return element.methods2 + return element.methods .where((e) => e.isStatic && !e.isOperator && !e.isPrivate) .map((e) => staticMethodForRuntime(ctx, element, e, isBridge: isBridge)) .join('\n'); } String staticMethodForRuntime( - BindgenContext ctx, InterfaceElement2 element, MethodElement2 method, + BindgenContext ctx, InterfaceElement element, MethodElement method, {bool isBridge = false}) { - final uri = ctx.libOverrides[element.name3] ?? ctx.uri; + final uri = ctx.libOverrides[element.name] ?? ctx.uri; return ''' runtime.registerBridgeFunc( '$uri', - '${element.name3}.${method.name3}', - \$${element.name3}${isBridge ? '\$bridge' : ''}.\$${method.name3} + '${element.name}.${method.name}', + \$${element.name}${isBridge ? '\$bridge' : ''}.\$${method.name} ); '''; } -String staticGettersForRuntime(BindgenContext ctx, InterfaceElement2 element, +String staticGettersForRuntime(BindgenContext ctx, InterfaceElement element, {bool isBridge = false}) { - return element.getters2 + return element.getters .where((e) => e.isStatic && !e.isPrivate && - (e.nonSynthetic2 is! FieldElement2 || - !(e.nonSynthetic2 as FieldElement2).isEnumConstant)) + (e.nonSynthetic is! FieldElement || + !(e.nonSynthetic as FieldElement).isEnumConstant)) .map((e) => staticGetterForRuntime(ctx, element, e, isBridge: isBridge)) .join('\n'); } -String staticGetterForRuntime(BindgenContext ctx, InterfaceElement2 element, - PropertyAccessorElement2 getter, +String staticGetterForRuntime(BindgenContext ctx, InterfaceElement element, + PropertyAccessorElement getter, {bool isBridge = false}) { - final uri = ctx.libOverrides[element.name3] ?? ctx.uri; + final uri = ctx.libOverrides[element.name] ?? ctx.uri; return ''' runtime.registerBridgeFunc( '$uri', - '${element.name3}.${getter.name3}*g', - \$${element.name3}${isBridge ? '\$bridge' : ''}.\$${getter.name3} + '${element.name}.${getter.name}*g', + \$${element.name}${isBridge ? '\$bridge' : ''}.\$${getter.name} ); '''; } -String staticSettersForRuntime(BindgenContext ctx, InterfaceElement2 element, +String staticSettersForRuntime(BindgenContext ctx, InterfaceElement element, {bool isBridge = false}) { - return element.setters2 + return element.setters .where((e) => e.isStatic && !e.isPrivate) .map((e) => staticSetterForRuntime(ctx, element, e, isBridge: isBridge)) .join('\n'); } -String staticSetterForRuntime(BindgenContext ctx, InterfaceElement2 element, - PropertyAccessorElement2 setter, +String staticSetterForRuntime(BindgenContext ctx, InterfaceElement element, + PropertyAccessorElement setter, {bool isBridge = false}) { - final uri = ctx.libOverrides[element.name3] ?? ctx.uri; + final uri = ctx.libOverrides[element.name] ?? ctx.uri; return ''' runtime.registerBridgeFunc( '$uri', - '${element.name3}.${setter.name3}*s', - \$${element.name3}${isBridge ? '\$bridge' : ''}.set\$${setter.name3} + '${element.name}.${setter.name}*s', + \$${element.name}${isBridge ? '\$bridge' : ''}.set\$${setter.name} ); '''; } diff --git a/lib/src/eval/bindgen/enum.dart b/lib/src/eval/bindgen/enum.dart index e92d317a..3dff27b8 100644 --- a/lib/src/eval/bindgen/enum.dart +++ b/lib/src/eval/bindgen/enum.dart @@ -1,10 +1,10 @@ -import 'package:analyzer/dart/element/element2.dart'; +import 'package:analyzer/dart/element/element.dart'; import 'package:dart_eval/src/eval/bindgen/context.dart'; -String $enumValues(BindgenContext ctx, EnumElement2 element) { +String $enumValues(BindgenContext ctx, EnumElement element) { return ''' static final _\$values = { - ${element.constants2.map((e) => "'${e.name3}': \$${element.name3}.wrap(${element.name3}.${e.name3})").join(', ')} + ${element.constants.map((e) => "'${e.name}': \$${element.name}.wrap(${element.name}.${e.name})").join(', ')} }; '''; } diff --git a/lib/src/eval/bindgen/function.dart b/lib/src/eval/bindgen/function.dart index 69505d92..a922aee4 100644 --- a/lib/src/eval/bindgen/function.dart +++ b/lib/src/eval/bindgen/function.dart @@ -1,10 +1,10 @@ -import 'package:analyzer/dart/element/element2.dart'; +import 'package:analyzer/dart/element/element.dart'; import 'package:analyzer/dart/element/type.dart'; import 'package:dart_eval/src/eval/bindgen/context.dart'; import 'package:dart_eval/src/eval/bindgen/parameters.dart'; import 'package:dart_eval/src/eval/bindgen/type.dart'; -String $function(BindgenContext ctx, ExecutableElement2 element) { +String $function(BindgenContext ctx, ExecutableElement element) { final returnsValue = element.returnType is! VoidType && !element.returnType.isDartCoreNull; return ''' diff --git a/lib/src/eval/bindgen/methods.dart b/lib/src/eval/bindgen/methods.dart index 6acf0229..7303ca48 100644 --- a/lib/src/eval/bindgen/methods.dart +++ b/lib/src/eval/bindgen/methods.dart @@ -1,4 +1,4 @@ -import 'package:analyzer/dart/element/element2.dart'; +import 'package:analyzer/dart/element/element.dart'; import 'package:analyzer/dart/element/type.dart'; import 'package:dart_eval/src/eval/bindgen/context.dart'; import 'package:dart_eval/src/eval/bindgen/operator.dart'; @@ -6,18 +6,18 @@ import 'package:dart_eval/src/eval/bindgen/parameters.dart'; import 'package:dart_eval/src/eval/bindgen/permission.dart'; import 'package:dart_eval/src/eval/bindgen/type.dart'; -String $methods(BindgenContext ctx, InterfaceElement2 element) { +String $methods(BindgenContext ctx, InterfaceElement element) { final methods = { if (ctx.implicitSupers) for (var s in element.allSupertypes) - for (final m in s.element3.methods2) m.name3: m, - for (final m in element.methods2) m.name3: m + for (final m in s.element.methods) m.name: m, + for (final m in element.methods) m.name: m }; return methods.values .where((method) => !method.isPrivate && !method.isStatic) .where( - (m) => !(const ['==', 'toString', 'noSuchMethod'].contains(m.name3))) + (m) => !(const ['==', 'toString', 'noSuchMethod'].contains(m.name))) .map((e) { final returnsValue = e.returnType is! VoidType && !e.returnType.isDartCoreNull; @@ -26,7 +26,7 @@ String $methods(BindgenContext ctx, InterfaceElement2 element) { static const \$Function __${op.name} = \$Function(_${op.name}); static \$Value? _${op.name}(Runtime runtime, \$Value? target, List<\$Value?> args) { ${assertMethodPermissions(e)} - final self = target! as \$${element.name3}; + final self = target! as \$${element.name}; ${returnsValue ? 'final result = ' : ''}${op.format('self.\$value', argumentAccessors(ctx, e.formalParameters))}; return ${wrapVar(ctx, e.returnType, 'result')}; }'''; diff --git a/lib/src/eval/bindgen/parameters.dart b/lib/src/eval/bindgen/parameters.dart index b7d61107..7992772e 100644 --- a/lib/src/eval/bindgen/parameters.dart +++ b/lib/src/eval/bindgen/parameters.dart @@ -1,4 +1,4 @@ -import 'package:analyzer/dart/element/element2.dart'; +import 'package:analyzer/dart/element/element.dart'; import 'package:analyzer/dart/element/type.dart'; import 'package:collection/collection.dart'; import 'package:dart_eval/src/eval/bindgen/bridge.dart'; @@ -6,7 +6,7 @@ import 'package:dart_eval/src/eval/bindgen/context.dart'; import 'package:dart_eval/src/eval/bindgen/type.dart'; String namedParameters(BindgenContext ctx, - {required ExecutableElement2 element}) { + {required ExecutableElement element}) { final params = element.formalParameters.where((e) => e.isNamed); if (params.isEmpty) { return ''; @@ -16,7 +16,7 @@ String namedParameters(BindgenContext ctx, } String positionalParameters(BindgenContext ctx, - {required ExecutableElement2 element}) { + {required ExecutableElement element}) { final params = element.formalParameters.where((e) => e.isPositional); if (params.isEmpty) { return ''; @@ -33,7 +33,7 @@ String parameters(BindgenContext ctx, List params) { String _parameterFrom(BindgenContext ctx, FormalParameterElement parameter) { return ''' BridgeParameter( - '${parameter.name3}', + '${parameter.name}', ${bridgeTypeAnnotationFrom(ctx, parameter.type)}, ${parameter.isOptional ? 'true' : 'false'}, ), @@ -47,7 +47,7 @@ String argumentAccessor( final paramBuffer = StringBuffer(); final idx = index + (isBridgeMethod ? 1 : 0); if (param.isNamed) { - paramBuffer.write('${paramMapping[param.name3] ?? param.name3}: '); + paramBuffer.write('${paramMapping[param.name] ?? param.name}: '); } final type = param.type; if (type.isDartCoreFunction || type is FunctionType) { @@ -67,9 +67,9 @@ String argumentAccessor( if (type is FunctionType) { for (var j = 0; j < type.formalParameters.length; j++) { final ftParam = type.formalParameters[j]; - final name = ftParam.name3 == null || ftParam.name3!.isEmpty + final name = ftParam.name == null || ftParam.name!.isEmpty ? 'arg$j' - : ftParam.name3!; + : ftParam.name!; paramBuffer .write(wrapVar(ctx, ftParam.type, name, forCollection: true)); if (j < type.formalParameters.length - 1) { @@ -102,7 +102,7 @@ String argumentAccessor( } if (needsCast) { final q = (param.isRequired ? '' : '?'); - paramBuffer.write(' as ${type.element3!.name3}$q'); + paramBuffer.write(' as ${type.element!.name}$q'); paramBuffer.write(')$q.cast()'); } } diff --git a/lib/src/eval/bindgen/permission.dart b/lib/src/eval/bindgen/permission.dart index 081b23f6..4a015e1d 100644 --- a/lib/src/eval/bindgen/permission.dart +++ b/lib/src/eval/bindgen/permission.dart @@ -1,10 +1,10 @@ -import 'package:analyzer/dart/element/element2.dart'; +import 'package:analyzer/dart/element/element.dart'; -String assertMethodPermissions(MethodElement2 element) { - final metadata = element.metadata2; +String assertMethodPermissions(MethodElement element) { + final metadata = element.metadata; final permissions = metadata.annotations - .where((e) => e.element2?.displayName == 'AssertPermission'); + .where((e) => e.element?.displayName == 'AssertPermission'); String output = ''; for (final permission in permissions) { @@ -26,7 +26,7 @@ String assertMethodPermissions(MethodElement2 element) { final params = element.formalParameters; for (var i = 0; i < params.length; i++) { final param = params[i]; - if (param.name3 == paramData) { + if (param.name == paramData) { final nullCheck = param.isRequired ? '!' : '?'; final defaultValue = param.hasDefaultValue ? ' ?? ${param.defaultValueCode}' : ''; diff --git a/lib/src/eval/bindgen/properties.dart b/lib/src/eval/bindgen/properties.dart index 52ab6c48..38f1c694 100644 --- a/lib/src/eval/bindgen/properties.dart +++ b/lib/src/eval/bindgen/properties.dart @@ -1,4 +1,4 @@ -import 'package:analyzer/dart/element/element2.dart'; +import 'package:analyzer/dart/element/element.dart'; import 'package:analyzer/dart/element/type.dart'; import 'package:dart_eval/src/eval/bindgen/context.dart'; import 'package:dart_eval/src/eval/bindgen/operator.dart'; @@ -6,7 +6,7 @@ import 'package:dart_eval/src/eval/bindgen/parameters.dart'; import 'package:dart_eval/src/eval/bindgen/permission.dart'; import 'package:dart_eval/src/eval/bindgen/type.dart'; -String $getProperty(BindgenContext ctx, InterfaceElement2 element) { +String $getProperty(BindgenContext ctx, InterfaceElement element) { return ''' @override \$Value? \$getProperty(Runtime runtime, String identifier) { @@ -16,7 +16,7 @@ String $getProperty(BindgenContext ctx, InterfaceElement2 element) { '''; } -String $bridgeGet(BindgenContext ctx, ClassElement2 element) { +String $bridgeGet(BindgenContext ctx, ClassElement element) { return ''' @override \$Value? \$bridgeGet(String identifier) { @@ -26,22 +26,22 @@ String $bridgeGet(BindgenContext ctx, ClassElement2 element) { '''; } -String propertyGetters(BindgenContext ctx, InterfaceElement2 element, +String propertyGetters(BindgenContext ctx, InterfaceElement element, {bool isBridge = false}) { final methods = { if (ctx.implicitSupers) for (var s in element.allSupertypes) - for (final m in s.element3.methods2) m.name3: m, - for (final m in element.methods2) m.name3: m + for (final m in s.element.methods) m.name: m, + for (final m in element.methods) m.name: m }; - final getters = element.getters2 + final getters = element.getters .where((accessor) => !accessor.isStatic && !accessor.isPrivate) - .where((a) => !(const ['hashCode', 'runtimeType'].contains(a.name3))); + .where((a) => !(const ['hashCode', 'runtimeType'].contains(a.name))); final methods0 = methods.values .where((method) => !method.isPrivate && !method.isStatic) .where( - (m) => !(const ['==', 'toString', 'noSuchMethod'].contains(m.name3))); + (m) => !(const ['==', 'toString', 'noSuchMethod'].contains(m.name))); if (getters.isEmpty && methods0.isEmpty) { return ''; } @@ -49,7 +49,7 @@ String propertyGetters(BindgenContext ctx, InterfaceElement2 element, return 'switch (identifier) {\n${getters.map((e) => ''' case '${e.displayName}': final _${e.displayName} = super.${e.displayName}; - return ${wrapVar(ctx, e.type.returnType, '_${e.displayName}', metadata: e.metadata2.annotations)}; + return ${wrapVar(ctx, e.type.returnType, '_${e.displayName}', metadata: e.metadata.annotations)}; ''').join('\n')}${methods0.map((e) { final returnsValue = e.returnType is! VoidType && !e.returnType.isDartCoreNull; @@ -64,16 +64,16 @@ String propertyGetters(BindgenContext ctx, InterfaceElement2 element, }).join('\n')}\n}'; } return 'switch (identifier) {\n${getters.map((e) => ''' - case '${e.name3}': - final _${e.name3} = \$value.${e.name3}; - return ${wrapVar(ctx, e.type.returnType, '_${e.name3}', metadata: e.metadata2.annotations)}; + case '${e.name}': + final _${e.name} = \$value.${e.name}; + return ${wrapVar(ctx, e.type.returnType, '_${e.name}', metadata: e.metadata.annotations)}; ''').join('\n')}${methods0.map((e) => ''' - case '${e.name3}': - return __${resolveMethodOperator(e.name3!).name}; + case '${e.name}': + return __${resolveMethodOperator(e.name!).name}; ''').join('\n')}\n}'; } -String $setProperty(BindgenContext ctx, InterfaceElement2 element) { +String $setProperty(BindgenContext ctx, InterfaceElement element) { return ''' @override void \$setProperty(Runtime runtime, String identifier, \$Value value) { @@ -83,7 +83,7 @@ String $setProperty(BindgenContext ctx, InterfaceElement2 element) { '''; } -String $bridgeSet(BindgenContext ctx, ClassElement2 element) { +String $bridgeSet(BindgenContext ctx, ClassElement element) { return ''' @override void \$bridgeSet(String identifier, \$Value value) { @@ -92,9 +92,9 @@ String $bridgeSet(BindgenContext ctx, ClassElement2 element) { '''; } -String propertySetters(BindgenContext ctx, InterfaceElement2 element, +String propertySetters(BindgenContext ctx, InterfaceElement element, {bool isBridge = false}) { - final setters = element.setters2 + final setters = element.setters .where((element) => !element.isStatic && !element.isPrivate); if (setters.isEmpty) { return ''; diff --git a/lib/src/eval/bindgen/statics.dart b/lib/src/eval/bindgen/statics.dart index d9e0c6c1..8feb1427 100644 --- a/lib/src/eval/bindgen/statics.dart +++ b/lib/src/eval/bindgen/statics.dart @@ -1,12 +1,12 @@ -import 'package:analyzer/dart/element/element2.dart'; +import 'package:analyzer/dart/element/element.dart'; import 'package:dart_eval/src/eval/bindgen/context.dart'; import 'package:dart_eval/src/eval/bindgen/parameters.dart'; import 'package:dart_eval/src/eval/bindgen/permission.dart'; import 'package:dart_eval/src/eval/bindgen/type.dart'; -String $constructors(BindgenContext ctx, ClassElement2 element, +String $constructors(BindgenContext ctx, ClassElement element, {bool isBridge = false}) { - return element.constructors2 + return element.constructors .where( (cstr) => !cstr.isPrivate && (cstr.isFactory || !element.isAbstract)) .map((e) => _$constructor(ctx, element, e, isBridge: isBridge)) @@ -14,23 +14,22 @@ String $constructors(BindgenContext ctx, ClassElement2 element, } String _$constructor( - BindgenContext ctx, ClassElement2 element, ConstructorElement2 constructor, + BindgenContext ctx, ClassElement element, ConstructorElement constructor, {bool isBridge = false}) { - final name = constructor.name3 ?? ''; - final namedConstructor = - constructor.name3 != null && constructor.name3 != 'new' - ? '.${constructor.name3}' - : ''; + final name = constructor.name ?? ''; + final namedConstructor = constructor.name != null && constructor.name != 'new' + ? '.${constructor.name}' + : ''; final fullyQualifiedConstructorId = isBridge - ? '\$${element.name3}\$bridge$namedConstructor' - : '${element.name3}$namedConstructor'; + ? '\$${element.name}\$bridge$namedConstructor' + : '${element.name}$namedConstructor'; /*final oConstructor = constructor; final paramMapping = {}; for (var i = 0; i < constructor.formalParameters.length; i++) { final param = constructor.formalParameters[i]; - paramMapping[param.name3!] = param.name3!; + paramMapping[param.name!] = param.name!; } while (constructor.redirectedConstructor2 != null) { @@ -38,14 +37,14 @@ String _$constructor( for (var i = 0; i < constructor.formalParameters.length; i++) { final param = constructor.formalParameters[i]; final oParam = oConstructor.formalParameters[i]; - paramMapping[param.name3!] = oParam.name3!; + paramMapping[param.name!] = oParam.name!; } }*/ return ''' - /// ${isBridge ? 'Proxy' : 'Wrapper'} for the [${element.name3}.$name] constructor + /// ${isBridge ? 'Proxy' : 'Wrapper'} for the [${element.name}.$name] constructor static \$Value? \$$name(Runtime runtime, \$Value? thisValue, List<\$Value?> args) { - return ${!isBridge ? '\$${element.name3}.wrap(' : ''} + return ${!isBridge ? '\$${element.name}.wrap(' : ''} $fullyQualifiedConstructorId( ${argumentAccessors(ctx, constructor.formalParameters).join(', ')} ${!isBridge ? '),' : ''} @@ -54,20 +53,20 @@ String _$constructor( '''; } -String $staticMethods(BindgenContext ctx, InterfaceElement2 element) { - return element.methods2 +String $staticMethods(BindgenContext ctx, InterfaceElement element) { + return element.methods .where((e) => e.isStatic && !e.isOperator && !e.isPrivate) .map((e) => _$staticMethod(ctx, element, e)) .join('\n'); } String _$staticMethod( - BindgenContext ctx, InterfaceElement2 element, MethodElement2 method) { + BindgenContext ctx, InterfaceElement element, MethodElement method) { return ''' - /// Wrapper for the [${element.name3}.${method.name3}] method - static \$Value? \$${method.name3}(Runtime runtime, \$Value? target, List<\$Value?> args) { + /// Wrapper for the [${element.name}.${method.name}] method + static \$Value? \$${method.name}(Runtime runtime, \$Value? target, List<\$Value?> args) { ${assertMethodPermissions(method)} - final value = ${element.name3}.${method.name3}( + final value = ${element.name}.${method.name}( ${argumentAccessors(ctx, method.formalParameters).join(', ')} ); return ${wrapVar(ctx, method.returnType, "value")}; @@ -75,41 +74,41 @@ String _$staticMethod( '''; } -String $staticGetters(BindgenContext ctx, InterfaceElement2 element) { - return element.getters2 +String $staticGetters(BindgenContext ctx, InterfaceElement element) { + return element.getters .where((e) => e.isStatic && !e.isPrivate && - (e.nonSynthetic2 is! FieldElement2 || - !(e.nonSynthetic2 as FieldElement2).isEnumConstant)) + (e.nonSynthetic is! FieldElement || + !(e.nonSynthetic as FieldElement).isEnumConstant)) .map((e) => _$staticGetter(ctx, element, e)) .join('\n'); } -String _$staticGetter(BindgenContext ctx, InterfaceElement2 element, - PropertyAccessorElement2 getter) { +String _$staticGetter(BindgenContext ctx, InterfaceElement element, + PropertyAccessorElement getter) { return ''' - /// Wrapper for the [${element.name3}.${getter.name3}] getter - static \$Value? \$${getter.name3}(Runtime runtime, \$Value? target, List<\$Value?> args) { - final value = ${element.name3}.${getter.name3}; + /// Wrapper for the [${element.name}.${getter.name}] getter + static \$Value? \$${getter.name}(Runtime runtime, \$Value? target, List<\$Value?> args) { + final value = ${element.name}.${getter.name}; return ${wrapVar(ctx, getter.returnType, "value")}; } '''; } -String $staticSetters(BindgenContext ctx, InterfaceElement2 element) { - return element.setters2 +String $staticSetters(BindgenContext ctx, InterfaceElement element) { + return element.setters .where((e) => e.isStatic && !e.isPrivate) .map((e) => _$staticSetter(ctx, element, e)) .join('\n'); } -String _$staticSetter(BindgenContext ctx, InterfaceElement2 element, - PropertyAccessorElement2 setter) { +String _$staticSetter(BindgenContext ctx, InterfaceElement element, + PropertyAccessorElement setter) { return ''' - /// Wrapper for the [${element.name3}.${setter.name3}] setter - static \$Value? set\$${setter.name3}(Runtime runtime, \$Value? target, List<\$Value?> args) { - ${element.name3}.${setter.name3} = args[0]!.\$value; + /// Wrapper for the [${element.name}.${setter.name}] setter + static \$Value? set\$${setter.name}(Runtime runtime, \$Value? target, List<\$Value?> args) { + ${element.name}.${setter.name} = args[0]!.\$value; return null; } '''; diff --git a/lib/src/eval/bindgen/type.dart b/lib/src/eval/bindgen/type.dart index 1ebf9c74..e2667314 100644 --- a/lib/src/eval/bindgen/type.dart +++ b/lib/src/eval/bindgen/type.dart @@ -1,4 +1,4 @@ -import 'package:analyzer/dart/element/element2.dart'; +import 'package:analyzer/dart/element/element.dart'; import 'package:analyzer/dart/element/nullability_suffix.dart'; import 'package:analyzer/dart/element/type.dart'; import 'package:change_case/change_case.dart'; @@ -10,7 +10,7 @@ import 'package:path/path.dart' as path; String bridgeTypeRefFromType(BindgenContext ctx, DartType type) { if (type is TypeParameterType) { - return 'BridgeTypeRef.ref(\'${type.element3.name3}\')'; + return 'BridgeTypeRef.ref(\'${type.element.name}\')'; } else if (type is FunctionType) { return '''BridgeTypeRef.genericFunction(BridgeFunctionDef( returns: ${bridgeTypeAnnotationFrom(ctx, type.returnType)}, @@ -42,10 +42,10 @@ String bridgeTypeSpecFrom(BindgenContext ctx, DartType type) { if (builtin != null) { return builtin; } - final element = type.element3!; - final lib = element.library2!; - final uri = ctx.libOverrides[element.name3] ?? lib.uri.toString(); - return 'BridgeTypeSpec(\'$uri\', \'${element.name3!.replaceAll(r'$', r'\$')}\')'; + final element = type.element!; + final lib = element.library!; + final uri = ctx.libOverrides[element.name] ?? lib.uri.toString(); + return 'BridgeTypeSpec(\'$uri\', \'${element.name!.replaceAll(r'$', r'\$')}\')'; } String? builtinTypeFrom(DartType type) { @@ -68,9 +68,9 @@ String? builtinTypeFrom(DartType type) { return 'CoreTypes.record'; } - final element = type.element3!; - final lib = element.library2!; - final name = element.name3 ?? ' '; + final element = type.element!; + final lib = element.library!; + final name = element.name ?? ' '; final lowerCamelCaseName = name.toCamelCase(); if (!lib.isInSdk) { @@ -126,8 +126,8 @@ String? wrapVar(BindgenContext ctx, DartType type, String expr, wrapType(ctx, type, expr, metadata: metadata, wrapList: wrapList); if (wrapped == null) { - if (ctx.unknownTypes.add(type.element3!.name3!)) { - print('Warning: type ${type.element3!.name3} is not bound, ' + if (ctx.unknownTypes.add(type.element!.name!)) { + print('Warning: type ${type.element!.name} is not bound, ' 'falling back to wrapAlways()'); } wrapped = 'runtime.wrapAlways($expr)'; @@ -146,7 +146,7 @@ String? wrapVar(BindgenContext ctx, DartType type, String expr, String? wrapType(BindgenContext ctx, DartType type, String expr, {bool wrapList = false, List? metadata}) { final union = - metadata?.firstWhereOrNull((e) => e.element2?.displayName == 'UnionOf'); + metadata?.firstWhereOrNull((e) => e.element?.displayName == 'UnionOf'); String unionStr = ''; if (union != null) { final types = @@ -157,10 +157,10 @@ String? wrapType(BindgenContext ctx, DartType type, String expr, if (type0 == null) { continue; } - ctx.imports.add(type0.element3!.library2!.uri.toString()); + ctx.imports.add(type0.element!.library!.uri.toString()); final wrapper = wrapVar(ctx, type0, expr); - unionStr += '$expr is ${type0.element3!.name3} ? $wrapper : '; + unionStr += '$expr is ${type0.element!.name} ? $wrapper : '; } } } @@ -184,10 +184,10 @@ String? wrapType(BindgenContext ctx, DartType type, String expr, return '$unionStr\$Function((runtime, target, args) => $expr())'; } - final element = type.element3 ?? + final element = type.element ?? (throw BindingGenerationError('Type $type has no element')); - final lib = element.library2!; - final name = element.name3 ?? ' '; + final lib = element.library!; + final name = element.name ?? ' '; final defaultCstr = {'int', 'num', 'double', 'bool', 'String', 'Object'}; @@ -219,11 +219,11 @@ String? wrapType(BindgenContext ctx, DartType type, String expr, return '$unionStr\$$name.wrap($expr)'; } - final typeEl = type.element3!; - if (typeEl is InterfaceElement2) { - final uri = typeEl.library2.uri.toString(); - final hasAnno = typeEl.metadata2.annotations - .any((e) => e.element2?.displayName == 'Bind'); + final typeEl = type.element!; + if (typeEl is InterfaceElement) { + final uri = typeEl.library.uri.toString(); + final hasAnno = typeEl.metadata.annotations + .any((e) => e.element?.displayName == 'Bind'); if (hasAnno) { ctx.imports.add(uri.replaceAll('.dart', '.eval.dart')); return '$unionStr\$$name.wrap($expr)'; diff --git a/lib/src/eval/compiler/compiler.dart b/lib/src/eval/compiler/compiler.dart index a55458ad..e02843c6 100644 --- a/lib/src/eval/compiler/compiler.dart +++ b/lib/src/eval/compiler/compiler.dart @@ -865,9 +865,9 @@ List _buildLibraries(Iterable units) { /// Establish a mapping relationship compilationUnitMap[i] = unit; uriMap[unit.uri.toString()] = i; - if (unit.library != null && unit.library!.name2 != null) { + if (unit.library != null && unit.library!.name != null) { /// Library instruction for source files that start with "library *****" - libraryIdMap[unit.library!.name2!.name] = i; + libraryIdMap[unit.library!.name!.name] = i; } i++; } @@ -891,7 +891,7 @@ List _buildLibraries(Iterable units) { : group.firstWhere((e) => compilationUnitMap[e]!.partOf == null); final primary = compilationUnitMap[primaryId]!; final library = Library(primary.uri, - library: primary.library?.name2?.name, + library: primary.library?.name?.name, imports: primary.imports, exports: primary.exports, declarations: group.map((e) => compilationUnitMap[e]!).fold( diff --git a/lib/src/eval/compiler/declaration/constructor.dart b/lib/src/eval/compiler/declaration/constructor.dart index 1ab07cd1..58354133 100644 --- a/lib/src/eval/compiler/declaration/constructor.dart +++ b/lib/src/eval/compiler/declaration/constructor.dart @@ -200,7 +200,7 @@ void compileConstructorDeclaration( $super = BuiltinValue().push(ctx); } else { final prefix = $extends.superclass.importPrefix; - final clsName = $extends.superclass.name2.lexeme; + final clsName = $extends.superclass.name.lexeme; extendsWhat = (prefix != null ? ctx.visibleDeclarations[ctx.library]![prefix.name.value()] : ctx.visibleDeclarations[ctx.library]![clsName]) ?? @@ -364,7 +364,7 @@ void compileConstructorDeclaration( final op = BridgeInstantiate.make( instOffset, ctx.bridgeStaticFunctionIndices[extendsDecl.sourceLib]![ - '${$extends.superclass.name2.value()}.$constructorName']!); + '${$extends.superclass.name.value()}.$constructorName']!); ctx.pushOp(op, BridgeInstantiate.len(op)); final bridgeInst = Variable.alloc(ctx, CoreTypes.dynamic.ref(ctx)); @@ -412,7 +412,7 @@ void compileDefaultConstructor(CompilerContext ctx, $super = BuiltinValue().push(ctx); } else { final prefix = $extends.superclass.importPrefix; - final clsName = $extends.superclass.name2.lexeme; + final clsName = $extends.superclass.name.lexeme; extendsWhat = (prefix != null ? ctx.visibleDeclarations[ctx.library]![prefix.name.value()] : ctx.visibleDeclarations[ctx.library]![clsName]) ?? @@ -483,7 +483,7 @@ void compileDefaultConstructor(CompilerContext ctx, final op = BridgeInstantiate.make( instOffset, ctx.bridgeStaticFunctionIndices[extendsDecl.sourceLib]![ - '${$extends.superclass.name2.lexeme}.$constructorName']!); + '${$extends.superclass.name.lexeme}.$constructorName']!); ctx.pushOp(op, BridgeInstantiate.len(op)); final bridgeInst = Variable.alloc(ctx, CoreTypes.dynamic.ref(ctx)); diff --git a/lib/src/eval/compiler/expression/identifier.dart b/lib/src/eval/compiler/expression/identifier.dart index fb46ad54..1e83acbd 100644 --- a/lib/src/eval/compiler/expression/identifier.dart +++ b/lib/src/eval/compiler/expression/identifier.dart @@ -104,7 +104,7 @@ Pair? resolveInstanceDeclaration( final $extendsClause = $dec is ClassDeclaration ? $dec.extendsClause : null; if ($withClause != null) { for (final $mixin in $withClause.mixinTypes) { - final mixinType = ctx.visibleTypes[library]![$mixin.name2.stringValue!]!; + final mixinType = ctx.visibleTypes[library]![$mixin.name.stringValue!]!; final result = resolveInstanceDeclaration(ctx, mixinType.file, mixinType.name, name); if (result != null) { @@ -116,7 +116,7 @@ Pair? resolveInstanceDeclaration( final prefix = $extendsClause.superclass.importPrefix; final extendsType = ctx.visibleTypes[library]![ '${prefix != null ? '${prefix.name.value()}.' : ''}' - '${$extendsClause.superclass.name2.value()}']!; + '${$extendsClause.superclass.name.value()}']!; return resolveInstanceDeclaration( ctx, extendsType.file, extendsType.name, name); } else { diff --git a/lib/src/eval/compiler/expression/instance_creation.dart b/lib/src/eval/compiler/expression/instance_creation.dart index 77ed9164..f0f4c134 100644 --- a/lib/src/eval/compiler/expression/instance_creation.dart +++ b/lib/src/eval/compiler/expression/instance_creation.dart @@ -16,8 +16,8 @@ Variable compileInstanceCreation( final type = e.constructorName.type; final name = type.importPrefix == null ? (e.constructorName.name?.name ?? '') - : type.name2.lexeme; - final typeName = type.importPrefix?.name.lexeme ?? type.name2.lexeme; + : type.name.lexeme; + final typeName = type.importPrefix?.name.lexeme ?? type.name.lexeme; final $resolved = IdentifierReference(null, typeName).getValue(ctx); if ($resolved.concreteTypes.isEmpty) { diff --git a/lib/src/eval/compiler/expression/keywords.dart b/lib/src/eval/compiler/expression/keywords.dart index e1a05665..d2fb6d22 100644 --- a/lib/src/eval/compiler/expression/keywords.dart +++ b/lib/src/eval/compiler/expression/keywords.dart @@ -22,7 +22,7 @@ Variable compileSuperExpression(SuperExpression e, CompilerContext ctx) { final extendsClause = (ctx.currentClass as ClassDeclaration).extendsClause; if (extendsClause != null) { type = - ctx.visibleTypes[ctx.library]![extendsClause.superclass.name2.value()]!; + ctx.visibleTypes[ctx.library]![extendsClause.superclass.name.value()]!; } final $this = ctx.lookupLocal('#this')!; diff --git a/lib/src/eval/compiler/expression/method_invocation.dart b/lib/src/eval/compiler/expression/method_invocation.dart index 56a44161..49ebf744 100644 --- a/lib/src/eval/compiler/expression/method_invocation.dart +++ b/lib/src/eval/compiler/expression/method_invocation.dart @@ -177,7 +177,7 @@ Variable compileMethodInvocation(CompilerContext ctx, MethodInvocation e, resolveGenerics: resolveGenerics); if (returnAnnotation != null && returnAnnotation is NamedType) { - final g = resolveGenerics[returnAnnotation.name2.value()]; + final g = resolveGenerics[returnAnnotation.name.value()]; if (g != null) { mReturnType = AlwaysReturnType(g, returnAnnotation.question != null); } @@ -376,7 +376,7 @@ DeclarationOrBridge resolveInstanceMethod( ctx, CoreTypes.object.ref(ctx), methodName, source, bottomType0); } final $supertype = ctx.visibleTypes[instanceType.file]![ - $class.extendsClause!.superclass.name2.value()]!; + $class.extendsClause!.superclass.name.value()]!; return resolveInstanceMethod( ctx, $supertype, methodName, source, bottomType0); } diff --git a/lib/src/eval/compiler/helpers/argument_list.dart b/lib/src/eval/compiler/helpers/argument_list.dart index e92b475d..b9edea27 100644 --- a/lib/src/eval/compiler/helpers/argument_list.dart +++ b/lib/src/eval/compiler/helpers/argument_list.dart @@ -115,7 +115,7 @@ Pair, Map> compileArgumentList( if (typeAnnotation != null) { final n = typeAnnotation is NamedType - ? (typeAnnotation.name2.stringValue ?? typeAnnotation.name2.lexeme) + ? (typeAnnotation.name.stringValue ?? typeAnnotation.name.lexeme) : null; if (n != null && resolveGenerics.containsKey(n)) { resolveGenericsMap[n] ??= {}; @@ -186,7 +186,7 @@ Pair, Map> compileArgumentList( if (typeAnnotation != null) { final n = typeAnnotation is NamedType - ? (typeAnnotation.name2.stringValue ?? typeAnnotation.name2.lexeme) + ? (typeAnnotation.name.stringValue ?? typeAnnotation.name.lexeme) : null; if (n != null && resolveGenerics.containsKey(n)) { resolveGenericsMap[n] ??= {}; diff --git a/lib/src/eval/compiler/type.dart b/lib/src/eval/compiler/type.dart index 72e65e9d..3f367d43 100644 --- a/lib/src/eval/compiler/type.dart +++ b/lib/src/eval/compiler/type.dart @@ -188,7 +188,7 @@ class TypeRef { nullable: typeAnnotation.question != null); } typeAnnotation as NamedType; - final n = typeAnnotation.name2.stringValue ?? typeAnnotation.name2.value(); + final n = typeAnnotation.name.stringValue ?? typeAnnotation.name.value(); final unspecifiedType = ctx.temporaryTypes[library]?[n] ?? ctx.visibleTypes[library]?[n]; if (unspecifiedType == null) { @@ -293,7 +293,7 @@ class TypeRef { } final syExtends = syDec.extendsClause; if (syExtends != null && - syExtends.superclass.name2.stringValue == specifiedType.name) { + syExtends.superclass.name.stringValue == specifiedType.name) { final declaredType = syExtends.superclass.typeArguments?.arguments[genericIndex]; if (declaredType != null) { @@ -461,8 +461,8 @@ class TypeRef { return TypeRef.lookupFieldType(ctx, CoreTypes.object.ref(ctx), field); } else { final $super = ctx.visibleTypes[$class.file]![ - $extends.superclass.name2.stringValue ?? - $extends.superclass.name2.value()]!; + $extends.superclass.name.stringValue ?? + $extends.superclass.name.value()]!; return TypeRef.lookupFieldType( ctx, $super.inheritTypeArgsFrom(ctx, $class), field); } @@ -596,10 +596,9 @@ class TypeRef { final prefix = superName.importPrefix; final superPrefix = prefix != null ? '${prefix.name.value()}.' : ''; $super = - (ctx.visibleTypes[file]!['$superPrefix${superName.name2.lexeme}'] ?? + (ctx.visibleTypes[file]!['$superPrefix${superName.name.lexeme}'] ?? (throw CompileError( - 'Superclass ${superName.name2.lexeme} not found', - source))) + 'Superclass ${superName.name.lexeme} not found', source))) .copyWith(specifiedTypeArgs: typeParams) .resolveTypeChain(ctx, recursionGuard: rg, stack: stack0, source: source); @@ -618,7 +617,7 @@ class TypeRef { recursionGuard: rg, stack: stack0, source: source)) .toList() ?? []; - $with.add(ctx.visibleTypes[file]![withName.name2.value()]! + $with.add(ctx.visibleTypes[file]![withName.name.value()]! .copyWith(specifiedTypeArgs: typeParams) .resolveTypeChain(ctx, recursionGuard: rg, stack: stack0, source: source)); @@ -633,7 +632,7 @@ class TypeRef { recursionGuard: rg, stack: stack0, source: source)) .toList() ?? []; - $implements.add(ctx.visibleTypes[file]![implementsName.name2.value()]! + $implements.add(ctx.visibleTypes[file]![implementsName.name.value()]! .copyWith(specifiedTypeArgs: typeParams) .resolveTypeChain(ctx, recursionGuard: rg, stack: stack0, source: source)); diff --git a/lib/src/eval/compiler/util/tree_shake.dart b/lib/src/eval/compiler/util/tree_shake.dart index 90c42c8f..0f36380c 100644 --- a/lib/src/eval/compiler/util/tree_shake.dart +++ b/lib/src/eval/compiler/util/tree_shake.dart @@ -13,7 +13,7 @@ class TreeShakeVisitor extends RecursiveAstVisitor { @override TreeShakeContext? visitNamedType(NamedType node) { - output(node.name2.lexeme); + output(node.name.lexeme); super.visitNamedType(node); return ctx; } diff --git a/pubspec.yaml b/pubspec.yaml index 84e9e793..fa85d079 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -24,7 +24,7 @@ executables: dependencies: args: ^2.4.0 - analyzer: ^7.0.0 + analyzer: ^8.2.0 collection: ^1.18.0 directed_graph: '>=0.3.9 <0.5.0' glob: ^2.1.3 From 625252019b0ff980270d8c6e927fa1c0db646a3c Mon Sep 17 00:00:00 2001 From: Ilya Zverev Date: Sat, 3 Jan 2026 23:05:34 +0200 Subject: [PATCH 2/2] oops it's 0.8.4 now --- CHANGELOG.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9654b329..d85b60cc 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,9 +1,11 @@ +## 0.8.4 +- Update analyzer to v8. + ## 0.8.3 - Support for Dart 3.10 - Support for top level functions in the binding generator - Support for operator overloads in the binding generator - Fix return types of Uri constructors -- Update analyzer to v8. - Improve error messages ## 0.8.2