Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions benchmarks/storage/pubspec.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ name: hive_storage_benchmark
publish_to: none

environment:
sdk: ^3.9.0
sdk: ^3.11.0

dependencies:
json_annotation: ^4.9.0
Expand All @@ -13,7 +13,7 @@ dependencies:
meta: ^1.14.0

dev_dependencies:
rexios_lints: ^17.0.2
rexios_lints: ^18.1.0
# build_runner: ^2.5.4 # TODO: Fix this
json_serializable: ^6.8.0
hive_ce_generator: any
Expand All @@ -25,4 +25,4 @@ dependency_overrides:
path: ../../hive_generator
build: ^4.0.0
source_gen: ^4.0.0
analyzer: ^8.0.0
analyzer: ^14.0.0
1 change: 1 addition & 0 deletions hive/analysis_options.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -6,5 +6,6 @@ linter:

plugins:
rexios_lints:
version: ^17.0.2
diagnostics:
not_null_assertion: false
4 changes: 2 additions & 2 deletions hive/example/pubspec.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -5,12 +5,12 @@ dependencies:
meta: ^1.17.0

dev_dependencies:
rexios_lints: ^17.0.2
rexios_lints: ^18.1.0
hive_ce_generator: any
build_runner: ^2.5.4

environment:
sdk: ^3.9.0
sdk: ^3.11.0

dependency_overrides:
hive_ce:
Expand Down
6 changes: 4 additions & 2 deletions hive_flutter/example/pubspec.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ publish_to: none
version: 1.0.0+1

environment:
sdk: ^3.9.0
sdk: ^3.11.0

dependencies:
flutter:
Expand All @@ -12,14 +12,16 @@ dependencies:
path: ../../hive_flutter

dev_dependencies:
rexios_lints: ^17.0.2
rexios_lints: ^18.1.0
build_runner: ^2.5.4
hive_ce_generator:
path: ../../hive_generator

dependency_overrides:
hive_ce:
path: ../../hive
# Flutter stable currently pins meta 1.18.0; analyzer 14 requires ^1.18.3.
meta: ^1.18.3

flutter:
uses-material-design: true
6 changes: 6 additions & 0 deletions hive_generator/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,9 @@
## 1.11.3

- Upgrades `analyzer` to `14.0.0`
- Requires Dart SDK `^3.11.0`
- Removes `source_helper` dependency

## 1.11.2

- Upgrades `analyzer` to `12.0.0`
Expand Down
1 change: 1 addition & 0 deletions hive_generator/analysis_options.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -6,5 +6,6 @@ linter:

