From 8b1c39bf0ad8321d0b8a5f12708f9ca99919cb01 Mon Sep 17 00:00:00 2001 From: Uwe Date: Mon, 24 Mar 2025 13:26:31 +0100 Subject: [PATCH 1/7] Generator: allow analyzer 7, dart_style 3 and source_gen 2 #133 dart_style 3 requires specifying languageVersion for DartFormatter. This parameter also exists in version 2, so just always specify it to be backwards compatible. --- generator/lib/src/code_builder.dart | 3 ++- generator/pubspec.yaml | 6 +++--- objectbox/CHANGELOG.md | 1 + 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/generator/lib/src/code_builder.dart b/generator/lib/src/code_builder.dart index 9b6d45ea..f735df13 100644 --- a/generator/lib/src/code_builder.dart +++ b/generator/lib/src/code_builder.dart @@ -159,7 +159,8 @@ class CodeBuilder extends Builder { var code = CodeChunks.objectboxDart(model, imports, pubspec); try { - code = DartFormatter().format(code); + code = DartFormatter(languageVersion: DartFormatter.latestLanguageVersion) + .format(code); } finally { // Write the code even after a formatter error so it's easier to debug. final codeId = AssetId( diff --git a/generator/pubspec.yaml b/generator/pubspec.yaml index 3ea269b7..29e4b606 100644 --- a/generator/pubspec.yaml +++ b/generator/pubspec.yaml @@ -10,13 +10,13 @@ environment: dependencies: objectbox: 4.1.0 - analyzer: '>=5.2.0 <7.0.0' # 5.1.0 has a bug where DartType.element has been removed. + analyzer: '>=5.2.0 <8.0.0' # 5.1.0 has a bug where DartType.element has been removed. build: ^2.0.0 collection: ^1.15.0 - dart_style: ^2.0.0 + dart_style: '>=2.2.4 <4.0.0' glob: ^2.0.0 path: ^1.8.0 - source_gen: ^1.0.0 + source_gen: '>=1.2.7 <3.0.0' pubspec_parse: ^1.0.0 yaml: ^3.0.0 http: '>=0.13.5 <2.0.0' diff --git a/objectbox/CHANGELOG.md b/objectbox/CHANGELOG.md index 8dd3f2cd..3e598fcc 100644 --- a/objectbox/CHANGELOG.md +++ b/objectbox/CHANGELOG.md @@ -1,5 +1,6 @@ ## latest +* Allow analyzer 7, dart_style 3, source_gen 2 and pointycastle 4. * Examples: demos are compatible with JDK 21 included with Android Studio Ladybug or later, require Flutter SDK 3.24 (with Dart SDK 3.5) or newer. From 9dcff64d7ca409a2c30fd35d9cab5c000d676d38 Mon Sep 17 00:00:00 2001 From: Uwe Date: Mon, 24 Mar 2025 13:29:53 +0100 Subject: [PATCH 2/7] Generator: allow pointycastle 4 Major version 4 drops the unused js dependency, improving compatibility with other packages. --- generator/pubspec.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/generator/pubspec.yaml b/generator/pubspec.yaml index 29e4b606..1655f8ae 100644 --- a/generator/pubspec.yaml +++ b/generator/pubspec.yaml @@ -20,7 +20,7 @@ dependencies: pubspec_parse: ^1.0.0 yaml: ^3.0.0 http: '>=0.13.5 <2.0.0' - pointycastle: ^3.7.3 # 3.7.4 requires Dart 3, but still supporting 2.18 + pointycastle: '>=3.7.3 <5.0.0' # 3.7.4 requires Dart 3, but still supporting 2.18 dev_dependencies: test: ^1.16.5 From 67e154ef4ef3e00db6613cb3f700f870ebbf26d9 Mon Sep 17 00:00:00 2001 From: Uwe Date: Tue, 25 Mar 2025 09:21:14 +0100 Subject: [PATCH 3/7] Generator: require dart_style 2.3.7, requires analyzer 6.5 and Dart 3.4 #133 --- generator/pubspec.yaml | 6 +++--- objectbox/CHANGELOG.md | 1 + 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/generator/pubspec.yaml b/generator/pubspec.yaml index 1655f8ae..259f60ef 100644 --- a/generator/pubspec.yaml +++ b/generator/pubspec.yaml @@ -6,14 +6,14 @@ homepage: https://objectbox.io version: 4.1.0 environment: - sdk: '>=2.18.0 <4.0.0' + sdk: '^3.4.0' # analyzer 6.5.0 requires macros >=0.1.0-main.0 requires >=3.4.0-256.0.dev dependencies: objectbox: 4.1.0 - analyzer: '>=5.2.0 <8.0.0' # 5.1.0 has a bug where DartType.element has been removed. + analyzer: '>=6.5.0 <8.0.0' # dart_style 2.3.7 requires 6.5.0 build: ^2.0.0 collection: ^1.15.0 - dart_style: '>=2.2.4 <4.0.0' + dart_style: '>=2.3.7 <4.0.0' # require 2.3.7 for languageVersion in DartFormatter constructor glob: ^2.0.0 path: ^1.8.0 source_gen: '>=1.2.7 <3.0.0' diff --git a/objectbox/CHANGELOG.md b/objectbox/CHANGELOG.md index 3e598fcc..f94cf4ba 100644 --- a/objectbox/CHANGELOG.md +++ b/objectbox/CHANGELOG.md @@ -3,6 +3,7 @@ * Allow analyzer 7, dart_style 3, source_gen 2 and pointycastle 4. * Examples: demos are compatible with JDK 21 included with Android Studio Ladybug or later, require Flutter SDK 3.24 (with Dart SDK 3.5) or newer. +* Requires at least Dart SDK 3.4 or Flutter SDK 3.22. ## 4.1.0 (2025-02-04) From 5d93ef90f3c5f3c7a144fb4ad42fecae384a91ba Mon Sep 17 00:00:00 2001 From: Uwe Date: Tue, 25 Mar 2025 14:11:09 +0100 Subject: [PATCH 4/7] Dart 3: remove unreachable switch default case --- generator/lib/src/entity_resolver.dart | 4 ---- 1 file changed, 4 deletions(-) diff --git a/generator/lib/src/entity_resolver.dart b/generator/lib/src/entity_resolver.dart index f5e3d9f7..eb688718 100644 --- a/generator/lib/src/entity_resolver.dart +++ b/generator/lib/src/entity_resolver.dart @@ -447,10 +447,6 @@ class EntityResolver extends Builder { case IndexType.hash64: prop.flags |= OBXPropertyFlags.INDEX_HASH64; break; - default: - throw InvalidGenerationSourceError( - "Entity '${elementBare.name}': index type $indexType not supported.", - element: f); } } From 44ca1d094e23514359fc132543b12e3fe999e799 Mon Sep 17 00:00:00 2001 From: Uwe Date: Tue, 25 Mar 2025 14:26:59 +0100 Subject: [PATCH 5/7] CI: exclude generated code from format check dart format has changed its format and determines this by looking at the resolved required SDK of a package. Because the objectbox_test package where code is generated does not yet require a recent Dart SDK, dart format will fail, because the generator formats using the latest style. --- .github/workflows/code-analysis.yml | 16 ++++++++-------- .gitlab-ci.yml | 18 +++++++++--------- 2 files changed, 17 insertions(+), 17 deletions(-) diff --git a/.github/workflows/code-analysis.yml b/.github/workflows/code-analysis.yml index 187a319e..a48f212f 100644 --- a/.github/workflows/code-analysis.yml +++ b/.github/workflows/code-analysis.yml @@ -19,7 +19,7 @@ env: DART_VERSION: 3.7.2 # Available versions: https://dart.dev/get-dart/archive jobs: - analyze-and-format: + format-and-analyze: runs-on: ubuntu-24.04 steps: - uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 # v4.2.0 @@ -33,6 +33,13 @@ jobs: dart pub get --directory=generator dart pub get --directory=objectbox dart pub get --directory=objectbox_test + flutter pub get --directory=flutter_libs + flutter pub get --directory=sync_flutter_libs + # Since Dart 3.7, dart format needs pub get to run before formatting, + # so to check formatting of Flutter packages run pub get for them as well. + # Also run before generating code to exclude generated code. + - name: Check formatting of all packages + run: dart format --set-exit-if-changed . - name: Generate code (benchmark) working-directory: benchmark run: dart run build_runner build @@ -45,13 +52,6 @@ jobs: dart analyze generator dart analyze objectbox dart analyze objectbox_test - - name: Check formatting of all packages - # Since Dart 3.7, dart format needs pub get to run before formatting, - # so to check formatting of Flutter packages run pub get for them first. - run: | - flutter pub get --directory=flutter_libs - flutter pub get --directory=sync_flutter_libs - dart format --set-exit-if-changed . pana: runs-on: ubuntu-24.04 diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 980eaa8e..a60c8df2 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -33,7 +33,7 @@ variables: key: "linux-x64-dart-$DART_VERSION-pub-cache" # Analyze (only) Dart packages, check formatting in Dart and Flutter packages. -analyze-and-format: +format-and-analyze: extends: .cache stage: code-analysis script: @@ -43,6 +43,14 @@ analyze-and-format: - dart pub get --directory=objectbox - dart pub get --directory=objectbox_test - dart pub get --directory=objectbox/example/dart-native/vectorsearch_cities + # Since Dart 3.7, dart format needs pub get to run before formatting, + # so can no longer check formatting of Flutter packages (would require Flutter SDK): + # Check formatting only for Dart packages (run before generating code to exclude generated code) + - dart format --set-exit-if-changed benchmark + - dart format --set-exit-if-changed generator + - dart format --set-exit-if-changed objectbox + - dart format --set-exit-if-changed objectbox_test + - dart format --set-exit-if-changed objectbox/example/dart-native # Generate code - cd benchmark - dart run build_runner build @@ -57,14 +65,6 @@ analyze-and-format: - dart analyze objectbox - dart analyze objectbox_test - dart analyze objectbox/example/dart-native/vectorsearch_cities - # Since Dart 3.7, dart format needs pub get to run before formatting, - # so can no longer check formatting of Flutter packages (would require Flutter SDK): - # Check formatting only for Dart packages - - dart format --set-exit-if-changed benchmark - - dart format --set-exit-if-changed generator - - dart format --set-exit-if-changed objectbox - - dart format --set-exit-if-changed objectbox_test - - dart format --set-exit-if-changed objectbox/example/dart-native # Runs generator integration tests, e.g. ensures generator works as expected. # Note: no need to test oldest SDK here, generator package is also built as part of unit-tests job. From 5125a7188b89442ce376f73b0d628a6982f50183 Mon Sep 17 00:00:00 2001 From: Uwe Date: Mon, 31 Mar 2025 13:58:14 +0200 Subject: [PATCH 6/7] Generator: run pub upgrade --tighten with Dart SDK 3.4.0 Increase minimum required dependencies to those resolvable with Dart SDK 3.4.0. --- generator/pubspec.yaml | 29 ++++++++++++++--------------- 1 file changed, 14 insertions(+), 15 deletions(-) diff --git a/generator/pubspec.yaml b/generator/pubspec.yaml index 259f60ef..1ab46b7a 100644 --- a/generator/pubspec.yaml +++ b/generator/pubspec.yaml @@ -11,21 +11,20 @@ environment: dependencies: objectbox: 4.1.0 analyzer: '>=6.5.0 <8.0.0' # dart_style 2.3.7 requires 6.5.0 - build: ^2.0.0 - collection: ^1.15.0 + build: ^2.4.1 + collection: ^1.19.1 dart_style: '>=2.3.7 <4.0.0' # require 2.3.7 for languageVersion in DartFormatter constructor - glob: ^2.0.0 - path: ^1.8.0 - source_gen: '>=1.2.7 <3.0.0' - pubspec_parse: ^1.0.0 - yaml: ^3.0.0 - http: '>=0.13.5 <2.0.0' - pointycastle: '>=3.7.3 <5.0.0' # 3.7.4 requires Dart 3, but still supporting 2.18 + glob: ^2.1.3 + path: ^1.9.1 + source_gen: ">=1.5.0 <3.0.0" + pubspec_parse: ^1.4.0 + yaml: ^3.1.3 + http: ^1.3.0 + pointycastle: ^4.0.0 dev_dependencies: - test: ^1.16.5 - # lints 2.1.0+ requires Dart 3, but CI still tests with Dart 2, but also need 3.0.0+ to match pana - lints: '>=2.0.1 <4.0.0' - pub_semver: ^2.1.3 - package_config: ^2.1.0 - build_test: + test: ^1.25.8 + lints: ^3.0.0 + pub_semver: ^2.2.0 + package_config: ^2.2.0 + build_test: ^2.2.2 From 058fc69285da5630339b74ccd58322d89b9598d4 Mon Sep 17 00:00:00 2001 From: Uwe Date: Mon, 31 Mar 2025 14:59:43 +0200 Subject: [PATCH 7/7] Generator: for Flutter, allow collection 1.18.0, require Dart 3.5 Require Dart 3.5 because Flutter SDK 3.24.0 is required to get high enough meta version required by analyzer and pinned by Flutter SDK. --- generator/pubspec.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/generator/pubspec.yaml b/generator/pubspec.yaml index 1ab46b7a..eb1c51cb 100644 --- a/generator/pubspec.yaml +++ b/generator/pubspec.yaml @@ -6,13 +6,13 @@ homepage: https://objectbox.io version: 4.1.0 environment: - sdk: '^3.4.0' # analyzer 6.5.0 requires macros >=0.1.0-main.0 requires >=3.4.0-256.0.dev + sdk: '^3.5.0' # analyzer 6.5.0 requires meta 1.14.0 requires Flutter SDK 3.24.0 requires 3.5.0 dependencies: objectbox: 4.1.0 analyzer: '>=6.5.0 <8.0.0' # dart_style 2.3.7 requires 6.5.0 build: ^2.4.1 - collection: ^1.19.1 + collection: ^1.18.0 # Would require 1.19.1, but Flutter 3.24.0 has 1.18.0 pinned dart_style: '>=2.3.7 <4.0.0' # require 2.3.7 for languageVersion in DartFormatter constructor glob: ^2.1.3 path: ^1.9.1