Skip to content

Commit

Permalink
Added random constructors order support. Added tests for certain use …
Browse files Browse the repository at this point in the history
…cases. (#734)

* Added random constructors sorting. Added tests for certain use cases.

* Merge with upstream develop.
  • Loading branch information
dkaera authored Apr 20, 2023
1 parent bb74673 commit 6e507dc
Show file tree
Hide file tree
Showing 19 changed files with 183 additions and 82 deletions.
32 changes: 16 additions & 16 deletions example/pubspec.lock
Original file line number Diff line number Diff line change
Expand Up @@ -5,18 +5,18 @@ packages:
dependency: transitive
description:
name: _fe_analyzer_shared
sha256: "98d1d33ed129b372846e862de23a0fc365745f4d7b5e786ce667fcbbb7ac5c07"
sha256: a36ec4843dc30ea6bf652bf25e3448db6c5e8bcf4aa55f063a5d1dad216d8214
url: "https://pub.dev"
source: hosted
version: "55.0.0"
version: "58.0.0"
analyzer:
dependency: "direct dev"
description:
name: analyzer
sha256: "881348aed9b0b425882c97732629a6a31093c8ff20fc4b3b03fb9d3d50a3a126"
sha256: cc4242565347e98424ce9945c819c192ec0838cb9d1f6aa4a97cc96becbc5b27
url: "https://pub.dev"
source: hosted
version: "5.7.1"
version: "5.10.0"
args:
dependency: transitive
description:
Expand Down Expand Up @@ -165,10 +165,10 @@ packages:
dependency: transitive
description:
name: dart_style
sha256: "5be16bf1707658e4c03078d4a9b90208ded217fb02c163e207d334082412f2fb"
sha256: "6d691edde054969f0e0f26abb1b30834b5138b963793e56f69d3a9a4435e6352"
url: "https://pub.dev"
source: hosted
version: "2.2.5"
version: "2.3.0"
fake_async:
dependency: transitive
description:
Expand Down Expand Up @@ -425,34 +425,34 @@ packages:
dependency: transitive
description:
name: sqflite
sha256: "851d5040552cf911f4cabda08d003eca76b27da3ed0002978272e27c8fbf8ecc"
sha256: "500d6fec583d2c021f2d25a056d96654f910662c64f836cd2063167b8f1fa758"
url: "https://pub.dev"
source: hosted
version: "2.2.5"
version: "2.2.6"
sqflite_common:
dependency: transitive
description:
name: sqflite_common
sha256: bfd6973aaeeb93475bc0d875ac9aefddf7965ef22ce09790eb963992ffc5183f
sha256: "963dad8c4aa2f814ce7d2d5b1da2f36f31bd1a439d8f27e3dc189bb9d26bc684"
url: "https://pub.dev"
source: hosted
version: "2.4.2+2"
version: "2.4.3"
sqflite_common_ffi:
dependency: transitive
description:
name: sqflite_common_ffi
sha256: e435a9dcd0ca79ba6aea677468e6f7cb8859891294a8f34226685f2cf2002ea2
sha256: "0595da0b418deff5a93a20e15811e73ea1bbce89745eeebed87c37f8027b7a5d"
url: "https://pub.dev"
source: hosted
version: "2.2.1+1"
version: "2.2.3"
sqlite3:
dependency: transitive
description:
name: sqlite3
sha256: db6350456720a4088a364bbe02052d43056a5ffbd4816fe9d28310dcfbe0dc05
sha256: a3ba4b66a7ab170ce7aa3f5ac43c19ee8d6637afbe7b7c95c94112b4f4d91566
url: "https://pub.dev"
source: hosted
version: "1.9.1"
version: "1.11.0"
stack_trace:
dependency: transitive
description:
Expand Down Expand Up @@ -561,10 +561,10 @@ packages:
dependency: transitive
description:
name: web_socket_channel
sha256: ca49c0bc209c687b887f30527fb6a9d80040b072cc2990f34b9bec3e7663101b
sha256: d88238e5eac9a42bb43ca4e721edba3c08c6354d4a53063afaa568516217621b
url: "https://pub.dev"
source: hosted
version: "2.3.0"
version: "2.4.0"
yaml:
dependency: transitive
description:
Expand Down
36 changes: 18 additions & 18 deletions floor/pubspec.lock
Original file line number Diff line number Diff line change
Expand Up @@ -5,18 +5,18 @@ packages:
dependency: transitive
description:
name: _fe_analyzer_shared
sha256: "98d1d33ed129b372846e862de23a0fc365745f4d7b5e786ce667fcbbb7ac5c07"
sha256: a36ec4843dc30ea6bf652bf25e3448db6c5e8bcf4aa55f063a5d1dad216d8214
url: "https://pub.dev"
source: hosted
version: "55.0.0"
version: "58.0.0"
analyzer:
dependency: transitive
description:
name: analyzer
sha256: "881348aed9b0b425882c97732629a6a31093c8ff20fc4b3b03fb9d3d50a3a126"
sha256: cc4242565347e98424ce9945c819c192ec0838cb9d1f6aa4a97cc96becbc5b27
url: "https://pub.dev"
source: hosted
version: "5.7.1"
version: "5.10.0"
args:
dependency: transitive
description:
Expand Down Expand Up @@ -165,10 +165,10 @@ packages:
dependency: transitive
description:
name: dart_style
sha256: "5be16bf1707658e4c03078d4a9b90208ded217fb02c163e207d334082412f2fb"
sha256: "6d691edde054969f0e0f26abb1b30834b5138b963793e56f69d3a9a4435e6352"
url: "https://pub.dev"
source: hosted
version: "2.2.5"
version: "2.3.0"
fake_async:
dependency: transitive
description:
Expand Down Expand Up @@ -341,10 +341,10 @@ packages:
dependency: "direct dev"
description:
name: mockito
sha256: "2a8a17b82b1bde04d514e75d90d634a0ac23f6cb4991f6098009dd56836aeafe"
sha256: dd61809f04da1838a680926de50a9e87385c1de91c6579629c3d1723946e8059
url: "https://pub.dev"
source: hosted
version: "5.3.2"
version: "5.4.0"
package_config:
dependency: transitive
description:
Expand Down Expand Up @@ -426,34 +426,34 @@ packages:
dependency: "direct main"
description:
name: sqflite
sha256: "851d5040552cf911f4cabda08d003eca76b27da3ed0002978272e27c8fbf8ecc"
sha256: "500d6fec583d2c021f2d25a056d96654f910662c64f836cd2063167b8f1fa758"
url: "https://pub.dev"
source: hosted
version: "2.2.5"
version: "2.2.6"
sqflite_common:
dependency: transitive
description:
name: sqflite_common
sha256: bfd6973aaeeb93475bc0d875ac9aefddf7965ef22ce09790eb963992ffc5183f
sha256: "963dad8c4aa2f814ce7d2d5b1da2f36f31bd1a439d8f27e3dc189bb9d26bc684"
url: "https://pub.dev"
source: hosted
version: "2.4.2+2"
version: "2.4.3"
sqflite_common_ffi:
dependency: "direct main"
description:
name: sqflite_common_ffi
sha256: e435a9dcd0ca79ba6aea677468e6f7cb8859891294a8f34226685f2cf2002ea2
sha256: "0595da0b418deff5a93a20e15811e73ea1bbce89745eeebed87c37f8027b7a5d"
url: "https://pub.dev"
source: hosted
version: "2.2.1+1"
version: "2.2.3"
sqlite3:
dependency: transitive
description:
name: sqlite3
sha256: db6350456720a4088a364bbe02052d43056a5ffbd4816fe9d28310dcfbe0dc05
sha256: a3ba4b66a7ab170ce7aa3f5ac43c19ee8d6637afbe7b7c95c94112b4f4d91566
url: "https://pub.dev"
source: hosted
version: "1.9.1"
version: "1.11.0"
stack_trace:
dependency: transitive
description:
Expand Down Expand Up @@ -562,10 +562,10 @@ packages:
dependency: transitive
description:
name: web_socket_channel
sha256: ca49c0bc209c687b887f30527fb6a9d80040b072cc2990f34b9bec3e7663101b
sha256: d88238e5eac9a42bb43ca4e721edba3c08c6354d4a53063afaa568516217621b
url: "https://pub.dev"
source: hosted
version: "2.3.0"
version: "2.4.0"
yaml:
dependency: transitive
description:
Expand Down
4 changes: 2 additions & 2 deletions floor_annotation/pubspec.lock
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,9 @@ packages:
dependency: "direct main"
description:
name: meta
sha256: "12307e7f0605ce3da64cf0db90e5fcab0869f3ca03f76be6bb2991ce0a55e82b"
sha256: "3c74dbf8763d36539f114c799d8a2d87343b5067e9d796ca22b5eb8437090ee3"
url: "https://pub.dev"
source: hosted
version: "1.9.0"
version: "1.9.1"
sdks:
dart: ">=2.12.0 <3.0.0"
3 changes: 2 additions & 1 deletion floor_generator/lib/misc/type_utils.dart
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,8 @@ extension DartTypeChecker on DartType {
}

extension StreamTypeChecker on DartType {
bool get isStream => !isVoid && _streamTypeChecker.isExactlyType(this);
bool get isStream =>
!(this is VoidType) && _streamTypeChecker.isExactlyType(this);
}

extension FlattenUtil on DartType {
Expand Down
3 changes: 1 addition & 2 deletions floor_generator/lib/processor/deletion_method_processor.dart
Original file line number Diff line number Diff line change
Expand Up @@ -29,8 +29,7 @@ class DeletionMethodProcessor implements Processor<DeletionMethod> {

final flattenedReturnType = _getFlattenedReturnType(returnType);
_assertMethodReturnsNoList(flattenedReturnType);

final returnsVoid = flattenedReturnType.isVoid;
final returnsVoid = flattenedReturnType is VoidType;
final returnsInt = flattenedReturnType.isDartCoreInt;

if (!returnsVoid && !returnsInt) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,4 +14,13 @@ class QueryableProcessorError {
element: _classElement,
);
}

InvalidGenerationSourceError get missingUnnamedConstructor {
return InvalidGenerationSourceError(
'Entity constructor is not recognized.',
todo:
'Entity class must provide a public non-factory constructor for code generation.',
element: _classElement,
);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ class InsertionMethodProcessor implements Processor<InsertionMethod> {
final flattenedReturnType =
_getFlattenedReturnType(returnType, returnsList);

final returnsVoid = flattenedReturnType.isVoid;
final returnsVoid = flattenedReturnType is VoidType;
final returnsInt = flattenedReturnType.isDartCoreInt;
final returnsIntList = returnsList && flattenedReturnType.isDartCoreInt;

Expand Down
2 changes: 1 addition & 1 deletion floor_generator/lib/processor/query_method_processor.dart
Original file line number Diff line number Diff line change
Expand Up @@ -132,7 +132,7 @@ class QueryMethodProcessor extends Processor<QueryMethod> {
final DartType flattenedReturnType,
) {
if (!returnsList &&
!flattenedReturnType.isVoid &&
!(flattenedReturnType is VoidType) &&
!flattenedReturnType.isNullable) {
if (returnsStream) {
throw _processorError.doesNotReturnNullableStream;
Expand Down
20 changes: 14 additions & 6 deletions floor_generator/lib/processor/queryable_processor.dart
Original file line number Diff line number Diff line change
Expand Up @@ -52,13 +52,21 @@ abstract class QueryableProcessor<T extends Queryable> extends Processor<T> {

@protected
String getConstructor(final List<Field> fields) {
final constructorParameters = classElement.constructors.first.parameters;
final parameterValues = constructorParameters
.map((parameterElement) => _getParameterValue(parameterElement, fields))
.where((parameterValue) => parameterValue != null)
.join(', ');
final constructorParameters = classElement.constructors
.firstWhereOrNull((element) => element.isPublic && !element.isFactory)
?.parameters;

return '${classElement.displayName}($parameterValues)';
if (constructorParameters == null) {
throw _queryableProcessorError.missingUnnamedConstructor;
} else {
final parameterValues = constructorParameters
.map((parameterElement) =>
_getParameterValue(parameterElement, fields))
.where((parameterValue) => parameterValue != null)
.join(', ');

return '${classElement.displayName}($parameterValues)';
}
}

/// Returns `null` whenever field is @ignored
Expand Down
2 changes: 1 addition & 1 deletion floor_generator/lib/processor/update_method_processor.dart
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ class UpdateMethodProcessor implements Processor<UpdateMethod> {
_assertMethodReturnsNoList(flattenedReturnType);

final returnsInt = flattenedReturnType.isDartCoreInt;
final returnsVoid = flattenedReturnType.isVoid;
final returnsVoid = flattenedReturnType is VoidType;

if (!returnsInt && !returnsVoid) {
throw _errors.doesNotReturnVoidNorInt;
Expand Down
2 changes: 1 addition & 1 deletion floor_generator/lib/value_object/change_method.dart
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ class ChangeMethod {
this.entity,
);

bool get requiresAsyncModifier => flattenedReturnType.isVoid;
bool get requiresAsyncModifier => flattenedReturnType is VoidType;

bool get changesMultipleItems => parameterElement.type.isDartCoreList;

Expand Down
2 changes: 1 addition & 1 deletion floor_generator/lib/value_object/query_method.dart
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@ class QueryMethod {

bool get returnsStream => rawReturnType.isStream;

bool get returnsVoid => flattenedReturnType.isVoid;
bool get returnsVoid => flattenedReturnType is VoidType;

@override
bool operator ==(Object other) =>
Expand Down
3 changes: 2 additions & 1 deletion floor_generator/lib/writer/deletion_method_writer.dart
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
import 'package:analyzer/dart/element/type.dart';
import 'package:code_builder/code_builder.dart';
import 'package:floor_generator/misc/change_method_writer_helper.dart';
import 'package:floor_generator/misc/extension/string_extension.dart';
Expand Down Expand Up @@ -26,7 +27,7 @@ class DeletionMethodWriter implements Writer {
_method.entity.classElement.displayName.decapitalize();
final methodSignatureParameterName = _method.parameterElement.name;

if (_method.flattenedReturnType.isVoid) {
if (_method.flattenedReturnType is VoidType) {
return _generateVoidReturnMethodBody(
methodSignatureParameterName,
entityClassName,
Expand Down
3 changes: 2 additions & 1 deletion floor_generator/lib/writer/insertion_method_writer.dart
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
import 'package:analyzer/dart/element/type.dart';
import 'package:code_builder/code_builder.dart';
import 'package:floor_generator/misc/change_method_writer_helper.dart';
import 'package:floor_generator/misc/extension/string_extension.dart';
Expand Down Expand Up @@ -26,7 +27,7 @@ class InsertionMethodWriter implements Writer {
_method.entity.classElement.displayName.decapitalize();
final methodSignatureParameterName = _method.parameterElement.displayName;

if (_method.flattenedReturnType.isVoid) {
if (_method.flattenedReturnType is VoidType) {
return _generateVoidReturnMethodBody(
methodSignatureParameterName,
entityClassName,
Expand Down
3 changes: 2 additions & 1 deletion floor_generator/lib/writer/transaction_method_writer.dart
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
import 'package:analyzer/dart/element/type.dart';
import 'package:code_builder/code_builder.dart';
import 'package:floor_generator/misc/annotation_expression.dart';
import 'package:floor_generator/misc/type_utils.dart';
Expand Down Expand Up @@ -28,7 +29,7 @@ class TransactionMethodWriter implements Writer {
final methodCall = '${method.name}($parameters)';
final innerType = method.returnType.flatten();
final innerTypeName = innerType.getDisplayString(withNullability: false);
final finalExpression = innerType.isVoid ? 'await' : 'return';
final finalExpression = innerType is VoidType ? 'await' : 'return';

return '''
if (database is sqflite.Transaction) {
Expand Down
3 changes: 2 additions & 1 deletion floor_generator/lib/writer/update_method_writer.dart
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
import 'package:analyzer/dart/element/type.dart';
import 'package:code_builder/code_builder.dart';
import 'package:floor_generator/misc/change_method_writer_helper.dart';
import 'package:floor_generator/misc/extension/string_extension.dart';
Expand Down Expand Up @@ -26,7 +27,7 @@ class UpdateMethodWriter implements Writer {
_method.entity.classElement.displayName.decapitalize();
final methodSignatureParameterName = _method.parameterElement.displayName;

if (_method.flattenedReturnType.isVoid) {
if (_method.flattenedReturnType is VoidType) {
return _generateVoidReturnMethodBody(
methodSignatureParameterName,
entityClassName,
Expand Down
Loading

0 comments on commit 6e507dc

Please sign in to comment.