plugins:
rexios_lints:
version: ^18.1.0
diagnostics:
not_null_assertion: false
4 changes: 2 additions & 2 deletions hive_generator/example/pubspec.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,12 @@ dependencies:
hive_ce: any
meta: ^1.14.0
dev_dependencies:
rexios_lints: ^17.0.2
rexios_lints: ^18.1.0
build_runner: ^2.5.4
hive_ce_generator:
path: ..
environment:
sdk: ^3.9.0
sdk: ^3.11.0
dependency_overrides:
hive_ce:
path: ../../hive
Expand Down
33 changes: 20 additions & 13 deletions hive_generator/lib/src/adapter_builder/class_adapter_builder.dart
Original file line number Diff line number Diff line change
Expand Up @@ -17,27 +17,34 @@ import 'package:hive_ce_generator/src/helper/type_helper.dart';
/// TODO: Document this!
class ClassAdapterBuilder extends AdapterBuilder {
/// TODO: Document this!
const ClassAdapterBuilder(
super.cls,
super.getters,
super.setters,
);
const ClassAdapterBuilder(super.cls, super.getters, super.setters);

/// [TypeChecker] for [HiveList].
final hiveListChecker =
const TypeChecker.typeNamed(HiveList, inPackage: 'hive_ce');
final hiveListChecker = const TypeChecker.typeNamed(
HiveList,
inPackage: 'hive_ce',
);

/// [TypeChecker] for [Map].
final mapChecker =
const TypeChecker.typeNamed(Map, inPackage: 'core', inSdk: true);
final mapChecker = const TypeChecker.typeNamed(
Map,
inPackage: 'core',
inSdk: true,
);

/// [TypeChecker] for [Set].
final setChecker =
const TypeChecker.typeNamed(Set, inPackage: 'core', inSdk: true);
final setChecker = const TypeChecker.typeNamed(
Set,
inPackage: 'core',
inSdk: true,
);

/// [TypeChecker] for [Iterable].
final iterableChecker =
const TypeChecker.typeNamed(Iterable, inPackage: 'core', inSdk: true);
final iterableChecker = const TypeChecker.typeNamed(
Iterable,
inPackage: 'core',
inSdk: true,
);

/// [TypeChecker] for [Uint8List].
final uint8ListChecker = const TypeChecker.typeNamed(
Expand Down
17 changes: 10 additions & 7 deletions hive_generator/lib/src/builder/registrar_builder.dart
Original file line number Diff line number Diff line change
Expand Up @@ -21,17 +21,20 @@ class RegistrarBuilder implements Builder {
final uris = <String>[];
final adapters = <String>[];
Uri? registrarUri;
await for (final input
in buildStep.findAssets(Glob('**/*.hive_registrar.info'))) {
await for (final input in buildStep.findAssets(
Glob('**/*.hive_registrar.info'),
)) {
final content = await buildStep.readAsString(input);
final data = RegistrarIntermediate.fromJson(jsonDecode(content));
final uri = data.uri;
uris.add(uri.toString());
adapters.addAll(data.adapters);
if (data.registrarLocation) {
if (registrarUri != null) {
final sortedUris =
[registrarUri, uri].map((e) => e.toString()).toList()..sort();
final sortedUris = [
registrarUri,
uri,
].map((e) => e.toString()).toList()..sort();
final urisString = sortedUris.map((e) => '- $e').join('\n');
throw HiveError(
'GenerateAdapters annotation found in more than one file:\n$urisString',
Expand All @@ -52,9 +55,9 @@ class RegistrarBuilder implements Builder {
if (buildConfigFile.existsSync()) {
final buildConfigContent = buildConfigFile.readAsStringSync();
final buildConfig = loadYaml(buildConfigContent);
final configIgnores = buildConfig?['targets']?[r'$default']?['builders']
?['source_gen|combining_builder']?['options']
?['ignore_for_file'] as YamlList? ??
final configIgnores =
buildConfig?['targets']?[r'$default']?['builders']?['source_gen|combining_builder']?['options']?['ignore_for_file']
as YamlList? ??
[];
ignores.addAll(configIgnores.cast<String>());
}
Expand Down
30 changes: 18 additions & 12 deletions hive_generator/lib/src/builder/registrar_intermediate_builder.dart
Original file line number Diff line number Diff line change
Expand Up @@ -22,8 +22,9 @@ class RegistrarIntermediateBuilder implements Builder {
final library = await buildStep.inputLibrary;
final adapters = <String>[];

final hiveTypeElements = LibraryReader(library)
.annotatedWith(TypeChecker.typeNamed(HiveType, inPackage: 'hive_ce'));
final hiveTypeElements = LibraryReader(
library,
).annotatedWith(TypeChecker.typeNamed(HiveType, inPackage: 'hive_ce'));
for (final annotatedElement in hiveTypeElements) {
final annotation = annotatedElement.annotation;
final element = annotatedElement.element;
Expand All @@ -36,14 +37,17 @@ class RegistrarIntermediateBuilder implements Builder {
// If the registrar should be placed next to this file
final bool registrarLocation;

final generateAdaptersChecker =
TypeChecker.typeNamed(GenerateAdapters, inPackage: 'hive_ce');
final generateAdaptersChecker = TypeChecker.typeNamed(
GenerateAdapters,
inPackage: 'hive_ce',
);
final libraryReader = LibraryReader(library);

final generateAdaptersElements =
libraryReader.annotatedWith(generateAdaptersChecker);
final generateAdaptersDirectives =
libraryReader.libraryDirectivesAnnotatedWith(generateAdaptersChecker);
final generateAdaptersElements = libraryReader.annotatedWith(
generateAdaptersChecker,
);
final generateAdaptersDirectives = libraryReader
.libraryDirectivesAnnotatedWith(generateAdaptersChecker);

final generateAdaptersAnnotationReaders = [
...generateAdaptersElements.map((e) => e.annotation),
Expand All @@ -52,10 +56,12 @@ class RegistrarIntermediateBuilder implements Builder {

// Read multiple annotations if they exist
final generateAdaptersAnnotationObjects = [
...generateAdaptersElements
.expand((e) => generateAdaptersChecker.annotationsOf(e.element)),
...generateAdaptersDirectives
.expand((e) => generateAdaptersChecker.annotationsOf(e.directive)),
...generateAdaptersElements.expand(
(e) => generateAdaptersChecker.annotationsOf(e.element),
),
...generateAdaptersDirectives.expand(
(e) => generateAdaptersChecker.annotationsOf(e.directive),
),
];

if (generateAdaptersAnnotationObjects.length > 1) {
Expand Down
79 changes: 40 additions & 39 deletions hive_generator/lib/src/builder/schema_migrator_builder.dart
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@ import 'dart:async';
import 'package:hive_ce_generator/src/helper/helper.dart';
import 'package:hive_ce_generator/src/model/hive_schema.dart';
import 'package:source_gen/source_gen.dart';
import 'package:source_helper/source_helper.dart';
import 'package:meta/meta.dart';

/// Generate a Hive schema from existing HiveType annotations
Expand All @@ -33,8 +32,7 @@ class SchemaMigratorBuilder implements Builder {
static String hasNoPublicGetter({
required String className,
required String fieldName,
}) =>
'$className.$fieldName does not have a public getter';
}) => '$className.$fieldName does not have a public getter';

@override
final buildExtensions = const {
Expand All @@ -47,8 +45,9 @@ class SchemaMigratorBuilder implements Builder {
await for (final input in buildStep.findAssets(Glob('**/*.dart'))) {
if (!await buildStep.resolver.isLibrary(input)) continue;
final library = await buildStep.resolver.libraryFor(input);
final hiveTypeElements = LibraryReader(library)
.annotatedWith(TypeChecker.typeNamed(HiveType, inPackage: 'hive_ce'));
final hiveTypeElements = LibraryReader(
library,
).annotatedWith(TypeChecker.typeNamed(HiveType, inPackage: 'hive_ce'));
hiveTypes.addAll(hiveTypeElements);
}

Expand Down Expand Up @@ -85,8 +84,9 @@ class SchemaMigratorBuilder implements Builder {
final accessors = [
...cls.getters,
...cls.setters,
...cls.allSupertypes
.expand((it) => [...it.element.getters, ...it.element.setters]),
...cls.allSupertypes.expand(
(it) => [...it.element.getters, ...it.element.setters],
),
];
final info = _SchemaInfo(
uri: uri,
Expand Down Expand Up @@ -116,19 +116,20 @@ class SchemaMigratorBuilder implements Builder {

final firstPassFields = info.schema.fields.keys.toSet();
final secondPassFields = secondPassInfo.schema.fields.keys.toSet();
final accessorsWithoutAnnotations =
secondPassFields.difference(firstPassFields);
final accessorsWithoutAnnotations = secondPassFields.difference(
firstPassFields,
);

schemaInfos
.add(info.copyWith(ignoredFields: accessorsWithoutAnnotations));
schemaInfos.add(
info.copyWith(ignoredFields: accessorsWithoutAnnotations),
);
}
schemaInfos.sort((a, b) => a.schema.typeId.compareTo(b.schema.typeId));
final nextTypeId =
schemaInfos.isEmpty ? 0 : schemaInfos.last.schema.typeId + 1;
final nextTypeId = schemaInfos.isEmpty
? 0
: schemaInfos.last.schema.typeId + 1;

final types = {
for (final type in schemaInfos) type.className: type.schema,
};
final types = {for (final type in schemaInfos) type.className: type.schema};

final imports = schemaInfos
.map((e) => e.uri)
Expand Down Expand Up @@ -171,14 +172,14 @@ class _SchemaInfo {
required ConstructorElement constructor,
required List<PropertyAccessorElement> accessors,
required HiveSchemaType schema,
}) : ignoredFields = {},
schema = _sanitizeSchema(
className: className,
isEnum: isEnum,
schema: schema,
constructor: constructor,
accessors: accessors,
);
}) : ignoredFields = {},
schema = _sanitizeSchema(
className: className,
isEnum: isEnum,
schema: schema,
constructor: constructor,
accessors: accessors,
);

const _SchemaInfo._({
required this.uri,
Expand All @@ -187,15 +188,12 @@ class _SchemaInfo {
required this.schema,
});

_SchemaInfo copyWith({
Set<String>? ignoredFields,
}) =>
_SchemaInfo._(
uri: uri,
className: className,
ignoredFields: ignoredFields ?? this.ignoredFields,
schema: schema,
);
_SchemaInfo copyWith({Set<String>? ignoredFields}) => _SchemaInfo._(
uri: uri,
className: className,
ignoredFields: ignoredFields ?? this.ignoredFields,
schema: schema,
);

static HiveSchemaType _sanitizeSchema({
required String className,
Expand All @@ -210,13 +208,16 @@ class _SchemaInfo {
final sanitizedFields = <String, HiveSchemaField>{};
for (final MapEntry(key: fieldName, value: schema)
in schema.fields.entries) {
final publicFieldName =
fieldName.startsWith('_') ? fieldName.substring(1) : fieldName;
final publicFieldName = fieldName.startsWith('_')
? fieldName.substring(1)
: fieldName;

final isInConstructor = constructor.formalParameters
.any((e) => e.displayName == publicFieldName);
final publicAccessors =
accessors.where((e) => e.displayName == publicFieldName).toList();
final isInConstructor = constructor.formalParameters.any(
(e) => e.displayName == publicFieldName,
);
final publicAccessors = accessors
.where((e) => e.displayName == publicFieldName)
.toList();
final hasPublicSetter = publicAccessors.any((e) => e is SetterElement);
final hasPublicGetter = publicAccessors.any((e) => e is GetterElement);

Expand Down
Loading
Loading