Skip to content

Commit

Permalink
with nullability suffix
Browse files Browse the repository at this point in the history
  • Loading branch information
tshedor committed Aug 24, 2024
1 parent fc8e840 commit 95b4b1b
Show file tree
Hide file tree
Showing 6 changed files with 19 additions and 24 deletions.
10 changes: 5 additions & 5 deletions packages/brick_build/example/file_serdes_generator.dart
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import 'package:analyzer/dart/element/element.dart';
import 'package:brick_core/core.dart' show Model;
import 'package:brick_build/generators.dart';
import 'package:brick_core/core.dart' show Model;

import 'file_fields.dart';

/// This would be in a separate package
Expand All @@ -14,8 +14,8 @@ abstract class FileSerdesGenerator<_Model extends FileModel> extends SerdesGener
final String repositoryName;

FileSerdesGenerator(
ClassElement element,
FileFields fields, {
super.element,
super.fields, {
required this.repositoryName,
}) : super(element, fields);
});
}
11 changes: 4 additions & 7 deletions packages/brick_build/example/file_serialize.dart
Original file line number Diff line number Diff line change
@@ -1,15 +1,12 @@
import 'package:analyzer/dart/element/element.dart';

import 'file_fields.dart';
import 'file_serdes_generator.dart';

/// Generate serialized code for each field to write to a file
class FileSerialize<_Model extends FileModel> extends FileSerdesGenerator<_Model> {
FileSerialize(
ClassElement element,
FileFields fields, {
required String repositoryName,
}) : super(element, fields, repositoryName: repositoryName);
super.element,
super.fields, {
required super.repositoryName,
});

@override
final doesDeserialize = false;
Expand Down
2 changes: 1 addition & 1 deletion packages/brick_build/lib/src/utils/shared_checker.dart
Original file line number Diff line number Diff line change
Expand Up @@ -181,7 +181,7 @@ class SharedChecker<_SiblingModel extends Model> {
if (classElement.supertype?.typeArguments == null ||
classElement.supertype!.typeArguments.isEmpty) {
throw InvalidGenerationSourceError(
'Type argument for ${targetType.getDisplayString(withNullability: true)} is undefined.',
'Type argument for ${targetType.getDisplayString()}${targetType.nullabilitySuffix == NullabilitySuffix.question ? '?' : ''} is undefined.',
todo:
'Define the type on class ${targetType.element}, e.g. `extends ${classElement.supertype!.getDisplayString()}<int>`',
element: targetType.element,
Expand Down
5 changes: 3 additions & 2 deletions packages/brick_json_generators/lib/json_deserialize.dart
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import 'package:analyzer/dart/element/element.dart';
import 'package:analyzer/dart/element/nullability_suffix.dart';
import 'package:brick_build/generators.dart';
import 'package:brick_core/core.dart';
import 'package:brick_core/field_serializable.dart';
Expand Down Expand Up @@ -94,7 +95,7 @@ mixin JsonDeserialize<TModel extends Model, Annotation extends FieldSerializable
final nullableSuffix = checker.isNullable ? '?' : '';

return '''$fieldValue$nullableSuffix.map(
(d) => ${klass.displayName}.fromJson(d as ${parameterType.getDisplayString(withNullability: true)})
(d) => ${klass.displayName}.fromJson(d as ${parameterType.getDisplayString()}${parameterType.nullabilitySuffix == NullabilitySuffix.question ? '?' : ''})
)$castIterable$defaultValue''';
}

Expand Down Expand Up @@ -138,7 +139,7 @@ mixin JsonDeserialize<TModel extends Model, Annotation extends FieldSerializable
final parameterType = checker.fromJsonConstructor!.parameters.first.type;

final output =
'${klass.displayName}.fromJson($fieldValue as ${parameterType.getDisplayString(withNullability: true)})';
'${klass.displayName}.fromJson($fieldValue as ${parameterType.getDisplayString()}${parameterType.nullabilitySuffix == NullabilitySuffix.question ? '?' : ''})';
if (checker.isNullable) return '$fieldValue != null ? $output : null';
return output;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,6 @@ import 'package:brick_core/core.dart';
import 'package:brick_offline_first/src/models/offline_first_model.dart';
import 'package:brick_offline_first/src/offline_first_adapter.dart';
import 'package:brick_offline_first/src/offline_first_repository.dart';
import 'package:brick_sqlite/brick_sqlite.dart';
import 'package:brick_sqlite/db.dart';
import 'package:brick_sqlite/memory_cache_provider.dart';

import '__mocks__.dart';
Expand Down Expand Up @@ -91,13 +89,11 @@ abstract class OfflineFirstWithTestRepository
extends OfflineFirstRepository<OfflineFirstWithTestModel> {
OfflineFirstWithTestRepository({
required TestProvider testProvider,
required SqliteProvider sqliteProvider,
required super.sqliteProvider,
required MemoryCacheProvider cacheProvider,
required Set<Migration> migrations,
required super.migrations,
}) : super(
remoteProvider: testProvider,
sqliteProvider: sqliteProvider,
memoryCacheProvider: cacheProvider,
migrations: migrations,
);
}
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import 'package:analyzer/dart/element/element.dart';
import 'package:analyzer/dart/element/nullability_suffix.dart';
import 'package:brick_build/generators.dart' show SerdesGenerator, SharedChecker;
import 'package:brick_sqlite/brick_sqlite.dart';
import 'package:brick_sqlite/db.dart' show InsertTable, InsertForeignKey;
Expand Down Expand Up @@ -137,7 +138,7 @@ class SqliteDeserialize<_Model extends SqliteModel> extends SqliteSerdesGenerato
final discoveredByIndex =
'jsonDecode($fieldValue).map((d) => d as int > -1 ? ${SharedChecker.withoutNullability(argType)}.values[d] : null)';
final nullableSuffix = checker.isNullable ? '?' : '';
return '$discoveredByIndex$nullableSuffix.whereType<${argType.getDisplayString(withNullability: true)}>()$castIterable';
return '$discoveredByIndex$nullableSuffix.whereType<${argType.getDisplayString()}${argType.nullabilitySuffix == NullabilitySuffix.question ? '?' : ''}>()$castIterable';
}

// Iterable<bool>
Expand All @@ -152,7 +153,7 @@ class SqliteDeserialize<_Model extends SqliteModel> extends SqliteSerdesGenerato
final nullableSuffix = checker.isNullable ? " ?? '[]'" : '';

return '''jsonDecode($fieldValue$nullableSuffix).map(
(d) => ${klass.displayName}.fromJson(d as ${parameterType.getDisplayString(withNullability: true)})
(d) => ${klass.displayName}.fromJson(d as ${parameterType.getDisplayString()}${parameterType.nullabilitySuffix == NullabilitySuffix.question ? '?' : ''})
)$castIterable$defaultValue''';
}

Expand Down Expand Up @@ -210,7 +211,7 @@ class SqliteDeserialize<_Model extends SqliteModel> extends SqliteSerdesGenerato
} else if (checker.fromJsonConstructor != null) {
final klass = checker.targetType.element as ClassElement;
final parameterType = checker.fromJsonConstructor!.parameters.first.type;
return '${klass.displayName}.fromJson(jsonDecode($fieldValue as String) as ${parameterType.getDisplayString(withNullability: true)})';
return '${klass.displayName}.fromJson(jsonDecode($fieldValue as String) as ${parameterType.getDisplayString()}${parameterType.nullabilitySuffix == NullabilitySuffix.question ? '?' : ''})';
}

return null;
Expand Down

0 comments on commit 95b4b1b

Please sign in to comment.