From 3a40809b5971e672258d788a7c9d1fa7f0408053 Mon Sep 17 00:00:00 2001 From: Erik Ernst Date: Fri, 30 Jan 2026 14:56:23 +0100 Subject: [PATCH 1/9] New version number of this package --- packages/reflectable/pubspec.yaml | 2 +- packages/reflectable_builder/pubspec.yaml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/reflectable/pubspec.yaml b/packages/reflectable/pubspec.yaml index 33d1c832..3c592e5e 100644 --- a/packages/reflectable/pubspec.yaml +++ b/packages/reflectable/pubspec.yaml @@ -1,5 +1,5 @@ name: reflectable -version: 5.1.0 +version: 5.2.0 description: > Reflection support based on code generation, using 'capabilities' to specify which operations to support, on which objects. This is the diff --git a/packages/reflectable_builder/pubspec.yaml b/packages/reflectable_builder/pubspec.yaml index 47cb7604..43d32ec2 100644 --- a/packages/reflectable_builder/pubspec.yaml +++ b/packages/reflectable_builder/pubspec.yaml @@ -14,7 +14,7 @@ dependencies: dart_style: ^3.0.0 pub_semver: ^2.2.0 path: ^1.9.0 - reflectable: '>=5.1.0 <5.2.0' + reflectable: '>=5.2.0 <5.3.0' dev_dependencies: build_config: ^1.1.0 build_resolvers: ^3.0.4 From c65c9b58968fb82ae644e22d31f17bc9f8b0439c Mon Sep 17 00:00:00 2001 From: Erik Ernst Date: Fri, 30 Jan 2026 16:43:14 +0100 Subject: [PATCH 2/9] Migrate code generator to analyzer 10.0.0 --- packages/reflectable/CHANGELOG.md | 4 ++ packages/reflectable/pubspec.yaml | 2 +- packages/reflectable_builder/CHANGELOG.md | 4 ++ .../lib/src/builder_implementation.dart | 21 +++--- packages/reflectable_builder/pubspec.yaml | 12 ++-- .../test/exported_main_lib.dart | 67 ------------------- .../test/exported_main_test.dart | 10 --- 7 files changed, 27 insertions(+), 93 deletions(-) delete mode 100644 packages/test_reflectable/test/exported_main_lib.dart delete mode 100644 packages/test_reflectable/test/exported_main_test.dart diff --git a/packages/reflectable/CHANGELOG.md b/packages/reflectable/CHANGELOG.md index 55b19086..93d192c7 100644 --- a/packages/reflectable/CHANGELOG.md +++ b/packages/reflectable/CHANGELOG.md @@ -1,3 +1,7 @@ +## 5.2.0 + +- Upgrade reflectable to use analyzer ^9.0.0. + ## 5.1.0 - Upgrade reflectable to use version ^8.0.0 of the analyzer and version diff --git a/packages/reflectable/pubspec.yaml b/packages/reflectable/pubspec.yaml index 3c592e5e..321c7360 100644 --- a/packages/reflectable/pubspec.yaml +++ b/packages/reflectable/pubspec.yaml @@ -10,4 +10,4 @@ environment: resolution: workspace dependencies: dev_dependencies: - lints: ^5.0.0 + lints: ^6.0.0 diff --git a/packages/reflectable_builder/CHANGELOG.md b/packages/reflectable_builder/CHANGELOG.md index 8d41e80f..332023f0 100644 --- a/packages/reflectable_builder/CHANGELOG.md +++ b/packages/reflectable_builder/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.2.0 + +- Upgrade the code generator to use analyzer ^9.0.0. + ## 1.1.0 - Upgrade the reflectable code generator to use version ^8.0.0 of the diff --git a/packages/reflectable_builder/lib/src/builder_implementation.dart b/packages/reflectable_builder/lib/src/builder_implementation.dart index 2fd93b59..42806c7a 100644 --- a/packages/reflectable_builder/lib/src/builder_implementation.dart +++ b/packages/reflectable_builder/lib/src/builder_implementation.dart @@ -14,7 +14,6 @@ import 'package:analyzer/dart/analysis/results.dart'; import 'package:analyzer/dart/ast/ast.dart'; import 'package:analyzer/dart/constant/value.dart'; import 'package:analyzer/dart/element/element.dart'; -import 'package:analyzer/dart/element/element2.dart'; import 'package:analyzer/dart/element/nullability_suffix.dart'; import 'package:analyzer/dart/element/type.dart'; import 'package:analyzer/dart/element/type_system.dart'; @@ -2474,7 +2473,7 @@ class _ReflectorDomain { /// [importCollector] is used to find the library prefixes needed in order /// to obtain values from other libraries. String _dynamicTypeCodeOfClass( - TypeDefiningElement typeDefiningElement, + Element typeDefiningElement, _ImportCollector importCollector, ) { DartType? type = typeDefiningElement is InterfaceElement @@ -6412,7 +6411,7 @@ Future _evaluateConstant( Source source = unitElement.source; var libraryElement = unitElement.element as LibraryElementImpl; - var errorListener = RecorderingErrorListener(); + var errorListener = RecordingDiagnosticListener(); var errorReporter = ErrorReporter(errorListener, source); var declaredVariables = DeclaredVariables(); // No variables. @@ -6440,12 +6439,18 @@ Future _evaluateConstant( Constant constant = visitor.evaluateAndReportInvalidConstant(expression); DartObjectImpl? dartObject = constant is DartObjectImpl ? constant : null; - if (errorListener.errors.isNotEmpty) { - var message = StringBuffer('Constant `$expression` has errors:\n'); - for (AnalysisError error in errorListener.errors) { - message.writeln(error); + if (errorListener.diagnostics.isNotEmpty) { + bool hasErrors = false; + final message = StringBuffer('Constant `$expression` has errors:\n'); + for (final diagnostic in errorListener.diagnostics) { + if (diagnostic.severity == DiagnosticSeverity.ERROR) { + hasErrors = true; + message.writeln(error); + } + } + if (hasErrors) { + _severe(message.toString()); } - _severe(message.toString()); } return dartObject; diff --git a/packages/reflectable_builder/pubspec.yaml b/packages/reflectable_builder/pubspec.yaml index 43d32ec2..a0f2dfa5 100644 --- a/packages/reflectable_builder/pubspec.yaml +++ b/packages/reflectable_builder/pubspec.yaml @@ -9,19 +9,17 @@ environment: sdk: ^3.9.0 resolution: workspace dependencies: - analyzer: ^8.0.0 - build: ^4.0.0 + analyzer: ^10.0.0 + build: any # ^4.0.0 dart_style: ^3.0.0 pub_semver: ^2.2.0 path: ^1.9.0 reflectable: '>=5.2.0 <5.3.0' dev_dependencies: - build_config: ^1.1.0 - build_resolvers: ^3.0.4 - build_runner: ^2.4.0 - build_runner_core: ^9.3.2 + build_config: any # ^1.1.0 + build_runner: any # ^2.4.0 glob: ^2.1.0 - lints: ^5.0.0 + lints: ^6.0.0 logging: ^1.2.0 package_config: ^2.1.0 source_span: ^1.10.0 diff --git a/packages/test_reflectable/test/exported_main_lib.dart b/packages/test_reflectable/test/exported_main_lib.dart deleted file mode 100644 index ed3a1d47..00000000 --- a/packages/test_reflectable/test/exported_main_lib.dart +++ /dev/null @@ -1,67 +0,0 @@ -// Copyright (c) 2015, the Dart Team. All rights reserved. Use of this -// source code is governed by a BSD-style license that can be found in -// the LICENSE file. - -// This file illustrates a peculiar situation: The `main` function which -// defines the behavior of the program 'exported_main_test.dart' is not -// declared in 'exported_main_test.dart', it is defined in this library. -// When this situation arises, i.e., when `main` is imported by the root -// library rather than being declared in the root library, the modifications -// which are otherwise needed in the root library must be applied to the -// library where the relevant `main` function is declared, i.e., this -// library. -// -// So we add an import of 'reflectable.dart' and of the generated code in -// 'exported_main_test.reflectable.dart', and add `initializeReflectable()` -// at the beginning of the body of `main`. -// -// Note the asymmetry: This library depends on the name of the root library -// of the program ('exported_main_test'), because the code generator stores -// the generated code in a file whose name is determined by the name of the -// file containing the root library. -// -// This again means that it is not possible to use this library as part of -// several different programs, all of which are using this library in order -// to "reuse the same `main`" (this file would then have to import a different -// '*.reflectable.dart' for each of those root libraries, but a library cannot -// contain different text "as seen from" different importing libraries). -// -// We recommend that such a design is simply avoided by adding a `main` -// function in each of those root libraries, renaming the `main` below to -// something else, say `myMain`, and then calling `myMain` from the newly -// added `main` functions (it doesn't even have to be renamed, but the name -// `main` may be confusing when it's never used as the entry point of a -// program): -// -// import 'sameNameAsThisFile.reflectable.dart'; -// ... -// main(String[] args) { -// initializeReflectable(); -// myMain(args); -// } -// -// In other words, this program shows that it is possible to import `main`, -// but it is not recommended, doesn't scale, and is easy to avoid. This is -// also the reason why README.md and other documentation does not discuss -// that situation. - -library test_reflectable.test.exported_main_lib; - -import 'package:test/test.dart'; -import 'package:reflectable/reflectable.dart'; -import 'exported_main_test.reflectable.dart'; - -class Reflector extends Reflectable { - const Reflector() : super(typeCapability); -} - -@Reflector() -class C {} - -void main() { - initializeReflectable(); - - test('exported main', () { - expect(const Reflector().canReflectType(C), true); - }); -} diff --git a/packages/test_reflectable/test/exported_main_test.dart b/packages/test_reflectable/test/exported_main_test.dart deleted file mode 100644 index 0dc0eb96..00000000 --- a/packages/test_reflectable/test/exported_main_test.dart +++ /dev/null @@ -1,10 +0,0 @@ -// Copyright (c) 2015, the Dart Team. All rights reserved. Use of this -// source code is governed by a BSD-style license that can be found in -// the LICENSE file. - -// Test that the transformation works with an exported main from another -// library. - -library test_reflectable.test.exported_main_test; - -export 'exported_main_lib.dart'; From 92e5e60544c8496c3a4d4e241e16606bd3d4d3a8 Mon Sep 17 00:00:00 2001 From: Erik Ernst Date: Fri, 30 Jan 2026 16:43:52 +0100 Subject: [PATCH 3/9] WIP --- .../reflectable_builder/lib/src/builder_implementation.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/reflectable_builder/lib/src/builder_implementation.dart b/packages/reflectable_builder/lib/src/builder_implementation.dart index 42806c7a..269be20c 100644 --- a/packages/reflectable_builder/lib/src/builder_implementation.dart +++ b/packages/reflectable_builder/lib/src/builder_implementation.dart @@ -6445,7 +6445,7 @@ Future _evaluateConstant( for (final diagnostic in errorListener.diagnostics) { if (diagnostic.severity == DiagnosticSeverity.ERROR) { hasErrors = true; - message.writeln(error); + message.writeln(diagnostic); } } if (hasErrors) { From 67aae0a3f67615c83f3e6ef829bf96a4980787ff Mon Sep 17 00:00:00 2001 From: Erik Ernst Date: Fri, 30 Jan 2026 16:56:50 +0100 Subject: [PATCH 4/9] Correct wrong test to detect that a diagnostic is an error --- .../reflectable_builder/lib/src/builder_implementation.dart | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/reflectable_builder/lib/src/builder_implementation.dart b/packages/reflectable_builder/lib/src/builder_implementation.dart index 269be20c..7180dfe3 100644 --- a/packages/reflectable_builder/lib/src/builder_implementation.dart +++ b/packages/reflectable_builder/lib/src/builder_implementation.dart @@ -17,7 +17,7 @@ import 'package:analyzer/dart/element/element.dart'; import 'package:analyzer/dart/element/nullability_suffix.dart'; import 'package:analyzer/dart/element/type.dart'; import 'package:analyzer/dart/element/type_system.dart'; -import 'package:analyzer/error/error.dart'; +import 'package:analyzer/diagnostic/diagnostic.dart'; import 'package:analyzer/error/listener.dart'; import 'package:analyzer/source/line_info.dart'; import 'package:analyzer/source/source.dart'; @@ -6443,7 +6443,7 @@ Future _evaluateConstant( bool hasErrors = false; final message = StringBuffer('Constant `$expression` has errors:\n'); for (final diagnostic in errorListener.diagnostics) { - if (diagnostic.severity == DiagnosticSeverity.ERROR) { + if (diagnostic.severity == Severity.error) { hasErrors = true; message.writeln(diagnostic); } From 419d4f55800ca5b434badef1ae025a9bd34f2a12 Mon Sep 17 00:00:00 2001 From: Erik Ernst Date: Fri, 30 Jan 2026 17:00:11 +0100 Subject: [PATCH 5/9] Correct CHANGELOG.md --- packages/reflectable/CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/reflectable/CHANGELOG.md b/packages/reflectable/CHANGELOG.md index 93d192c7..81d85431 100644 --- a/packages/reflectable/CHANGELOG.md +++ b/packages/reflectable/CHANGELOG.md @@ -1,6 +1,6 @@ ## 5.2.0 -- Upgrade reflectable to use analyzer ^9.0.0. +- Upgrade reflectable to use analyzer ^10.0.0. ## 5.1.0 From e9d3a9830b7b59b693f90d8fa4130727579d4c14 Mon Sep 17 00:00:00 2001 From: Erik Ernst Date: Fri, 30 Jan 2026 17:01:34 +0100 Subject: [PATCH 6/9] WIP --- packages/reflectable/CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/reflectable/CHANGELOG.md b/packages/reflectable/CHANGELOG.md index 81d85431..7b83f0b7 100644 --- a/packages/reflectable/CHANGELOG.md +++ b/packages/reflectable/CHANGELOG.md @@ -1,6 +1,6 @@ ## 5.2.0 -- Upgrade reflectable to use analyzer ^10.0.0. +- Upgrade reflectable to use analyzer ^10.0.0 and lints ^6.0.0. ## 5.1.0 From 02294d165e35942ea338968f61ca629473deb253 Mon Sep 17 00:00:00 2001 From: Erik Ernst Date: Fri, 30 Jan 2026 17:03:45 +0100 Subject: [PATCH 7/9] WIP --- packages/reflectable_builder/CHANGELOG.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/reflectable_builder/CHANGELOG.md b/packages/reflectable_builder/CHANGELOG.md index 332023f0..d96c7b7c 100644 --- a/packages/reflectable_builder/CHANGELOG.md +++ b/packages/reflectable_builder/CHANGELOG.md @@ -1,6 +1,7 @@ ## 1.2.0 -- Upgrade the code generator to use analyzer ^9.0.0. +- Upgrade the code generator to use analyzer ^10.0.0 and lints 6.0.0. + Remove dependencies on discontinued packages. ## 1.1.0 From f80835a52ea885a727ed4d19ce0f6ca981799b90 Mon Sep 17 00:00:00 2001 From: Erik Ernst Date: Fri, 30 Jan 2026 17:14:00 +0100 Subject: [PATCH 8/9] WIP --- packages/reflectable_builder/pubspec.yaml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/reflectable_builder/pubspec.yaml b/packages/reflectable_builder/pubspec.yaml index a0f2dfa5..e3ffc41d 100644 --- a/packages/reflectable_builder/pubspec.yaml +++ b/packages/reflectable_builder/pubspec.yaml @@ -10,14 +10,14 @@ environment: resolution: workspace dependencies: analyzer: ^10.0.0 - build: any # ^4.0.0 + build: ^4.0.0 dart_style: ^3.0.0 pub_semver: ^2.2.0 path: ^1.9.0 reflectable: '>=5.2.0 <5.3.0' dev_dependencies: - build_config: any # ^1.1.0 - build_runner: any # ^2.4.0 + build_config: ^1.2.0 + build_runner: ^2.10.0 glob: ^2.1.0 lints: ^6.0.0 logging: ^1.2.0 From 4afe24fc46a79656e8fe1215432e502fcad52632 Mon Sep 17 00:00:00 2001 From: Erik Ernst Date: Fri, 30 Jan 2026 17:17:51 +0100 Subject: [PATCH 9/9] WIP --- packages/reflectable_builder/pubspec.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/reflectable_builder/pubspec.yaml b/packages/reflectable_builder/pubspec.yaml index e3ffc41d..4134ed1a 100644 --- a/packages/reflectable_builder/pubspec.yaml +++ b/packages/reflectable_builder/pubspec.yaml @@ -1,5 +1,5 @@ name: reflectable_builder -version: 1.1.0 +version: 1.2.0 description: > Reflection support based on code generation, using 'capabilities' to specify which operations to support, on which objects. This is the