diff --git a/CHANGELOG.md b/CHANGELOG.md index 5015328..61f71c2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,11 @@ +## 3.0.0 + +### Breaking Changes + +* require Dart 3.9+ +* support analyzer 10.x only +* migrate generator internals to the analyzer 10 element API + ## [2.0.1](https://github.com/Stacked-Org/generator/compare/v2.0.0...v2.0.1) (2026-03-07) diff --git a/lib/import_resolver.dart b/lib/import_resolver.dart index f7f22c6..661b10c 100644 --- a/lib/import_resolver.dart +++ b/lib/import_resolver.dart @@ -1,14 +1,15 @@ -import 'package:analyzer/dart/element/element2.dart'; +import 'package:analyzer/dart/element/element.dart'; import 'package:analyzer/dart/element/type.dart'; import 'package:path/path.dart' as p; +import 'package:stacked_generator/utils.dart'; class ImportResolver { - final List libs; + final List libs; final String targetFilePath; const ImportResolver(this.libs, this.targetFilePath); - String? resolve(Element2? element) { + String? resolve(Element? element) { // return early if source is null or element is a core type final elementSourceUri = _sourceUriOfElement(element); if (elementSourceUri == null || _isCoreDartType(element)) { @@ -44,12 +45,12 @@ class ImportResolver { } Uri? _sourceUriOfElement(Element? element) { - return element?.firstFragment.libraryFragment?.source.uri; + return elementSourceUri(element); } Set resolveAll(DartType type) { final imports = {}; - final resolvedValue = resolve(type.element3); + final resolvedValue = resolve(type.element); if (resolvedValue != null) { imports.add(resolvedValue); } @@ -61,7 +62,7 @@ class ImportResolver { final imports = {}; if (typeToCheck is ParameterizedType) { for (DartType type in typeToCheck.typeArguments) { - final resolvedValue = resolve(type.element3); + final resolvedValue = resolve(type.element); if (resolvedValue != null) { imports.add(resolvedValue); } diff --git a/lib/src/generators/bottomsheets/resolve/bottomsheet_config_resolver.dart b/lib/src/generators/bottomsheets/resolve/bottomsheet_config_resolver.dart index 155c0ae..60cdc50 100644 --- a/lib/src/generators/bottomsheets/resolve/bottomsheet_config_resolver.dart +++ b/lib/src/generators/bottomsheets/resolve/bottomsheet_config_resolver.dart @@ -1,5 +1,5 @@ import 'package:analyzer/dart/constant/value.dart'; -import 'package:analyzer/dart/element/element2.dart'; +import 'package:analyzer/dart/element/element.dart'; import 'package:source_gen/source_gen.dart'; import 'package:stacked_generator/import_resolver.dart'; import 'package:stacked_generator/src/generators/bottomsheets/bottomsheet_config.dart'; @@ -21,7 +21,7 @@ class BottomsheetConfigResolver { final bottomsheetClassType = bottomsheetReader.read('classType').typeValue; - final classElement = bottomsheetClassType.element3 as ClassElement2?; + final classElement = bottomsheetClassType.element as ClassElement?; // Get the import of the class type that's defined for the bottomSheet final import = importResolver.resolve(classElement!); diff --git a/lib/src/generators/bottomsheets/resolve/stacked_bottomsheet_generator.dart b/lib/src/generators/bottomsheets/resolve/stacked_bottomsheet_generator.dart index 1ed1a45..67f69c5 100644 --- a/lib/src/generators/bottomsheets/resolve/stacked_bottomsheet_generator.dart +++ b/lib/src/generators/bottomsheets/resolve/stacked_bottomsheet_generator.dart @@ -1,10 +1,11 @@ import 'dart:async'; -import 'package:analyzer/dart/element/element2.dart'; +import 'package:analyzer/dart/element/element.dart'; import 'package:build/build.dart'; import 'package:source_gen/source_gen.dart'; import 'package:stacked_generator/import_resolver.dart'; import 'package:stacked_generator/src/generators/bottomsheets/generate/bottomsheet_class_generator.dart'; +import 'package:stacked_generator/utils.dart'; import 'package:stacked_shared/stacked_shared.dart'; import 'bottomsheet_config_resolver.dart'; @@ -12,7 +13,7 @@ import 'bottomsheet_config_resolver.dart'; class StackedBottomsheetGenerator extends GeneratorForAnnotation { @override FutureOr generateForAnnotatedElement( - Element2 element, + Element element, ConstantReader annotation, BuildStep buildStep, ) async { @@ -20,7 +21,7 @@ class StackedBottomsheetGenerator extends GeneratorForAnnotation { final libs = await buildStep.resolver.libraries.toList(); final importResolver = ImportResolver( libs, - element.firstFragment.libraryFragment?.source.uri.path ?? '', + elementSourceUri(element)?.path ?? '', ); /// If the bottomsheets parameter is not mentioned in the StackedApp diff --git a/lib/src/generators/dialogs/resolve/dialog_config_resolver.dart b/lib/src/generators/dialogs/resolve/dialog_config_resolver.dart index 85b1019..8439e4d 100644 --- a/lib/src/generators/dialogs/resolve/dialog_config_resolver.dart +++ b/lib/src/generators/dialogs/resolve/dialog_config_resolver.dart @@ -1,5 +1,5 @@ import 'package:analyzer/dart/constant/value.dart'; -import 'package:analyzer/dart/element/element2.dart'; +import 'package:analyzer/dart/element/element.dart'; import 'package:source_gen/source_gen.dart'; import 'package:stacked_generator/import_resolver.dart'; import 'package:stacked_generator/src/generators/dialogs/dialog_config.dart'; @@ -21,7 +21,7 @@ class DialogConfigResolver { // Get the type of the dialog that we want to register final dialogClassType = dialogReader.read('classType').typeValue; - final classElement = dialogClassType.element3 as ClassElement2?; + final classElement = dialogClassType.element as ClassElement?; // Get the import of the class type that's defined for the dialog final import = importResolver.resolve(classElement!); diff --git a/lib/src/generators/dialogs/resolve/stacked_dialog_generator.dart b/lib/src/generators/dialogs/resolve/stacked_dialog_generator.dart index 687dda9..23ea31c 100644 --- a/lib/src/generators/dialogs/resolve/stacked_dialog_generator.dart +++ b/lib/src/generators/dialogs/resolve/stacked_dialog_generator.dart @@ -1,10 +1,11 @@ import 'dart:async'; -import 'package:analyzer/dart/element/element2.dart'; +import 'package:analyzer/dart/element/element.dart'; import 'package:build/build.dart'; import 'package:source_gen/source_gen.dart'; import 'package:stacked_generator/import_resolver.dart'; import 'package:stacked_generator/src/generators/dialogs/generate/dialog_class_generator.dart'; +import 'package:stacked_generator/utils.dart'; import 'package:stacked_shared/stacked_shared.dart'; import 'dialog_config_resolver.dart'; @@ -12,7 +13,7 @@ import 'dialog_config_resolver.dart'; class StackedDialogGenerator extends GeneratorForAnnotation { @override FutureOr generateForAnnotatedElement( - Element2 element, + Element element, ConstantReader annotation, BuildStep buildStep, ) async { @@ -20,7 +21,7 @@ class StackedDialogGenerator extends GeneratorForAnnotation { final libs = await buildStep.resolver.libraries.toList(); final importResolver = ImportResolver( libs, - element.firstFragment.libraryFragment?.source.uri.path ?? '', + elementSourceUri(element)?.path ?? '', ); /// If the dialogs parameter is not mentioned in the StackedApp diff --git a/lib/src/generators/exceptions/invalid_generator_input_exception.dart b/lib/src/generators/exceptions/invalid_generator_input_exception.dart index 2f9b825..bff1ef5 100644 --- a/lib/src/generators/exceptions/invalid_generator_input_exception.dart +++ b/lib/src/generators/exceptions/invalid_generator_input_exception.dart @@ -1,9 +1,9 @@ -import 'package:analyzer/dart/element/element2.dart'; +import 'package:analyzer/dart/element/element.dart'; class InvalidGeneratorInputException implements Exception { final String message; final String? todo; - final Element2? element; + final Element? element; const InvalidGeneratorInputException(this.message, {this.todo, this.element}); @override diff --git a/lib/src/generators/forms/field_config.dart b/lib/src/generators/forms/field_config.dart index e41ee67..eb17000 100644 --- a/lib/src/generators/forms/field_config.dart +++ b/lib/src/generators/forms/field_config.dart @@ -1,6 +1,6 @@ // ignore_for_file: unnecessary_this -import 'package:analyzer/dart/element/element2.dart'; +import 'package:analyzer/dart/element/element.dart'; /// Described a single field to be generated. /// diff --git a/lib/src/generators/forms/stacked_form_generator.dart b/lib/src/generators/forms/stacked_form_generator.dart index 150f040..e00c72c 100644 --- a/lib/src/generators/forms/stacked_form_generator.dart +++ b/lib/src/generators/forms/stacked_form_generator.dart @@ -1,27 +1,28 @@ import 'dart:async'; import 'package:analyzer/dart/constant/value.dart'; -import 'package:analyzer/dart/element/element2.dart'; +import 'package:analyzer/dart/element/element.dart'; import 'package:build/build.dart'; import 'package:source_gen/source_gen.dart'; import 'package:stacked_generator/import_resolver.dart'; import 'package:stacked_generator/src/generators/forms/field_config.dart'; import 'package:stacked_generator/src/generators/forms/form_view_config.dart'; import 'package:stacked_generator/src/generators/forms/stacked_form_content_generator.dart'; +import 'package:stacked_generator/utils.dart'; import 'package:stacked_shared/stacked_shared.dart'; class StackedFormGenerator extends GeneratorForAnnotation { @override FutureOr generateForAnnotatedElement( // ignore: avoid_renaming_method_parameters - Element2 classForAnnotation, + Element classForAnnotation, // ignore: avoid_renaming_method_parameters ConstantReader formView, BuildStep buildStep, ) async { var libs = await buildStep.resolver.libraries.toList(); var importResolver = - ImportResolver(libs, classForAnnotation.firstFragment.libraryFragment?.source.uri.path ?? ''); + ImportResolver(libs, elementSourceUri(classForAnnotation)?.path ?? ''); final viewName = classForAnnotation.displayName; @@ -88,11 +89,11 @@ FieldConfig _readTextFieldConfig({ }) { final String name = (fieldReader.peek('name')?.stringValue) ?? ''; final String? initialValue = (fieldReader.peek('initialValue')?.stringValue); - final ExecutableElement2? validatorFunction = - (fieldReader.peek('validator')?.objectValue)?.toFunctionValue2(); - final ExecutableElement2? customTextEditingController = + final ExecutableElement? validatorFunction = + (fieldReader.peek('validator')?.objectValue)?.toFunctionValue(); + final ExecutableElement? customTextEditingController = (fieldReader.peek('customTextEditingController')?.objectValue) - ?.toFunctionValue2(); + ?.toFunctionValue(); return TextFieldConfig( name: name, initialValue: initialValue, diff --git a/lib/src/generators/getit/dependency_config_factory.dart b/lib/src/generators/getit/dependency_config_factory.dart index 4f984b2..db07450 100644 --- a/lib/src/generators/getit/dependency_config_factory.dart +++ b/lib/src/generators/getit/dependency_config_factory.dart @@ -1,5 +1,5 @@ import 'package:analyzer/dart/constant/value.dart'; -import 'package:analyzer/dart/element/element2.dart'; +import 'package:analyzer/dart/element/element.dart'; import 'package:analyzer/dart/element/type.dart'; import 'package:source_gen/source_gen.dart'; import 'package:stacked_generator/import_resolver.dart'; @@ -41,7 +41,7 @@ class DependencyConfigFactory { final DartType? dependencyAbstractedClassType = dependencyReader.peek('asType')?.typeValue; - final classElement = dependencyClassType.element3 as ClassElement2?; + final classElement = dependencyClassType.element as ClassElement?; throwIf( classElement == null, @@ -60,7 +60,7 @@ class DependencyConfigFactory { final import = importResolver.resolve(classElement!); final abstractedClassElement = - dependencyAbstractedClassType?.element3 as ClassElement2?; + dependencyAbstractedClassType?.element as ClassElement?; final abstractedImport = importResolver.resolve(abstractedClassElement); @@ -71,7 +71,7 @@ class DependencyConfigFactory { : null; // NOTE: This can be used for actual dependency inject. We do service location instead. - final constructor = classElement.unnamedConstructor2; + final constructor = classElement.unnamedConstructor; if (dependencyReader.instanceOf(const TypeChecker.typeNamed( Factory, @@ -91,7 +91,7 @@ class DependencyConfigFactory { ))) { final ConstantReader? resolveUsing = dependencyReader.peek('resolveUsing'); - final resolveObject = resolveUsing?.objectValue.toFunctionValue2(); + final resolveObject = resolveUsing?.objectValue.toFunctionValue(); return SingletonDependency( instanceName: instanceName, @@ -107,7 +107,7 @@ class DependencyConfigFactory { ))) { final ConstantReader? resolveUsing = dependencyReader.peek('resolveUsing'); - final resolveObject = resolveUsing?.objectValue.toFunctionValue2(); + final resolveObject = resolveUsing?.objectValue.toFunctionValue(); return LazySingletonDependency( instanceName: instanceName, @@ -118,12 +118,13 @@ class DependencyConfigFactory { environments: environments, resolveFunction: resolveObject?.displayName); } else if (dependencyReader.instanceOf(const TypeChecker.typeNamed( + // ignore: deprecated_member_use Presolve, inPackage: 'stacked_shared', ))) { final ConstantReader? presolveUsing = dependencyReader.peek('presolveUsing'); - final presolveObject = presolveUsing?.objectValue.toFunctionValue2(); + final presolveObject = presolveUsing?.objectValue.toFunctionValue(); return PresolveSingletonDependency( instanceName: instanceName, import: import!, diff --git a/lib/src/generators/getit/stacked_locator_generator.dart b/lib/src/generators/getit/stacked_locator_generator.dart index f1d5857..e63352f 100644 --- a/lib/src/generators/getit/stacked_locator_generator.dart +++ b/lib/src/generators/getit/stacked_locator_generator.dart @@ -1,6 +1,6 @@ import 'dart:async'; -import 'package:analyzer/dart/element/element2.dart'; +import 'package:analyzer/dart/element/element.dart'; import 'package:build/build.dart'; import 'package:source_gen/source_gen.dart'; import 'package:stacked_generator/import_resolver.dart'; @@ -15,7 +15,7 @@ import 'dependency_config_factory.dart'; class StackedLocatorGenerator extends GeneratorForAnnotation { @override FutureOr generateForAnnotatedElement( - Element2 element, + Element element, // ignore: avoid_renaming_method_parameters ConstantReader stackedApplication, BuildStep buildStep, @@ -23,7 +23,7 @@ class StackedLocatorGenerator extends GeneratorForAnnotation { final libs = await buildStep.resolver.libraries.toList(); final importResolver = ImportResolver( libs, - element.firstFragment.libraryFragment?.source.uri.path ?? '', + elementSourceUri(element)?.path ?? '', ); final String locatorName = diff --git a/lib/src/generators/getit/stacked_locator_parameter_resolver.dart b/lib/src/generators/getit/stacked_locator_parameter_resolver.dart index 46603e1..51a2218 100644 --- a/lib/src/generators/getit/stacked_locator_parameter_resolver.dart +++ b/lib/src/generators/getit/stacked_locator_parameter_resolver.dart @@ -1,4 +1,4 @@ -import 'package:analyzer/dart/element/element2.dart'; +import 'package:analyzer/dart/element/element.dart'; import 'package:source_gen/source_gen.dart'; import 'package:stacked_generator/import_resolver.dart'; import 'package:stacked_generator/utils.dart'; diff --git a/lib/src/generators/logging/logger_config_resolver.dart b/lib/src/generators/logging/logger_config_resolver.dart index 9da1018..419e739 100644 --- a/lib/src/generators/logging/logger_config_resolver.dart +++ b/lib/src/generators/logging/logger_config_resolver.dart @@ -1,5 +1,5 @@ import 'package:analyzer/dart/constant/value.dart'; -import 'package:analyzer/dart/element/element2.dart'; +import 'package:analyzer/dart/element/element.dart'; import 'package:source_gen/source_gen.dart'; import 'package:stacked_generator/import_resolver.dart'; import 'package:stacked_generator/src/generators/logging/logger_config.dart'; @@ -58,8 +58,8 @@ class LoggerConfigResolver { } } - ClassElement2 _dartOjectToElemet(DartObject obj) { + ClassElement _dartOjectToElemet(DartObject obj) { var dependencyReader = ConstantReader(obj).typeValue; - return dependencyReader.element3 as ClassElement2; + return dependencyReader.element as ClassElement; } } diff --git a/lib/src/generators/logging/stacked_logger_generator.dart b/lib/src/generators/logging/stacked_logger_generator.dart index c39504e..1f704da 100644 --- a/lib/src/generators/logging/stacked_logger_generator.dart +++ b/lib/src/generators/logging/stacked_logger_generator.dart @@ -1,9 +1,10 @@ import 'dart:async'; -import 'package:analyzer/dart/element/element2.dart'; +import 'package:analyzer/dart/element/element.dart'; import 'package:build/build.dart'; import 'package:source_gen/source_gen.dart'; import 'package:stacked_generator/import_resolver.dart'; +import 'package:stacked_generator/utils.dart'; import 'package:stacked_shared/stacked_shared.dart'; import 'logger_class_generator.dart'; @@ -12,7 +13,7 @@ import 'logger_config_resolver.dart'; class StackedLoggerGenerator extends GeneratorForAnnotation { @override FutureOr generateForAnnotatedElement( - Element2 element, + Element element, ConstantReader annotation, BuildStep buildStep, ) async { @@ -20,7 +21,7 @@ class StackedLoggerGenerator extends GeneratorForAnnotation { var libs = await buildStep.resolver.libraries.toList(); var importResolver = ImportResolver( libs, - element.firstFragment.libraryFragment?.source.uri.path ?? '', + elementSourceUri(element)?.path ?? '', ); final loggerConfig = await loggerResolver.resolve( diff --git a/lib/src/generators/router/route_config/route_config_factory.dart b/lib/src/generators/router/route_config/route_config_factory.dart index eae5e4b..46fd2c0 100644 --- a/lib/src/generators/router/route_config/route_config_factory.dart +++ b/lib/src/generators/router/route_config/route_config_factory.dart @@ -1,6 +1,7 @@ import 'package:source_gen/source_gen.dart'; import 'package:stacked_generator/src/generators/router_common/models/importable_type.dart'; import 'package:stacked_generator/src/generators/router_common/models/route_config.dart'; +import 'package:stacked_generator/utils.dart'; import 'package:stacked_shared/stacked_shared.dart'; import '../../router_common/models/route_parameter_config.dart'; @@ -80,7 +81,7 @@ class RouteConfigFactory { final function = stackedRoute .peek('transitionsBuilder') ?.objectValue - .toFunctionValue2(); + .toFunctionValue(); ResolvedType? customTransitionBuilder; if (function != null) { @@ -92,7 +93,7 @@ class RouteConfigFactory { customTransitionBuilder = ResolvedType( name: functionName, - import: function.firstFragment.libraryFragment.source.uri.toString(), + import: elementSourceUri(function)?.toString(), ); } diff --git a/lib/src/generators/router/stacked_router_generator.dart b/lib/src/generators/router/stacked_router_generator.dart index f2a229d..aef3e0d 100644 --- a/lib/src/generators/router/stacked_router_generator.dart +++ b/lib/src/generators/router/stacked_router_generator.dart @@ -1,6 +1,6 @@ import 'dart:async'; -import 'package:analyzer/dart/element/element2.dart'; +import 'package:analyzer/dart/element/element.dart'; import 'package:build/build.dart'; import 'package:source_gen/source_gen.dart'; import 'package:stacked_shared/stacked_shared.dart'; @@ -12,7 +12,7 @@ import 'generator/router_generator.dart'; class StackedNavigatorGenerator extends GeneratorForAnnotation { @override FutureOr generateForAnnotatedElement( - Element2 element, + Element element, ConstantReader annotation, BuildStep buildStep, ) async { @@ -20,7 +20,7 @@ class StackedNavigatorGenerator extends GeneratorForAnnotation { final typeResolver = TypeResolver(libs); final routerConfig = RouterConfigResolver(typeResolver) - .resolve(annotation, element as ClassElement2); + .resolve(annotation, element as ClassElement); return RouterGenerator(routerConfig).generate(); } diff --git a/lib/src/generators/router_2/auto_route_generator.dart b/lib/src/generators/router_2/auto_route_generator.dart index b0a7874..6af8f6a 100644 --- a/lib/src/generators/router_2/auto_route_generator.dart +++ b/lib/src/generators/router_2/auto_route_generator.dart @@ -1,4 +1,4 @@ -import 'package:analyzer/dart/element/element2.dart'; +import 'package:analyzer/dart/element/element.dart'; import 'package:build/build.dart'; import 'package:source_gen/source_gen.dart'; // ignore: implementation_imports @@ -27,18 +27,18 @@ class StackedRouterGenerator extends Generator { } dynamic generateForAnnotatedElement( - Element2 element, + Element element, ConstantReader annotation, BuildStep buildStep, ) async { // throw if annotation is used for a none class element throwIf( - element is! ClassElement2, - '${element.name3} is not a class element', + element is! ClassElement, + '${element.name} is not a class element', element: element, ); - final clazz = element as ClassElement2; + final clazz = element as ClassElement; final usesPartBuilder = _hasPartDirective(clazz); final TypeResolver typeResolver; @@ -49,7 +49,7 @@ class StackedRouterGenerator extends Generator { var libs = await buildStep.resolver.libraries.toList(); Uri? targetFileUri; if (annotation.peek('preferRelativeImports')?.boolValue != false) { - targetFileUri = element.firstFragment.libraryFragment.source.uri; + targetFileUri = elementSourceUri(element); } typeResolver = TypeResolver(libs, targetFileUri); } diff --git a/lib/src/generators/router_2/resolvers/route_config_resolver.dart b/lib/src/generators/router_2/resolvers/route_config_resolver.dart index d1a1430..0e89aca 100644 --- a/lib/src/generators/router_2/resolvers/route_config_resolver.dart +++ b/lib/src/generators/router_2/resolvers/route_config_resolver.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:source_gen/source_gen.dart'; import 'package:stacked_generator/src/generators/extensions/string_utils_extension.dart'; @@ -72,12 +72,12 @@ class RouteConfigResolver { } throwIf( - page.element3 is! ClassElement2, + page.element is! ClassElement, '${page.getDisplayString()} is not a class element', - element: page.element3, + element: page.element, ); - final classElement = page.element3 as ClassElement2; + final classElement = page.element as ClassElement; final import = _typeResolver.resolveImport(classElement); final hasWrappedRoute = classElement.allSupertypes .any((e) => e.getDisplayString() == 'AutoRouteWrapper'); @@ -164,14 +164,14 @@ class RouteConfigResolver { final function = stackedRoute .peek('transitionsBuilder') ?.objectValue - .toFunctionValue2(); + .toFunctionValue(); if (function != null) { transitionBuilder = _typeResolver.resolveFunctionType(function); } final builderFunction = stackedRoute .peek('customRouteBuilder') ?.objectValue - .toFunctionValue2(); + .toFunctionValue(); if (builderFunction != null) { customRouteBuilder = _typeResolver.resolveFunctionType(builderFunction); } @@ -246,7 +246,7 @@ class RouteConfigResolver { var replacementInRouteName = _routerConfig.replaceInRouteName; - final constructor = classElement.unnamedConstructor2; + final constructor = classElement.unnamedConstructor; throwIf( constructor == null, 'Route widgets must have an unnamed constructor', diff --git a/lib/src/generators/router_2/resolvers/router_config_resolver.dart b/lib/src/generators/router_2/resolvers/router_config_resolver.dart index 1d51c90..56a711a 100644 --- a/lib/src/generators/router_2/resolvers/router_config_resolver.dart +++ b/lib/src/generators/router_2/resolvers/router_config_resolver.dart @@ -1,5 +1,5 @@ import 'package:analyzer/dart/constant/value.dart'; -import 'package:analyzer/dart/element/element2.dart'; +import 'package:analyzer/dart/element/element.dart'; import 'package:source_gen/source_gen.dart'; import 'package:stacked_generator/src/generators/router_common/models/route_parameter_config.dart'; import 'package:stacked_generator/utils.dart'; @@ -21,7 +21,7 @@ class RouterConfigResolver { RouterConfig resolve( ConstantReader stackedApp, - ClassElement2 clazz, { + ClassElement clazz, { bool usesPartBuilder = false, }) { int routeType = RouteType.material; @@ -55,12 +55,12 @@ class RouterConfigResolver { customRouteBarrierDismissible = stackedApp.peek('barrierDismissible')?.boolValue; final function = - stackedApp.peek('transitionsBuilder')?.objectValue.toFunctionValue2(); + stackedApp.peek('transitionsBuilder')?.objectValue.toFunctionValue(); if (function != null) { transitionBuilder = _typeResolver.resolveFunctionType(function); } final customRouteBuilderValue = - stackedApp.peek('customRouteBuilder')?.objectValue.toFunctionValue2(); + stackedApp.peek('customRouteBuilder')?.objectValue.toFunctionValue(); if (customRouteBuilderValue != null) { customRouteBuilder = _typeResolver.resolveFunctionType(customRouteBuilderValue); diff --git a/lib/src/generators/router_common/models/router_config.dart b/lib/src/generators/router_common/models/router_config.dart index beaf739..271b1f4 100644 --- a/lib/src/generators/router_common/models/router_config.dart +++ b/lib/src/generators/router_common/models/router_config.dart @@ -1,4 +1,4 @@ -import 'package:analyzer/dart/element/element2.dart'; +import 'package:analyzer/dart/element/element.dart'; import 'route_config.dart'; @@ -11,7 +11,7 @@ class RouterConfig { final String routerClassName; final RouterConfig? parent; final String? replaceInRouteName; - final ClassElement2? element; + final ClassElement? element; final bool deferredLoading; RouterConfig({ @@ -36,7 +36,7 @@ class RouterConfig { String? routerClassName, RouterConfig? parent, String? replaceInRouteName, - ClassElement2? element, + ClassElement? element, bool? deferredLoading, }) { return RouterConfig( diff --git a/lib/src/generators/router_common/resolvers/route_parameter_resolver.dart b/lib/src/generators/router_common/resolvers/route_parameter_resolver.dart index 466a241..a387825 100644 --- a/lib/src/generators/router_common/resolvers/route_parameter_resolver.dart +++ b/lib/src/generators/router_common/resolvers/route_parameter_resolver.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:source_gen/source_gen.dart'; import 'package:stacked_generator/src/generators/router_common/models/route_parameter_config.dart'; @@ -60,7 +60,7 @@ class RouteParameterResolver { throwIf( pathParamAnnotation != null && queryParamAnnotation != null, - '${parameterElement.name3} can not be both a pathParam and a queryParam!', + '${parameterElement.name} can not be both a pathParam and a queryParam!', element: parameterElement, ); diff --git a/lib/src/generators/router_common/resolvers/type_resolver.dart b/lib/src/generators/router_common/resolvers/type_resolver.dart index ae3fbe8..cbdee2d 100644 --- a/lib/src/generators/router_common/resolvers/type_resolver.dart +++ b/lib/src/generators/router_common/resolvers/type_resolver.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' show NullabilitySuffix; import 'package:analyzer/dart/element/type.dart' @@ -7,12 +7,12 @@ import 'package:path/path.dart' as p; import 'package:stacked_generator/src/generators/router_common/models/importable_type.dart'; class TypeResolver { - final List libs; + final List libs; final Uri? targetFile; TypeResolver(this.libs, [this.targetFile]); - String? resolveImport(Element2? element) { + String? resolveImport(Element? element) { // return early if source is null or element is a core type if (libs.isEmpty || element == null || _isCoreDartType(element)) { return null; @@ -60,12 +60,12 @@ class TypeResolver { final types = []; if (typeToCheck is ParameterizedType) { for (DartType type in typeToCheck.typeArguments) { - if (type.element3 is TypeParameterElement2) { + if (type.element is TypeParameterElement) { types.add(ResolvedType(name: 'dynamic')); } else { types.add(ResolvedType( - name: type.element3?.name3 ?? 'void', - import: resolveImport(type.element3), + name: type.element?.name ?? 'void', + import: resolveImport(type.element), isNullable: type.nullabilitySuffix == NullabilitySuffix.question, typeArguments: _resolveTypeArguments(type), )); @@ -75,7 +75,7 @@ class TypeResolver { return types; } - ResolvedType resolveFunctionType(ExecutableElement2 function) { + ResolvedType resolveFunctionType(ExecutableElement function) { final displayName = function.displayName.replaceFirst(RegExp('^_'), ''); var functionName = displayName; Element elementToImport = function; @@ -93,9 +93,9 @@ class TypeResolver { ResolvedType resolveType(DartType type) { return ResolvedType( - name: type.element3?.name3 ?? type.getDisplayString(), + name: type.element?.name ?? type.getDisplayString(), isNullable: type.nullabilitySuffix == NullabilitySuffix.question, - import: resolveImport(type.element3), + import: resolveImport(type.element), typeArguments: _resolveTypeArguments(type), ); } diff --git a/lib/utils.dart b/lib/utils.dart index 88cc211..5383a80 100644 --- a/lib/utils.dart +++ b/lib/utils.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:stacked_generator/src/generators/exceptions/invalid_generator_input_exception.dart'; import 'package:stacked_generator/src/generators/router_common/models/route_parameter_config.dart'; @@ -27,13 +27,13 @@ String processedReturnType(String? returnType) { } void throwIf(bool condition, String message, - {Element2? element, String todo = ''}) { + {Element? element, String todo = ''}) { if (condition) { throwError(message, todo: todo, element: element); } } -void throwError(String message, {Element2? element, String todo = ''}) { +void throwError(String message, {Element? element, String todo = ''}) { throw InvalidGeneratorInputException( message, todo: todo, @@ -41,6 +41,10 @@ void throwError(String message, {Element2? element, String todo = ''}) { ); } +Uri? elementSourceUri(Element? element) { + return element?.firstFragment.libraryFragment?.source.uri; +} + List notQueryNorPath(List parameters) { return parameters.where((p) { return !p.isPathParam && !p.isQueryParam; diff --git a/pubspec.yaml b/pubspec.yaml index a28edbd..30cb8ef 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -1,22 +1,22 @@ name: stacked_generator description: Stacked Generator is a package dedicated to reduce the boilerplate required to setup a stacked application -version: 2.0.1 +version: 3.0.0 homepage: https://github.com/FilledStacks/stacked/tree/master/packages/stacked_generator environment: - sdk: ">=3.7.0 <4.0.0" + sdk: ">=3.9.0 <4.0.0" dependencies: build: ^4.0.3 path: ^1.9.1 recase: ^4.1.0 - source_gen: ^4.1.1 + source_gen: ^4.2.0 meta: ^1.16.0 logger: ^2.6.2 stacked_shared: ^1.4.2 # Removing this will cause issues when publish the package - analyzer: ^8.1.1 + analyzer: ">=10.0.0 <11.0.0" dart_style: ^3.1.0 code_builder: ^4.10.1 collection: ^1.19.1 @@ -24,7 +24,7 @@ dependencies: json_annotation: ^4.9.0 dev_dependencies: - build_runner: ^2.5.4 + build_runner: ^2.10.0 test: ^1.26.2 build_test: ^3.5.4 mockito: ^5.4.6 diff --git a/test/form/form_builder_test.dart b/test/form/form_builder_test.dart index 7ced435..bac055a 100644 --- a/test/form/form_builder_test.dart +++ b/test/form/form_builder_test.dart @@ -348,7 +348,7 @@ void main() { test( 'When called, Should add registerations function for a focusNodes', () { - builder.addGetFocuNode(); + builder.addGetFocusNode(); expect( builder.serializeStringBuffer, @@ -361,7 +361,7 @@ void main() { test( 'When called, Should add registerations function for a TextEditingController', () { - builder.addGetTextEditinController(); + builder.addGetTextEditingController(); final output = builder.serializeStringBuffer; expect( output, diff --git a/test/helpers/ast/ast_helper.dart b/test/helpers/ast/ast_helper.dart index 30eb82b..0845592 100644 --- a/test/helpers/ast/ast_helper.dart +++ b/test/helpers/ast/ast_helper.dart @@ -25,7 +25,7 @@ class AstHelper { static ClassDeclaration? findClass(CompilationUnit unit, String className) { return unit.declarations .whereType() - .where((c) => c.name.lexeme == className) + .where((c) => c.namePart.typeName.lexeme == className) .firstOrNull; } @@ -57,12 +57,18 @@ class AstHelper { /// Return all method declarations in a class. static List findMethods(ClassDeclaration classDecl) { - return classDecl.members.whereType().toList(); + return (classDecl.body as BlockClassBody) + .members + .whereType() + .toList(); } /// Return all field declarations in a class. static List findFields(ClassDeclaration classDecl) { - return classDecl.members.whereType().toList(); + return (classDecl.body as BlockClassBody) + .members + .whereType() + .toList(); } /// Find a method by name in a class; returns null if not found. @@ -85,18 +91,20 @@ class AstHelper { /// Returns null when the constructor is not present. static ConstructorDeclaration? findConstructor( ClassDeclaration classDecl, String constructorName) { - return classDecl.members + return (classDecl.body as BlockClassBody) + .members .whereType() .where((c) => c.name?.lexeme == constructorName || - (c.name == null && constructorName == classDecl.name.lexeme)) + (c.name == null && + constructorName == classDecl.namePart.typeName.lexeme)) .firstOrNull; } /// Find a method by name in an extension; returns null if not found. static MethodDeclaration? findMethodInExtension( ExtensionDeclaration extension, String methodName) { - return extension.members + return extension.body.members .whereType() .where((m) => m.name.lexeme == methodName) .firstOrNull; @@ -129,7 +137,7 @@ class AstHelper { /// Check whether a method has an @override annotation. static bool hasOverrideAnnotation(MethodDeclaration method) { return method.metadata - .any((annotation) => annotation.name.name == 'override'); + .any((annotation) => annotation.name.toSource() == 'override'); } /// Get a method's return type as string, or null for void/implicit. diff --git a/test/helpers/ast/bottomsheet_ast_validators.dart b/test/helpers/ast/bottomsheet_ast_validators.dart index bbaad2b..7add37d 100644 --- a/test/helpers/ast/bottomsheet_ast_validators.dart +++ b/test/helpers/ast/bottomsheet_ast_validators.dart @@ -145,7 +145,8 @@ class BottomsheetClassGeneratorAstValidator { // Find the BottomSheetType enum EnumDeclaration? bottomsheetTypeEnum; for (final declaration in unit.declarations) { - if (declaration is EnumDeclaration && declaration.name.lexeme == 'BottomSheetType') { + if (declaration is EnumDeclaration && + declaration.namePart.typeName.lexeme == 'BottomSheetType') { bottomsheetTypeEnum = declaration; break; } @@ -153,7 +154,8 @@ class BottomsheetClassGeneratorAstValidator { expect(bottomsheetTypeEnum, isNotNull, reason: 'Should contain BottomSheetType enum'); if (bottomsheetTypeEnum != null) { - final enumValues = bottomsheetTypeEnum.constants.map((c) => c.name.lexeme).toList(); + final enumValues = + bottomsheetTypeEnum.body.constants.map((c) => c.name.lexeme).toList(); expect(enumValues.length, equals(expectedBottomsheetTypes.length), reason: 'BottomSheetType enum should have ${expectedBottomsheetTypes.length} values'); @@ -208,4 +210,4 @@ class BottomsheetClassGeneratorAstValidator { reason: 'Should call setCustomSheetBuilders'); } } -} \ No newline at end of file +} diff --git a/test/helpers/ast/dialog_ast_validators.dart b/test/helpers/ast/dialog_ast_validators.dart index 80ec5f9..6823c50 100644 --- a/test/helpers/ast/dialog_ast_validators.dart +++ b/test/helpers/ast/dialog_ast_validators.dart @@ -90,7 +90,7 @@ class DialogClassGeneratorAstValidator { EnumDeclaration? dialogTypeEnum; for (final declaration in unit.declarations) { if (declaration is EnumDeclaration && - declaration.name.lexeme == 'DialogType') { + declaration.namePart.typeName.lexeme == 'DialogType') { dialogTypeEnum = declaration; break; } @@ -99,7 +99,7 @@ class DialogClassGeneratorAstValidator { if (dialogTypeEnum != null) { final enumValues = - dialogTypeEnum.constants.map((c) => c.name.lexeme).toList(); + dialogTypeEnum.body.constants.map((c) => c.name.lexeme).toList(); expect(enumValues.length, equals(expectedDialogTypes.length), reason: 'DialogType enum should have ${expectedDialogTypes.length} values'); diff --git a/test/helpers/ast/form_ast_validators.dart b/test/helpers/ast/form_ast_validators.dart index 2ff5c7f..eea956b 100644 --- a/test/helpers/ast/form_ast_validators.dart +++ b/test/helpers/ast/form_ast_validators.dart @@ -290,7 +290,7 @@ class FormBuilderAstValidator { /// Finds a method in a mixin declaration. static MethodDeclaration? _findMethodInMixin(MixinDeclaration mixin, String methodName) { - for (final member in mixin.members) { + for (final member in mixin.body.members) { if (member is MethodDeclaration && member.name.lexeme == methodName) { return member; } @@ -384,11 +384,11 @@ class FormFieldAstValidator { /// Finds a method in a mixin declaration. static MethodDeclaration? _findMethodInMixin(MixinDeclaration mixin, String methodName) { - for (final member in mixin.members) { + for (final member in mixin.body.members) { if (member is MethodDeclaration && member.name.lexeme == methodName) { return member; } } return null; } -} \ No newline at end of file +} diff --git a/test/helpers/ast/logger_ast_validators.dart b/test/helpers/ast/logger_ast_validators.dart index 253d305..3ba14d3 100644 --- a/test/helpers/ast/logger_ast_validators.dart +++ b/test/helpers/ast/logger_ast_validators.dart @@ -137,7 +137,7 @@ class LoggerComponentAstValidator { if (printerClass != null) { // Should extend LogPrinter final extendsClause = printerClass.extendsClause; - expect(extendsClause?.superclass.name2.lexeme, equals('LogPrinter'), + expect(extendsClause?.superclass.name.lexeme, equals('LogPrinter'), reason: 'SimpleLogPrinter should extend LogPrinter'); // Validate required fields @@ -374,4 +374,4 @@ class LoggerComponentAstValidator { final functions = unit.declarations.whereType(); return functions.where((f) => f.name.lexeme == name).firstOrNull; } -} \ No newline at end of file +} diff --git a/test/helpers/ast/router_ast_validators.dart b/test/helpers/ast/router_ast_validators.dart index b3d3ff6..ead3136 100644 --- a/test/helpers/ast/router_ast_validators.dart +++ b/test/helpers/ast/router_ast_validators.dart @@ -447,7 +447,7 @@ class RouteClassGeneratorAstValidator { reason: 'Router class $routerClassName should exist'); // Check inheritance - expect(routerClass!.extendsClause?.superclass.name2.lexeme, + expect(routerClass!.extendsClause?.superclass.name.lexeme, contains('RouterBase'), reason: '$routerClassName should extend RouterBase'); @@ -944,7 +944,7 @@ class NavigationExtensionAstValidator { ExtensionDeclaration extension, String methodName, ) { - for (final member in extension.members) { + for (final member in extension.body.members) { if (member is MethodDeclaration && member.name.lexeme == methodName) { return member; } diff --git a/test/helpers/element2_mock_helper.dart b/test/helpers/element_mock_helper.dart similarity index 81% rename from test/helpers/element2_mock_helper.dart rename to test/helpers/element_mock_helper.dart index 764e175..a88be1b 100644 --- a/test/helpers/element2_mock_helper.dart +++ b/test/helpers/element_mock_helper.dart @@ -1,4 +1,4 @@ -import 'package:analyzer/dart/element/element2.dart'; +import 'package:analyzer/dart/element/element.dart'; import 'package:analyzer/source/source.dart'; /// Custom mock source that returns a specific URI @@ -43,11 +43,11 @@ class _MockClassFragment implements ClassFragment { dynamic noSuchMethod(Invocation invocation) => throw UnimplementedError(); } -/// Custom mock ClassElement2 -class _MockClassElement2 implements ClassElement2 { +/// Custom mock ClassElement. +class _MockClassElement implements ClassElement { final ClassFragment _firstFragment; - - _MockClassElement2(this._firstFragment); + + _MockClassElement(this._firstFragment); @override ClassFragment get firstFragment => _firstFragment; @@ -57,16 +57,16 @@ class _MockClassElement2 implements ClassElement2 { dynamic noSuchMethod(Invocation invocation) => throw UnimplementedError(); } -/// Creates a mock ClassElement2 for testing Router 2.0 code generation -/// +/// Creates a mock ClassElement for testing Router 2.0 code generation. +/// /// [fileName] - The filename to use for the mock element (defaults to 'test_app.dart') -ClassElement2 createMockClassElement2({String fileName = 'test_app.dart'}) { +ClassElement createMockClassElement({String fileName = 'test_app.dart'}) { // Create the chain from bottom up final uri = Uri.parse('package:test_app/lib/$fileName'); final mockSource = _MockSource(uri); final mockLibraryFragment = _MockLibraryFragment(mockSource); final mockClassFragment = _MockClassFragment(mockLibraryFragment); - final mockElement = _MockClassElement2(mockClassFragment); - + final mockElement = _MockClassElement(mockClassFragment); + return mockElement; -} \ No newline at end of file +} diff --git a/test/helpers/element2_mock_helper_test.dart b/test/helpers/element_mock_helper_test.dart similarity index 78% rename from test/helpers/element2_mock_helper_test.dart rename to test/helpers/element_mock_helper_test.dart index 85c0fd6..1335453 100644 --- a/test/helpers/element2_mock_helper_test.dart +++ b/test/helpers/element_mock_helper_test.dart @@ -1,20 +1,20 @@ import 'package:test/test.dart'; -import 'element2_mock_helper.dart'; +import 'element_mock_helper.dart'; void main() { - group('Element2 Mock Helper Tests', () { - test('createMockClassElement2 returns working ClassElement2 mock', () { + group('Element Mock Helper Tests', () { + test('createMockClassElement returns working ClassElement mock', () { // Test with default filename - final mockElement = createMockClassElement2(); + final mockElement = createMockClassElement(); final fileName = mockElement.firstFragment.libraryFragment.source.uri.pathSegments.last; expect(fileName, equals('test_app.dart')); }); - test('createMockClassElement2 supports custom filenames', () { + test('createMockClassElement supports custom filenames', () { // Test with custom filename const customFileName = 'home_view.dart'; - final mockElement = createMockClassElement2(fileName: customFileName); + final mockElement = createMockClassElement(fileName: customFileName); final fileName = mockElement.firstFragment.libraryFragment.source.uri.pathSegments.last; expect(fileName, equals(customFileName)); @@ -23,7 +23,7 @@ void main() { test('mock supports full property chain used by Router 2.0 generator', () { // Test the exact chain used in auto_route_generator.dart const testFileName = 'settings_view.dart'; - final mockElement = createMockClassElement2(fileName: testFileName); + final mockElement = createMockClassElement(fileName: testFileName); // This is the exact chain from the generator: // clazz.firstFragment.libraryFragment.source.uri.pathSegments.last @@ -38,7 +38,7 @@ void main() { test('mock supports URI access for preferRelativeImports check', () { // Test the targetFileUri assignment used in auto_route_generator.dart const testFileName = 'profile_view.dart'; - final mockElement = createMockClassElement2(fileName: testFileName); + final mockElement = createMockClassElement(fileName: testFileName); // This is used for preferRelativeImports in the generator: // targetFileUri = element.firstFragment.libraryFragment.source.uri; @@ -49,4 +49,4 @@ void main() { expect(targetFileUri.scheme, equals('package')); }); }); -} \ No newline at end of file +} diff --git a/test/router_2/integration_test/router_2_integration_test.dart b/test/router_2/integration_test/router_2_integration_test.dart index 814c312..c1f8e6f 100644 --- a/test/router_2/integration_test/router_2_integration_test.dart +++ b/test/router_2/integration_test/router_2_integration_test.dart @@ -6,7 +6,7 @@ import 'package:stacked_generator/src/generators/router_common/models/router_con import 'package:stacked_generator/src/generators/router/route_config/material_route_config.dart'; import 'package:stacked_generator/src/generators/router_common/models/route_parameter_config.dart'; import 'package:stacked_generator/src/generators/exceptions/invalid_generator_input_exception.dart'; -import '../../helpers/element2_mock_helper.dart'; +import '../../helpers/element_mock_helper.dart'; void main() { group('Router 2.0 Integration Tests -', () { @@ -42,7 +42,7 @@ void main() { routerClassName: 'AppRouter', routesClassName: 'AppRoutes', routes: routes, - element: createMockClassElement2(fileName: 'app_router.dart'), + element: createMockClassElement(fileName: 'app_router.dart'), ); final result = generateLibrary(config); @@ -82,7 +82,7 @@ void main() { routerClassName: 'UserRouter', routesClassName: 'UserRoutes', routes: routes, - element: createMockClassElement2(fileName: 'user_router.dart'), + element: createMockClassElement(fileName: 'user_router.dart'), ); final result = generateLibrary(config); @@ -129,7 +129,7 @@ void main() { routerClassName: 'ArticleRouter', routesClassName: 'ArticleRoutes', routes: routes, - element: createMockClassElement2(fileName: 'article_router.dart'), + element: createMockClassElement(fileName: 'article_router.dart'), ); final result = generateLibrary(config); @@ -157,7 +157,7 @@ void main() { routerClassName: 'CustomRouter', routesClassName: 'CustomRoutes', routes: routes, - element: createMockClassElement2(fileName: 'custom_router.dart'), + element: createMockClassElement(fileName: 'custom_router.dart'), ); final result = generateLibrary(config); @@ -173,7 +173,7 @@ void main() { routerClassName: 'EmptyRouter', routesClassName: 'EmptyRoutes', routes: [], - element: createMockClassElement2(fileName: 'empty_router.dart'), + element: createMockClassElement(fileName: 'empty_router.dart'), ); // Currently the Router 2.0 generator doesn't handle empty routes well @@ -207,7 +207,7 @@ void main() { routerClassName: 'InvalidRouter', routesClassName: 'InvalidRoutes', routes: duplicateRoutes, - element: createMockClassElement2(fileName: 'invalid_router.dart'), + element: createMockClassElement(fileName: 'invalid_router.dart'), ); expect( @@ -233,7 +233,7 @@ void main() { routerClassName: 'TestRouter', routesClassName: 'TestRoutes', routes: routes, - element: createMockClassElement2(fileName: 'test_router.dart'), + element: createMockClassElement(fileName: 'test_router.dart'), ); final result = generateLibrary(config); @@ -265,7 +265,7 @@ void main() { routerClassName: 'ImportTestRouter', routesClassName: 'ImportTestRoutes', routes: routes, - element: createMockClassElement2(fileName: 'import_test_router.dart'), + element: createMockClassElement(fileName: 'import_test_router.dart'), ); final result = generateLibrary(config); @@ -278,4 +278,4 @@ void main() { }); }); }); -} \ No newline at end of file +} diff --git a/test/router_2/library_builder_test.dart b/test/router_2/library_builder_test.dart index 5a07dc4..1b98712 100644 --- a/test/router_2/library_builder_test.dart +++ b/test/router_2/library_builder_test.dart @@ -6,7 +6,7 @@ import 'package:stacked_generator/src/generators/router/route_config/material_ro import 'package:stacked_generator/src/generators/router_common/models/route_parameter_config.dart'; import 'package:test/test.dart'; -import '../helpers/element2_mock_helper.dart'; +import '../helpers/element_mock_helper.dart'; import 'package:stacked_generator/src/generators/exceptions/invalid_generator_input_exception.dart'; void main() { @@ -61,7 +61,7 @@ void main() { routerClassName: 'AppRouter', routesClassName: 'AppRoutes', routes: testRoutes, - element: createMockClassElement2(fileName: 'app_router.dart'), + element: createMockClassElement(fileName: 'app_router.dart'), ); }); @@ -138,7 +138,7 @@ void main() { routerClassName: 'TestRouter', routesClassName: 'TestRoutes', routes: duplicateRoutes, - element: createMockClassElement2(fileName: 'test_router.dart'), + element: createMockClassElement(fileName: 'test_router.dart'), ); expect( @@ -162,7 +162,7 @@ void main() { routerClassName: 'EmptyRouter', routesClassName: 'EmptyRoutes', routes: [], - element: createMockClassElement2(fileName: 'empty_router.dart'), + element: createMockClassElement(fileName: 'empty_router.dart'), ); // Empty routes currently cause an error in the generator @@ -187,7 +187,7 @@ void main() { routerClassName: 'GuardedRouter', routesClassName: 'GuardedRoutes', routes: guardedRoutes, - element: createMockClassElement2(fileName: 'guarded_router.dart'), + element: createMockClassElement(fileName: 'guarded_router.dart'), ); final result = generateLibrary(configWithGuards); @@ -209,4 +209,4 @@ void main() { }); }); }); -} \ No newline at end of file +}