From 9be43b9632c3945934d384f1723507f2d4ac491c Mon Sep 17 00:00:00 2001 From: Florian Date: Thu, 6 Nov 2025 20:59:23 +0100 Subject: [PATCH] update source_gen to v4 --- CHANGELOG.md | 2 +- analysis_options.yaml | 1 - melos.yaml | 2 +- packages/CHANGELOG.ejson.md | 4 +++ packages/ejson/pubspec.yaml | 14 ++++---- .../lib/src/ejson_analyzer_base.dart | 2 +- packages/ejson_analyzer/pubspec.yaml | 14 ++++---- packages/ejson_annotation/pubspec.yaml | 6 ++-- .../ejson_generator/lib/src/generator.dart | 12 +++---- packages/ejson_generator/pubspec.yaml | 24 +++++++------- .../ejson_generator/test/compile_test.dart | 15 ++++++--- packages/ejson_lint/example/pubspec.yaml | 8 ++--- .../lib/src/lints/mismatched_getter_type.dart | 20 +++++------ .../lib/src/lints/missing_getter.dart | 16 ++++----- .../too_many_annotated_constructors.dart | 10 +++--- packages/ejson_lint/pubspec.yaml | 14 ++++---- packages/realm/example/pubspec.yaml | 4 +-- packages/realm/pubspec.yaml | 2 +- packages/realm/tests/pubspec.yaml | 6 ++-- packages/realm_common/pubspec.yaml | 4 +-- packages/realm_dart/dev/pubspec.yaml | 4 +-- packages/realm_dart/example/pubspec.yaml | 4 +-- packages/realm_dart/pubspec.yaml | 10 +++--- .../lib/src/class_element_ex.dart | 2 +- .../realm_generator/lib/src/dart_type_ex.dart | 6 ++-- packages/realm_generator/lib/src/element.dart | 4 +-- packages/realm_generator/lib/src/error.dart | 2 +- .../lib/src/field_element_ex.dart | 16 ++++----- .../lib/src/realm_field_info.dart | 2 +- .../lib/src/type_checkers.dart | 12 +++---- packages/realm_generator/pubspec.yaml | 19 +++++------ packages/realm_generator/test/common.dart | 5 ++- packages/realm_generator/test/test_util.dart | 33 +++++++++++-------- 33 files changed, 155 insertions(+), 144 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index b5652ade9..11ea1616b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,7 +1,7 @@ ## vNext (TBD) ### Enhancements -* None +* Upgrade min Dart SDK to 3.7.0, update all dependencies to latest stable version. ### Fixed * None diff --git a/analysis_options.yaml b/analysis_options.yaml index 16bcf0407..66e7ea536 100644 --- a/analysis_options.yaml +++ b/analysis_options.yaml @@ -18,7 +18,6 @@ analyzer: linter: rules: avoid_relative_lib_imports: false - package_api_docs: true # For more information about the core and recommended set of lints, see # https://dart.dev/go/core-lints diff --git a/melos.yaml b/melos.yaml index c1dcd34c2..2da95790a 100644 --- a/melos.yaml +++ b/melos.yaml @@ -14,7 +14,7 @@ packages: command: bootstrap: environment: - sdk: ^3.6.0 + sdk: ^3.7.0 flutter: ^3.27.0 dev_dependencies: lints: ^5.1.1 diff --git a/packages/CHANGELOG.ejson.md b/packages/CHANGELOG.ejson.md index 0eafe363d..e53c17ea8 100644 --- a/packages/CHANGELOG.ejson.md +++ b/packages/CHANGELOG.ejson.md @@ -1,3 +1,7 @@ +## 0.4.2 + +- Upgrade min Dart SDK to 3.7.0, update all dependencies to latest stable version, and tighten lower bounds. + ## 0.4.1 - Upgrade min Dart SDK to 3.6.0, update all dependencies to latest stable version, and tighten lower bounds. diff --git a/packages/ejson/pubspec.yaml b/packages/ejson/pubspec.yaml index bc4555c57..2409577a9 100644 --- a/packages/ejson/pubspec.yaml +++ b/packages/ejson/pubspec.yaml @@ -12,21 +12,21 @@ topics: - build-runner - codegen -version: 0.4.1 +version: 0.4.2 repository: https://github.com/realm/realm-dart/ejson/packages/ejson environment: - sdk: ^3.6.0 + sdk: ^3.7.0 dependencies: collection: ^1.19.0 - ejson_annotation: ^0.4.1 + ejson_annotation: ^0.4.2 objectid: ^4.0.0 sane_uuid: ^1.0.0 type_plus: ^2.0.0 dev_dependencies: - build_runner: ^2.4.14 - ejson_generator: ^0.4.1 - lints: ^5.1.1 - test: ^1.25.9 + build_runner: ^2.6.0 + ejson_generator: ^0.4.2 + lints: ^6.0.0 + test: ^1.26.3 diff --git a/packages/ejson_analyzer/lib/src/ejson_analyzer_base.dart b/packages/ejson_analyzer/lib/src/ejson_analyzer_base.dart index c2b89c32b..c713d22a1 100644 --- a/packages/ejson_analyzer/lib/src/ejson_analyzer_base.dart +++ b/packages/ejson_analyzer/lib/src/ejson_analyzer_base.dart @@ -5,7 +5,7 @@ import 'package:analyzer/dart/element/element.dart'; import 'package:ejson_annotation/ejson_annotation.dart'; import 'package:source_gen/source_gen.dart'; -TypeChecker get typeChecker => TypeChecker.fromRuntime(EJson); +TypeChecker get typeChecker => TypeChecker.typeNamed(EJson); EJson getEJsonAnnotation(Element element) => typeChecker.firstAnnotationOfExact(element) as EJson; bool isEJsonAnnotated(Element element) => typeChecker.hasAnnotationOfExact(element); diff --git a/packages/ejson_analyzer/pubspec.yaml b/packages/ejson_analyzer/pubspec.yaml index ddeb2c25c..fbbe6ecd9 100644 --- a/packages/ejson_analyzer/pubspec.yaml +++ b/packages/ejson_analyzer/pubspec.yaml @@ -5,17 +5,17 @@ description: >- BSON is a binary format used to store JSON-like documents efficiently. EJSON extends JSON defining how all BSON types should be represented in JSON. -version: 0.4.1 +version: 0.4.2 repository: https://github.com/realm/realm-dart/ejson/packages/ejson_analyzer environment: - sdk: ^3.6.0 + sdk: ^3.7.0 dependencies: - analyzer: ^7.3.0 - ejson_annotation: ^0.4.1 - source_gen: ^2.0.0 + analyzer: ^8.0.0 + ejson_annotation: ^0.4.2 + source_gen: ^4.0.0 dev_dependencies: - lints: ^5.1.1 - test: ^1.25.9 + lints: ^6.0.0 + test: ^1.26.3 diff --git a/packages/ejson_annotation/pubspec.yaml b/packages/ejson_annotation/pubspec.yaml index 554e3df18..f4c36b167 100644 --- a/packages/ejson_annotation/pubspec.yaml +++ b/packages/ejson_annotation/pubspec.yaml @@ -5,11 +5,11 @@ description: >- BSON is a binary format used to store JSON-like documents efficiently. EJSON extends JSON defining how all BSON types should be represented in JSON. -version: 0.4.1 +version: 0.4.2 repository: https://github.com/realm/realm-dart/ejson/packages/ejson_annotation environment: - sdk: ^3.6.0 + sdk: ^3.7.0 dev_dependencies: - lints: ^5.1.1 + lints: ^6.0.0 diff --git a/packages/ejson_generator/lib/src/generator.dart b/packages/ejson_generator/lib/src/generator.dart index 66fe6fea5..2c2641a1b 100644 --- a/packages/ejson_generator/lib/src/generator.dart +++ b/packages/ejson_generator/lib/src/generator.dart @@ -66,9 +66,9 @@ class EJsonGenerator extends Generator { EJsonError.noExplicitConstructor.raise(); } - for (final p in ctor.parameters) { + for (final p in ctor.formalParameters) { // check that all ctor parameters have a getter with the same name and type - final getter = cls.getGetter(p.name); + final getter = cls.getGetter(p.displayName); if (getter == null) { EJsonError.missingGetter.raise(); } @@ -82,14 +82,14 @@ class EJsonGenerator extends Generator { return ''' EJsonValue _encode$className($className value) { return { - ${ctor.parameters.map((p) => "'${p.name}': value.${p.name}.toEJson()").join(',\n')} + ${ctor.formalParameters.map((p) => "'${p.name}': value.${p.name}.toEJson()").join(',\n')} }; } $className _decode$className(EJsonValue ejson) { return switch (ejson) { - ${decodePattern(ctor.parameters)} => $className${ctor.name.isEmpty ? '' : '.${ctor.name}'}( - ${ctor.parameters.map((p) => "${p.isNamed ? '${p.name} : ' : ''}fromEJson(${p.name})").join(',\n')} + ${decodePattern(ctor.formalParameters)} => $className${ctor.displayName.isEmpty ? '' : '.${ctor.name}'}( + ${ctor.formalParameters.map((p) => "${p.isNamed ? '${p.name} : ' : ''}fromEJson(${p.name})").join(',\n')} ), _ => raiseInvalidEJson(ejson), }; @@ -106,7 +106,7 @@ class EJsonGenerator extends Generator { } } -String decodePattern(Iterable parameters) { +String decodePattern(Iterable parameters) { if (parameters.isEmpty) { return 'Map m when m.isEmpty'; } diff --git a/packages/ejson_generator/pubspec.yaml b/packages/ejson_generator/pubspec.yaml index a82790ead..9308cbc7a 100644 --- a/packages/ejson_generator/pubspec.yaml +++ b/packages/ejson_generator/pubspec.yaml @@ -12,25 +12,25 @@ topics: - build-runner - codegen -version: 0.4.1 +version: 0.4.2 repository: https://github.com/realm/realm-dart/ejson/packages/ejson_generator environment: - sdk: ^3.6.0 + sdk: ^3.7.0 dependencies: - analyzer: ^7.3.0 - build: '2.4.2' - ejson_analyzer: ^0.4.1 - source_gen: ^2.0.0 + analyzer: ^8.0.0 + build: 4.0.2 + ejson_analyzer: ^0.4.2 + source_gen: ^4.0.0 dev_dependencies: - build_runner: ^2.4.14 - build_test: ^2.2.2 + build_runner: ^2.6.0 + build_test: ^3.0.0 dart_style: ^3.0.1 - ejson: ^0.4.1 - ejson_annotation: ^0.4.1 - lints: ^5.1.1 + ejson: ^0.4.2 + ejson_annotation: ^0.4.2 + lints: ^6.0.0 meta: ^1.15.0 - test: ^1.25.9 + test: ^1.26.3 pub_semver: ^2.2.0 diff --git a/packages/ejson_generator/test/compile_test.dart b/packages/ejson_generator/test/compile_test.dart index f46561785..898de231c 100644 --- a/packages/ejson_generator/test/compile_test.dart +++ b/packages/ejson_generator/test/compile_test.dart @@ -1,3 +1,4 @@ +import 'dart:convert'; import 'dart:io'; import 'package:build_test/build_test.dart'; @@ -30,14 +31,18 @@ void testCompile(String description, dynamic source, dynamic matcher, {dynamic s test(description, () { generate() async { - final writer = InMemoryAssetWriter(); - await testBuilder( + final readerWriter = TestReaderWriter(); + await readerWriter.testing.loadIsolateSources(); + final result = await testBuilder( getEJsonGenerator(), {'pkg|source.dart': source as Object}, - writer: writer, - reader: await PackageAssetReader.currentIsolate(), + readerWriter: readerWriter, ); - return _formatter.format(String.fromCharCodes(writer.assets.entries.single.value)); + final rw = result.readerWriter; + final outId = rw.testing.assetsWritten.single; + final bytes = await rw.readAsBytes(outId); + + return _formatter.format(utf8.decode(bytes)); } expect(generate(), matcher); diff --git a/packages/ejson_lint/example/pubspec.yaml b/packages/ejson_lint/example/pubspec.yaml index f2c67bd10..2461472e5 100644 --- a/packages/ejson_lint/example/pubspec.yaml +++ b/packages/ejson_lint/example/pubspec.yaml @@ -5,12 +5,12 @@ version: 1.0.0 publish_to: none environment: - sdk: ^3.6.0 + sdk: ^3.7.0 dependencies: - ejson_annotation: ^0.4.1 + ejson_annotation: ^0.4.2 dev_dependencies: custom_lint: ^0.7.1 - ejson_lint: ^0.4.1 - lints: ^5.1.1 + ejson_lint: ^0.4.2 + lints: ^6.0.0 diff --git a/packages/ejson_lint/lib/src/lints/mismatched_getter_type.dart b/packages/ejson_lint/lib/src/lints/mismatched_getter_type.dart index 5b51aee15..14615760b 100644 --- a/packages/ejson_lint/lib/src/lints/mismatched_getter_type.dart +++ b/packages/ejson_lint/lib/src/lints/mismatched_getter_type.dart @@ -13,27 +13,27 @@ class MismatchedGetterType extends DartLintRule { code: const LintCode( name: 'mismatched_getter_type', problemMessage: 'Type of getter does not match type of constructor parameter', - errorSeverity: error.ErrorSeverity.ERROR, + errorSeverity: error.DiagnosticSeverity.ERROR, ), ); @override void run( CustomLintResolver resolver, - ErrorReporter reporter, + DiagnosticReporter reporter, CustomLintContext context, ) { context.registry.addConstructorDeclaration((node) { - final ctor = node.declaredElement; + final ctor = node.declaredFragment; if (ctor == null) return; // not resolved; - if (isEJsonAnnotated(ctor)) { - final cls = ctor.enclosingElement3 as ClassElement; - for (final param in ctor.parameters) { - final getter = cls.getGetter(param.name); + if (isEJsonAnnotated(ctor.element)) { + final cls = ctor.element.enclosingElement as ClassElement; + for (final param in ctor.formalParameters) { + final getter = cls.getGetter(param.name ?? ""); if (getter == null) continue; - if (getter.returnType != param.type) { - reporter.atElement(getter, code); - reporter.atElement(param, code); + if (getter.returnType != param.runtimeType) { + reporter.atElement2(getter, code); + reporter.atElement2(param.element, code); } } } diff --git a/packages/ejson_lint/lib/src/lints/missing_getter.dart b/packages/ejson_lint/lib/src/lints/missing_getter.dart index f774717d5..d4190793e 100644 --- a/packages/ejson_lint/lib/src/lints/missing_getter.dart +++ b/packages/ejson_lint/lib/src/lints/missing_getter.dart @@ -13,24 +13,24 @@ class MissingGetter extends DartLintRule { code: const LintCode( name: 'missing_getter', problemMessage: 'Missing getter for constructor parameter', - errorSeverity: error.ErrorSeverity.ERROR, + errorSeverity: error.DiagnosticSeverity.ERROR, ), ); @override void run( CustomLintResolver resolver, - ErrorReporter reporter, + DiagnosticReporter reporter, CustomLintContext context, ) { context.registry.addConstructorDeclaration((node) { - final ctor = node.declaredElement; + final ctor = node.declaredFragment; if (ctor == null) return; // not resolved; - if (isEJsonAnnotated(ctor)) { - final cls = ctor.enclosingElement3 as ClassElement; - for (final param in ctor.parameters) { - final getter = cls.getGetter(param.name); - if (getter == null) reporter.atElement(param, code); + if (isEJsonAnnotated(ctor.element)) { + final cls = ctor.element.enclosingElement as ClassElement; + for (final param in ctor.formalParameters) { + final getter = cls.getGetter(param.name ?? ""); + if (getter == null) reporter.atElement2(param.element, code); } } }); diff --git a/packages/ejson_lint/lib/src/lints/too_many_annotated_constructors.dart b/packages/ejson_lint/lib/src/lints/too_many_annotated_constructors.dart index 35fcc0a49..61a8e8654 100644 --- a/packages/ejson_lint/lib/src/lints/too_many_annotated_constructors.dart +++ b/packages/ejson_lint/lib/src/lints/too_many_annotated_constructors.dart @@ -21,24 +21,24 @@ class TooManyAnnotatedConstructors extends DartLintRule { code: const LintCode( name: 'too_many_annotated_constructors', problemMessage: 'Only one constructor can be annotated', - errorSeverity: error.ErrorSeverity.ERROR, + errorSeverity: error.DiagnosticSeverity.ERROR, ), ); @override void run( CustomLintResolver resolver, - ErrorReporter reporter, + DiagnosticReporter reporter, CustomLintContext context, ) { context.registry.addClassDeclaration((node) { - final cls = node.declaredElement; + final cls = node.declaredFragment; if (cls == null) return; // not resolved; - final annotatedConstructors = cls.constructors.where((ctor) => isEJsonAnnotated(ctor)); + final annotatedConstructors = cls.constructors.where((ctor) => isEJsonAnnotated(ctor.element)); if (annotatedConstructors.length > 1) { for (final ctor in annotatedConstructors) { - reporter.atElement(ctor, code); + reporter.atElement2(ctor.element, code); } } }); diff --git a/packages/ejson_lint/pubspec.yaml b/packages/ejson_lint/pubspec.yaml index 2eb31bf17..6d61b4810 100644 --- a/packages/ejson_lint/pubspec.yaml +++ b/packages/ejson_lint/pubspec.yaml @@ -5,17 +5,17 @@ description: >- BSON is a binary format used to store JSON-like documents efficiently. EJSON extends JSON defining how all BSON types should be represented in JSON. -version: 0.4.1 +version: 0.4.2 repository: https://github.com/realm/realm-dart/ejson/packages/ejson_lint environment: - sdk: ^3.6.0 + sdk: ^3.7.0 dependencies: - analyzer: ^7.3.0 - custom_lint_builder: ^0.7.1 - ejson_analyzer: ^0.4.1 + analyzer: ^8.0.0 + custom_lint_builder: ^0.8.1 + ejson_analyzer: ^0.4.2 dev_dependencies: - lints: ^5.1.1 - test: ^1.25.9 + lints: ^6.0.0 + test: ^1.26.3 diff --git a/packages/realm/example/pubspec.yaml b/packages/realm/example/pubspec.yaml index 1aa834752..a31386e9b 100644 --- a/packages/realm/example/pubspec.yaml +++ b/packages/realm/example/pubspec.yaml @@ -5,7 +5,7 @@ version: 2.0.0-alpha.2 publish_to: "none" environment: - sdk: ^3.6.0 + sdk: ^3.7.0 flutter: ^3.27.0 dependencies: @@ -15,7 +15,7 @@ dependencies: characters: ^1.4.0 dev_dependencies: - flutter_lints: ^5.0.0 + flutter_lints: ^6.0.0 flutter: uses-material-design: true diff --git a/packages/realm/pubspec.yaml b/packages/realm/pubspec.yaml index 19eafb3d4..551a54f0f 100644 --- a/packages/realm/pubspec.yaml +++ b/packages/realm/pubspec.yaml @@ -7,7 +7,7 @@ repository: https://github.com/realm/realm-dart issue_tracker: https://github.com/realm/realm-dart/issues environment: - sdk: ^3.6.0 + sdk: ^3.7.0 flutter: ^3.27.0 dependencies: diff --git a/packages/realm/tests/pubspec.yaml b/packages/realm/tests/pubspec.yaml index 5c045bfd0..b0d0bbb7c 100644 --- a/packages/realm/tests/pubspec.yaml +++ b/packages/realm/tests/pubspec.yaml @@ -6,7 +6,7 @@ publish_to: "none" version: 2.0.0-alpha.2 environment: - sdk: ^3.6.0 + sdk: ^3.7.0 flutter: ^3.27.0 dependencies: @@ -23,10 +23,10 @@ dependencies: dev_dependencies: flutter_test: sdk: flutter - flutter_lints: ^5.0.0 + flutter_lints: ^6.0.0 integration_test: sdk: flutter - test: ^1.25.13 + test: ^1.26.3 timezone: ^0.10.0 universal_platform: ^1.1.0 diff --git a/packages/realm_common/pubspec.yaml b/packages/realm_common/pubspec.yaml index 55f4f4d75..f7c7d0b27 100644 --- a/packages/realm_common/pubspec.yaml +++ b/packages/realm_common/pubspec.yaml @@ -10,7 +10,7 @@ repository: https://github.com/realm/realm-dart issue_tracker: https://github.com/realm/realm-dart/issues environment: - sdk: ^3.6.0 + sdk: ^3.7.0 dependencies: collection: ^1.18.0 @@ -18,4 +18,4 @@ dependencies: sane_uuid: ^1.0.0 dev_dependencies: - lints: ^5.1.1 + lints: ^6.0.0 diff --git a/packages/realm_dart/dev/pubspec.yaml b/packages/realm_dart/dev/pubspec.yaml index 7d7fdbcc2..9d2fe8d8d 100644 --- a/packages/realm_dart/dev/pubspec.yaml +++ b/packages/realm_dart/dev/pubspec.yaml @@ -15,8 +15,8 @@ dependencies: mason_logger: ^0.3.3 dev_dependencies: - lints: ^5.1.1 - test: ^1.24.0 + lints: ^6.0.0 + test: ^1.26.3 executables: dev: diff --git a/packages/realm_dart/example/pubspec.yaml b/packages/realm_dart/example/pubspec.yaml index c186746ca..c52e61c5f 100644 --- a/packages/realm_dart/example/pubspec.yaml +++ b/packages/realm_dart/example/pubspec.yaml @@ -4,11 +4,11 @@ description: A simple command-line application using Realm Dart SDK. publish_to: none environment: - sdk: ^3.6.0 + sdk: ^3.7.0 dependencies: realm_dart: path: ../ dev_dependencies: - lints: ^5.1.1 + lints: ^6.0.0 diff --git a/packages/realm_dart/pubspec.yaml b/packages/realm_dart/pubspec.yaml index 46f057063..ac1fab2eb 100644 --- a/packages/realm_dart/pubspec.yaml +++ b/packages/realm_dart/pubspec.yaml @@ -7,14 +7,14 @@ repository: https://github.com/realm/realm-dart issue_tracker: https://github.com/realm/realm-dart/issues environment: - sdk: ^3.6.0 + sdk: ^3.7.0 dependencies: args: ^2.6.0 build_cli_annotations: ^2.1.0 collection: ^1.19.0 crypto: ^3.0.0 - ejson: ^0.4.1 + ejson: ^0.4.2 ffi: ^2.0.1 json_annotation: ^4.9.0 logging: ^1.2.0 @@ -26,7 +26,7 @@ dependencies: realm_common: ^20.2.0 realm_generator: ^20.2.0 tar: ^2.0.0 - build_runner: ^2.4.14 + build_runner: ^2.6.0 http: ^1.2.1 cancellation_token: ^2.0.0 decimal: ^3.0.1 @@ -37,7 +37,7 @@ dev_dependencies: build_cli: ^2.2.4 ffigen: ^18.0.0 json_serializable: ^6.9.2 - lints: ^5.1.1 - test: ^1.25.9 + lints: ^6.0.0 + test: ^1.26.3 timezone: ^0.10.0 universal_platform: ^1.1.0 diff --git a/packages/realm_generator/lib/src/class_element_ex.dart b/packages/realm_generator/lib/src/class_element_ex.dart index 52fc22665..c572fc4cb 100644 --- a/packages/realm_generator/lib/src/class_element_ex.dart +++ b/packages/realm_generator/lib/src/class_element_ex.dart @@ -56,7 +56,7 @@ extension ClassElementEx on ClassElement { return null; } - final modelName = this.name; + final modelName = this.displayName; // ensure a valid prefix and suffix is used. final prefix = session.prefix; diff --git a/packages/realm_generator/lib/src/dart_type_ex.dart b/packages/realm_generator/lib/src/dart_type_ex.dart index 5a0b5de6e..cd8e831d9 100644 --- a/packages/realm_generator/lib/src/dart_type_ex.dart +++ b/packages/realm_generator/lib/src/dart_type_ex.dart @@ -13,10 +13,10 @@ import 'session.dart'; import 'type_checkers.dart'; extension DartTypeEx on DartType { - bool isExactly() => TypeChecker.fromRuntime(T).isExactlyType(this); - bool isA() => TypeChecker.fromRuntime(T).isAssignableFromType(this); + bool isExactly() => TypeChecker.typeNamed(T).isExactlyType(this); + bool isA() => TypeChecker.typeNamed(T).isAssignableFromType(this); - bool get isRealmValue => const TypeChecker.fromRuntime(RealmValue).isAssignableFromType(this); + bool get isRealmValue => const TypeChecker.typeNamed(RealmValue).isAssignableFromType(this); bool get isRealmCollection => realmCollectionType != RealmCollectionType.none; bool get isRealmSet => realmCollectionType == RealmCollectionType.set; diff --git a/packages/realm_generator/lib/src/element.dart b/packages/realm_generator/lib/src/element.dart index 6ffd79f10..64a312430 100644 --- a/packages/realm_generator/lib/src/element.dart +++ b/packages/realm_generator/lib/src/element.dart @@ -18,8 +18,8 @@ import 'session.dart'; import 'type_checkers.dart'; import 'utils.dart'; -ElementDeclarationResult? getDeclarationFromElement(Element element) { - return session.resolvedLibrary.getElementDeclaration(element); +FragmentDeclarationResult? getDeclarationFromElement(Element element) { + return session.resolvedLibrary.getFragmentDeclaration(element.firstFragment); } extension on FileSpan { diff --git a/packages/realm_generator/lib/src/error.dart b/packages/realm_generator/lib/src/error.dart index e290ac1a7..f5c399d20 100644 --- a/packages/realm_generator/lib/src/error.dart +++ b/packages/realm_generator/lib/src/error.dart @@ -29,7 +29,7 @@ class RealmInvalidGenerationSourceError extends InvalidGenerationSourceError { color = color ?? session.color, super(element: element) { if (element is FieldElement || element is ConstructorElement) { - final classElement = element.enclosingElement3!; + final classElement = element.enclosingElement!; this.secondarySpans.addAll({ classElement.span!: "in realm model for '${session.mapping.entries.where((e) => e.value == classElement).singleOrNull?.key}'", }); diff --git a/packages/realm_generator/lib/src/field_element_ex.dart b/packages/realm_generator/lib/src/field_element_ex.dart index 34484d50c..f9e11bfff 100644 --- a/packages/realm_generator/lib/src/field_element_ex.dart +++ b/packages/realm_generator/lib/src/field_element_ex.dart @@ -24,7 +24,7 @@ import 'type_checkers.dart'; extension FieldElementEx on FieldElement { static const realmSetUnsupportedRealmTypes = [RealmPropertyType.linkingObjects]; - ClassElement get enclosingClassElement => enclosingElement3 as ClassElement; + ClassElement get enclosingClassElement => enclosingElement as ClassElement; FieldDeclaration get declarationAstNode => getDeclarationFromElement(this)!.node.parent!.parent as FieldDeclaration; @@ -38,7 +38,7 @@ extension FieldElementEx on FieldElement { TypeAnnotation? get typeAnnotation => declarationAstNode.fields.type; - Expression? get initializerExpression => declarationAstNode.fields.variables.singleWhere((v) => v.name.toString() == name).initializer; + Expression? get initializerExpression => declarationAstNode.fields.variables.singleWhere((v) => v.name.toString() == displayName).initializer; FileSpan? typeSpan(SourceFile file) => ExpandedContextSpan( ExpandedContextSpan( @@ -163,7 +163,7 @@ extension FieldElementEx on FieldElement { String? linkOriginProperty; // Validate field type - final modelSpan = enclosingElement3.span!; + final modelSpan = enclosingElement.span!; final file = modelSpan.file; final realmType = type.realmType; if (realmType == null) { @@ -185,7 +185,7 @@ extension FieldElementEx on FieldElement { primarySpan: typeSpan(file), primaryLabel: '$modelTypeName is not a realm model type', secondarySpans: { - modelSpan: "in realm model '${enclosingElement3.displayName}'", + modelSpan: "in realm model '${enclosingElement.displayName}'", // may go both above and below, or stem from another file if (notARealmTypeSpan != null) notARealmTypeSpan: '' }, @@ -281,7 +281,7 @@ extension FieldElementEx on FieldElement { final sourceFieldName = backlink.value.getField('fieldName')?.toSymbolValue(); final sourceType = (type as ParameterizedType).typeArguments.first; - final sourceField = (sourceType.element as ClassElement?)?.fields.where((f) => f.name == sourceFieldName).singleOrNull; + final sourceField = (sourceType.element as ClassElement?)?.fields.where((f) => f.displayName == sourceFieldName).singleOrNull; if (sourceField == null) { throw RealmInvalidGenerationSourceError( @@ -293,7 +293,7 @@ extension FieldElementEx on FieldElement { ); } - final thisType = (enclosingElement3 as ClassElement).thisType; + final thisType = (enclosingElement as ClassElement).thisType; final linkType = thisType.asNullable; final listOf = session.typeProvider.listType(thisType); if (sourceField.type != linkType && sourceField.type != listOf) { @@ -307,7 +307,7 @@ extension FieldElementEx on FieldElement { } // everything is kosher, just need to account for @MapTo! - linkOriginProperty = sourceField.remappedRealmName ?? sourceField.name; + linkOriginProperty = sourceField.remappedRealmName ?? sourceField.displayName; } // Validate object references @@ -398,7 +398,7 @@ extension FieldElementEx on FieldElement { ParenthesizedExpression i => _isValidFieldInitializer(i.expression), PrefixExpression e => _isValidFieldInitializer(e.operand), BinaryExpression b => _isValidFieldInitializer(b.leftOperand) && _isValidFieldInitializer(b.rightOperand), - Identifier i => (i.staticElement as PropertyAccessorElement?)?.variable2?.isConst ?? false, + Identifier i => (i.element as PropertyAccessorElement?)?.variable.isConst ?? false, _ => false, }; } diff --git a/packages/realm_generator/lib/src/realm_field_info.dart b/packages/realm_generator/lib/src/realm_field_info.dart index 2e99e4aa7..4685357d5 100644 --- a/packages/realm_generator/lib/src/realm_field_info.dart +++ b/packages/realm_generator/lib/src/realm_field_info.dart @@ -42,7 +42,7 @@ class RealmFieldInfo { bool get isDartCoreSet => type.isDartCoreSet; bool get isDartCoreMap => type.isDartCoreMap; - String get name => fieldElement.name; + String get name => fieldElement.displayName; String get realmName => mapTo ?? name; String get basicMappedTypeName => type.basicMappedName; diff --git a/packages/realm_generator/lib/src/type_checkers.dart b/packages/realm_generator/lib/src/type_checkers.dart index 600513b22..41bd7a356 100644 --- a/packages/realm_generator/lib/src/type_checkers.dart +++ b/packages/realm_generator/lib/src/type_checkers.dart @@ -4,15 +4,15 @@ import 'package:realm_common/realm_common.dart'; import 'package:source_gen/source_gen.dart'; -const ignoredChecker = TypeChecker.fromRuntime(Ignored); +const ignoredChecker = TypeChecker.typeNamed(Ignored); -const indexedChecker = TypeChecker.fromRuntime(Indexed); +const indexedChecker = TypeChecker.typeNamed(Indexed); -const mapToChecker = TypeChecker.fromRuntime(MapTo); +const mapToChecker = TypeChecker.typeNamed(MapTo); -const primaryKeyChecker = TypeChecker.fromRuntime(PrimaryKey); +const primaryKeyChecker = TypeChecker.typeNamed(PrimaryKey); -const backlinkChecker = TypeChecker.fromRuntime(Backlink); +const backlinkChecker = TypeChecker.typeNamed(Backlink); const realmAnnotationChecker = TypeChecker.any([ ignoredChecker, @@ -21,4 +21,4 @@ const realmAnnotationChecker = TypeChecker.any([ primaryKeyChecker, ]); -const realmModelChecker = TypeChecker.fromRuntime(RealmModel); +const realmModelChecker = TypeChecker.typeNamed(RealmModel); diff --git a/packages/realm_generator/pubspec.yaml b/packages/realm_generator/pubspec.yaml index 50e56ca70..3faf9a9a6 100644 --- a/packages/realm_generator/pubspec.yaml +++ b/packages/realm_generator/pubspec.yaml @@ -10,25 +10,24 @@ repository: https://github.com/realm/realm-dart issue_tracker: https://github.com/realm/realm-dart/issues environment: - sdk: ^3.6.0 + sdk: ^3.7.0 dependencies: - analyzer: ^7.3.0 - build_resolvers: ^2.4.3 - build: '2.4.2' - dart_style: ^3.0.1 + analyzer: ^8.0.0 + build: 4.0.2 + dart_style: ^3.1.1 realm_common: ^20.2.0 - source_gen: ^2.0.0 + source_gen: ^4.0.0 source_span: ^1.8.0 collection: ^1.19.0 dev_dependencies: - build_runner: ^2.4.14 - build_test: ^2.2.2 - lints: ^5.1.1 + build_runner: ^2.6.0 + build_test: ^3.0.0 + lints: ^6.0.0 logging: ^1.2.0 meta: ^1.15.0 path: ^1.9.0 term_glyph: ^1.2.0 - test: ^1.25.9 + test: ^1.26.3 pub_semver: ^2.2.0 diff --git a/packages/realm_generator/test/common.dart b/packages/realm_generator/test/common.dart index 6f786dae3..3530533b1 100644 --- a/packages/realm_generator/test/common.dart +++ b/packages/realm_generator/test/common.dart @@ -1,6 +1,5 @@ import 'package:analyzer/dart/analysis/results.dart'; import 'package:analyzer/diagnostic/diagnostic.dart'; -import 'package:analyzer/error/error.dart'; import 'package:build_test/build_test.dart'; import 'package:test/test.dart'; @@ -16,7 +15,7 @@ $src }, (r) => r.findLibraryByName('main')); final errorResult = await main!.session.getErrors('/realm/test/integration/main.dart') as ErrorsResult; - final criticalErrors = errorResult.errors.where((element) => element.severity == Severity.error).toList(); + final criticalErrors = errorResult.diagnostics.where((element) => element.severity == Severity.error).toList(); if (criticalErrors.isNotEmpty) { throw CompileError(criticalErrors); @@ -25,7 +24,7 @@ $src class CompileError extends Error { CompileError(this.errors); - final List errors; + final List errors; @override String toString() { diff --git a/packages/realm_generator/test/test_util.dart b/packages/realm_generator/test/test_util.dart index b81790774..4f4d57775 100644 --- a/packages/realm_generator/test/test_util.dart +++ b/packages/realm_generator/test/test_util.dart @@ -1,3 +1,4 @@ +import 'dart:convert'; import 'dart:io'; import 'package:build_test/build_test.dart'; @@ -43,17 +44,19 @@ void testCompile( test(description, () async { generate() async { - final writer = InMemoryAssetWriter(); - await testBuilder( + final readerWriter = TestReaderWriter(); + await readerWriter.testing.loadIsolateSources(); + final result = await testBuilder( generateRealmObjects(), {'pkg|$assetName': '$source'}, - writer: writer, - reader: await PackageAssetReader.currentIsolate(), + readerWriter: readerWriter, onLog: onLog, ); - return _formatter.format( - String.fromCharCodes(writer.assets.entries.single.value), - ); + final rw = result.readerWriter; + final outId = rw.testing.assetsWritten.single; + final bytes = await rw.readAsBytes(outId); + + return _formatter.format(utf8.decode(bytes)); } expect(generate(), matcher); @@ -90,8 +93,9 @@ void testCompileMany( test(description, () { generate() async { - final writer = InMemoryAssetWriter(); - await testBuilder( + final readerWriter = TestReaderWriter(); + await readerWriter.testing.loadIsolateSources(); + final result = await testBuilder( generateRealmObjects(), Map.fromEntries( inputs.map((x) { @@ -99,12 +103,13 @@ void testCompileMany( return MapEntry(id, source); }), ), - writer: writer, - reader: await PackageAssetReader.currentIsolate(), - ); - return writer.assets.values.map( - (charCodes) => String.fromCharCodes(charCodes), + readerWriter: readerWriter, ); + final rw = result.readerWriter; + final outId = rw.testing.assetsWritten.single; + final bytes = await rw.readAsBytes(outId); + + return _formatter.format(utf8.decode(bytes)); } expect(generate(), matcher);