From e9f93c2b04af46023d97f7375122b413987a1850 Mon Sep 17 00:00:00 2001 From: "myeongho.ham" Date: Tue, 4 Oct 2022 19:00:57 +0900 Subject: [PATCH 1/4] fix: Apply analyzer 5.0.0 or higher --- hive_generator/lib/src/helper.dart | 6 +++--- hive_generator/lib/src/type_adapter_generator.dart | 4 ++-- hive_generator/lib/src/type_helper.dart | 2 +- hive_generator/pubspec.yaml | 2 +- 4 files changed, 7 insertions(+), 7 deletions(-) diff --git a/hive_generator/lib/src/helper.dart b/hive_generator/lib/src/helper.dart index 0b26021e6..68d245192 100644 --- a/hive_generator/lib/src/helper.dart +++ b/hive_generator/lib/src/helper.dart @@ -32,10 +32,10 @@ bool isLibraryNNBD(Element element) { } } -Iterable getTypeAndAllSupertypes(ClassElement cls) { - var types = {}; +Iterable getTypeAndAllSupertypes(ClassElement cls) { + var types = {}; types.add(cls); - types.addAll(cls.allSupertypes.map((it) => it.element)); + types.addAll(cls.allSupertypes.map((it) => it.element2)); return types; } diff --git a/hive_generator/lib/src/type_adapter_generator.dart b/hive_generator/lib/src/type_adapter_generator.dart index 7f00d4a90..a8f5c600a 100644 --- a/hive_generator/lib/src/type_adapter_generator.dart +++ b/hive_generator/lib/src/type_adapter_generator.dart @@ -36,7 +36,7 @@ class TypeAdapterGenerator extends GeneratorForAnnotation { var typeId = getTypeId(annotation); var adapterName = getAdapterName(cls.name, annotation); - var builder = cls.isEnum + var builder = cls.isDartCoreEnum ? EnumBuilder(cls, getters) : ClassBuilder(cls, getters, setters); @@ -78,7 +78,7 @@ class TypeAdapterGenerator extends GeneratorForAnnotation { Set getAllAccessorNames(ClassElement cls) { var accessorNames = {}; - var supertypes = cls.allSupertypes.map((it) => it.element); + var supertypes = cls.allSupertypes.map((it) => it.element2); for (var type in [cls, ...supertypes]) { for (var accessor in type.accessors) { if (accessor.isSetter) { diff --git a/hive_generator/lib/src/type_helper.dart b/hive_generator/lib/src/type_helper.dart index 3e29a26f6..ba4cf1112 100644 --- a/hive_generator/lib/src/type_helper.dart +++ b/hive_generator/lib/src/type_helper.dart @@ -52,7 +52,7 @@ String literalToString(DartObject object, List typeInformation) { } else if (object.type is FunctionType) { badType = 'Function'; } else if (!reader.isLiteral) { - badType = object.type!.element!.name; + badType = object.type!.element2!.name; } if (badType != null) { diff --git a/hive_generator/pubspec.yaml b/hive_generator/pubspec.yaml index d9802becc..c90e828de 100644 --- a/hive_generator/pubspec.yaml +++ b/hive_generator/pubspec.yaml @@ -11,7 +11,7 @@ dependencies: build: ^2.0.0 source_gen: ^1.0.0 hive: ^2.0.4 - analyzer: ">=1.0.0 <5.0.0" + analyzer: ">=5.0.0" source_helper: ^1.1.0 dev_dependencies: From f687490ddea20ddf8347e8dac3b1d83544bdf44b Mon Sep 17 00:00:00 2001 From: "myeongho.ham" Date: Tue, 11 Oct 2022 19:55:12 +0900 Subject: [PATCH 2/4] fix: Change `ClassElement` to `InterfaceElement` --- .github/workflows/test.yml | 6 ++-- hive_generator/lib/src/builder.dart | 5 +-- hive_generator/lib/src/class_builder.dart | 13 +++---- hive_generator/lib/src/enum_builder.dart | 15 ++++---- hive_generator/lib/src/helper.dart | 7 ---- .../lib/src/type_adapter_generator.dart | 36 +++++++++---------- 6 files changed, 39 insertions(+), 43 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 8f53f0b06..c97be4f9d 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -49,17 +49,17 @@ jobs: runs-on: ubuntu-latest strategy: matrix: - dart-channel: ["2.12.0", "2.13.0"] + dart-channel: [dev, beta, stable] steps: - uses: actions/checkout@v1 - uses: dart-lang/setup-dart@v1 with: sdk: ${{ matrix.dart-channel }} - name: Install dependencies - run: pub get + run: dart pub get working-directory: hive_generator/example - name: Generate build_runner output - run: pub run build_runner build --delete-conflicting-outputs + run: dart run build_runner build --delete-conflicting-outputs working-directory: hive_generator/example check-score: diff --git a/hive_generator/lib/src/builder.dart b/hive_generator/lib/src/builder.dart index c523cb389..9066977b6 100644 --- a/hive_generator/lib/src/builder.dart +++ b/hive_generator/lib/src/builder.dart @@ -12,11 +12,12 @@ class AdapterField { } abstract class Builder { - final ClassElement cls; + final InterfaceElement interface; final List getters; final List setters; - Builder(this.cls, this.getters, [this.setters = const []]); + Builder(this.interface, this.getters, + [this.setters = const []]); String buildRead(); diff --git a/hive_generator/lib/src/class_builder.dart b/hive_generator/lib/src/class_builder.dart index 8b9ce0202..2975710c7 100644 --- a/hive_generator/lib/src/class_builder.dart +++ b/hive_generator/lib/src/class_builder.dart @@ -13,10 +13,10 @@ import 'type_helper.dart'; class ClassBuilder extends Builder { ClassBuilder( - ClassElement cls, + InterfaceElement interface, List getters, List setters, - ) : super(cls, getters, setters); + ) : super(interface, getters, setters); var hiveListChecker = const TypeChecker.fromRuntime(HiveList); var listChecker = const TypeChecker.fromRuntime(List); @@ -27,7 +27,8 @@ class ClassBuilder extends Builder { @override String buildRead() { - var constr = cls.constructors.firstOrNullWhere((it) => it.name.isEmpty); + var constr = + interface.constructors.firstOrNullWhere((it) => it.name.isEmpty); check(constr != null, 'Provide an unnamed constructor.'); // The remaining fields to initialize. @@ -35,7 +36,7 @@ class ClassBuilder extends Builder { // Empty classes if (constr!.parameters.isEmpty && fields.isEmpty) { - return 'return ${cls.name}();'; + return 'return ${interface.name}();'; } var code = StringBuffer(); @@ -45,7 +46,7 @@ class ClassBuilder extends Builder { for (int i = 0; i < numOfFields; i++) reader.readByte(): reader.read(), }; - return ${cls.name}( + return ${interface.name}( '''); for (var param in constr.parameters) { @@ -128,7 +129,7 @@ class ClassBuilder extends Builder { } // The suffix is not needed with nnbd on $cast becauuse it short circuits, // otherwise it is needed. - var castWithSuffix = isLibraryNNBD(cls) ? '$cast' : '$suffix$cast'; + var castWithSuffix = isLibraryNNBD(interface) ? '$cast' : '$suffix$cast'; return '$suffix.map((dynamic e)=> ${_cast(arg, 'e')})$castWithSuffix'; } else { return '$suffix.cast<${_displayString(arg)}>()'; diff --git a/hive_generator/lib/src/enum_builder.dart b/hive_generator/lib/src/enum_builder.dart index 8dee4f3c2..c45bb2f07 100644 --- a/hive_generator/lib/src/enum_builder.dart +++ b/hive_generator/lib/src/enum_builder.dart @@ -3,12 +3,13 @@ import 'package:hive_generator/src/builder.dart'; import 'package:hive_generator/src/helper.dart'; class EnumBuilder extends Builder { - EnumBuilder(ClassElement cls, List getters) - : super(cls, getters); + EnumBuilder(InterfaceElement interface, List getters) + : super(interface, getters); @override String buildRead() { - check(getters.isNotEmpty, '${cls.name} does not have any enum value.'); + check( + getters.isNotEmpty, '${interface.name} does not have any enum value.'); var code = StringBuffer(); code.writeln('switch (reader.readByte()) {'); @@ -16,15 +17,15 @@ class EnumBuilder extends Builder { for (var field in getters) { code.writeln(''' case ${field.index}: - return ${cls.name}.${field.name};'''); + return ${interface.name}.${field.name};'''); } var defaultField = getters.firstWhere( (it) => it.defaultValue?.toBoolValue() == true, orElse: () => getters.first); - code.writeln(''' + code.writeln(''' default: - return ${cls.name}.${defaultField.name}; + return ${interface.name}.${defaultField.name}; }'''); return code.toString(); @@ -37,7 +38,7 @@ class EnumBuilder extends Builder { for (var field in getters) { code.writeln(''' - case ${cls.name}.${field.name}: + case ${interface.name}.${field.name}: writer.writeByte(${field.index}); break;'''); } diff --git a/hive_generator/lib/src/helper.dart b/hive_generator/lib/src/helper.dart index 68d245192..3fb569864 100644 --- a/hive_generator/lib/src/helper.dart +++ b/hive_generator/lib/src/helper.dart @@ -32,13 +32,6 @@ bool isLibraryNNBD(Element element) { } } -Iterable getTypeAndAllSupertypes(ClassElement cls) { - var types = {}; - types.add(cls); - types.addAll(cls.allSupertypes.map((it) => it.element2)); - return types; -} - void check(bool condition, Object error) { if (!condition) { // ignore: only_throw_errors diff --git a/hive_generator/lib/src/type_adapter_generator.dart b/hive_generator/lib/src/type_adapter_generator.dart index a8f5c600a..1b21f716e 100644 --- a/hive_generator/lib/src/type_adapter_generator.dart +++ b/hive_generator/lib/src/type_adapter_generator.dart @@ -23,9 +23,9 @@ class TypeAdapterGenerator extends GeneratorForAnnotation { @override Future generateForAnnotatedElement( Element element, ConstantReader annotation, BuildStep buildStep) async { - var cls = getClass(element); + var interface = getInterface(element); var library = await buildStep.inputLibrary; - var gettersAndSetters = getAccessors(cls, library); + var gettersAndSetters = getAccessors(interface, library); var getters = gettersAndSetters[0]; verifyFieldIndices(getters); @@ -35,23 +35,23 @@ class TypeAdapterGenerator extends GeneratorForAnnotation { var typeId = getTypeId(annotation); - var adapterName = getAdapterName(cls.name, annotation); - var builder = cls.isDartCoreEnum - ? EnumBuilder(cls, getters) - : ClassBuilder(cls, getters, setters); + var adapterName = getAdapterName(interface.name, annotation); + var builder = interface is EnumElement + ? EnumBuilder(interface, getters) + : ClassBuilder(interface, getters, setters); return ''' - class $adapterName extends TypeAdapter<${cls.name}> { + class $adapterName extends TypeAdapter<${interface.name}> { @override final int typeId = $typeId; @override - ${cls.name} read(BinaryReader reader) { + ${interface.name} read(BinaryReader reader) { ${builder.buildRead()} } @override - void write(BinaryWriter writer, ${cls.name} obj) { + void write(BinaryWriter writer, ${interface.name} obj) { ${builder.buildWrite()} } @@ -68,18 +68,18 @@ class TypeAdapterGenerator extends GeneratorForAnnotation { '''; } - ClassElement getClass(Element element) { + InterfaceElement getInterface(Element element) { check(element.kind == ElementKind.CLASS || element.kind == ElementKind.ENUM, 'Only classes or enums are allowed to be annotated with @HiveType.'); - return element as ClassElement; + return element as InterfaceElement; } - Set getAllAccessorNames(ClassElement cls) { + Set getAllAccessorNames(InterfaceElement interface) { var accessorNames = {}; - var supertypes = cls.allSupertypes.map((it) => it.element2); - for (var type in [cls, ...supertypes]) { + var supertypes = interface.allSupertypes.map((it) => it.element2); + for (var type in [interface, ...supertypes]) { for (var accessor in type.accessors) { if (accessor.isSetter) { var name = accessor.name; @@ -94,13 +94,13 @@ class TypeAdapterGenerator extends GeneratorForAnnotation { } List> getAccessors( - ClassElement cls, LibraryElement library) { - var accessorNames = getAllAccessorNames(cls); + InterfaceElement interface, LibraryElement library) { + var accessorNames = getAllAccessorNames(interface); var getters = []; var setters = []; for (var name in accessorNames) { - var getter = cls.lookUpGetter(name, library); + var getter = interface.lookUpGetter(name, library); if (getter != null) { var getterAnn = getHiveFieldAnn(getter.variable) ?? getHiveFieldAnn(getter); @@ -115,7 +115,7 @@ class TypeAdapterGenerator extends GeneratorForAnnotation { } } - var setter = cls.lookUpSetter('$name=', library); + var setter = interface.lookUpSetter('$name=', library); if (setter != null) { var setterAnn = getHiveFieldAnn(setter.variable) ?? getHiveFieldAnn(setter); From ab4676cd153f079bee4f5446fc08b03a5536e855 Mon Sep 17 00:00:00 2001 From: jukqaz Date: Thu, 13 Oct 2022 16:56:19 +0900 Subject: [PATCH 3/4] Update .github/workflows/test.yml Co-authored-by: Misir --- .github/workflows/test.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index c97be4f9d..0bff23552 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -49,7 +49,7 @@ jobs: runs-on: ubuntu-latest strategy: matrix: - dart-channel: [dev, beta, stable] + dart-channel: ["2.18.2", "2.19.0"] steps: - uses: actions/checkout@v1 - uses: dart-lang/setup-dart@v1 From 8a961705b238a859c49053c8af260bae9344d3e9 Mon Sep 17 00:00:00 2001 From: jukqaz Date: Thu, 13 Oct 2022 17:02:47 +0900 Subject: [PATCH 4/4] feat: Update hive_generator version (2.0.0) --- hive_generator/CHANGELOG.md | 3 +++ hive_generator/pubspec.yaml | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/hive_generator/CHANGELOG.md b/hive_generator/CHANGELOG.md index f0d4a6ad7..560b8632f 100644 --- a/hive_generator/CHANGELOG.md +++ b/hive_generator/CHANGELOG.md @@ -1,3 +1,6 @@ +## 2.0.0 +- Updated `analyzer` version constraints to `>=5.0.0` + ## 1.1.3 - Updated `analyzer` version constraints to `<5.0.0` diff --git a/hive_generator/pubspec.yaml b/hive_generator/pubspec.yaml index c90e828de..4b00f21dd 100644 --- a/hive_generator/pubspec.yaml +++ b/hive_generator/pubspec.yaml @@ -1,6 +1,6 @@ name: hive_generator description: Extension for Hive. Automatically generates TypeAdapters to store any class. -version: 1.1.3 +version: 2.0.0 homepage: https://github.com/hivedb/hive/tree/master/hive_generator documentation: https://docs.hivedb.dev/