This is an automated email from the ASF dual-hosted git repository.
chaokunyang pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/fory.git
The following commit(s) were added to refs/heads/main by this push:
new b32f3a8a6 fix(dart): fix dart ci (#3586)
b32f3a8a6 is described below
commit b32f3a8a6eb3dd97193b09763b834231034ae9e3
Author: Shawn Yang <[email protected]>
AuthorDate: Mon Apr 20 00:52:58 2026 +0800
fix(dart): fix dart ci (#3586)
## Why?
## What does this PR do?
## Related issues
## AI Contribution Checklist
- [ ] Substantial AI assistance was used in this PR: `yes` / `no`
- [ ] If `yes`, I included a completed [AI Contribution
Checklist](https://github.com/apache/fory/blob/main/AI_POLICY.md#9-contributor-checklist-for-ai-assisted-prs)
in this PR description and the required `AI Usage Disclosure`.
- [ ] If `yes`, my PR description includes the required `ai_review`
summary and screenshot evidence of the final clean AI review results
from both fresh reviewers on the current PR diff or current HEAD after
the latest code changes.
## Does this PR introduce any user-facing change?
- [ ] Does this PR introduce any public API change?
- [ ] Does this PR introduce any binary protocol compatibility change?
## Benchmark
---
.../fory/lib/src/codegen/fory_generator.dart | 200 ++++++++++-----------
dart/packages/fory/pubspec.yaml | 6 +-
2 files changed, 94 insertions(+), 112 deletions(-)
diff --git a/dart/packages/fory/lib/src/codegen/fory_generator.dart
b/dart/packages/fory/lib/src/codegen/fory_generator.dart
index eaf4c9b34..e792995c7 100644
--- a/dart/packages/fory/lib/src/codegen/fory_generator.dart
+++ b/dart/packages/fory/lib/src/codegen/fory_generator.dart
@@ -26,32 +26,29 @@ class DebugGeneratedFieldTypeSpec {
}
final class ForyGenerator extends Generator {
- static const TypeChecker _foryStructChecker =
- TypeChecker.typeNamed(ForyStruct, inPackage: 'fory');
- static const TypeChecker _foryFieldChecker =
- TypeChecker.typeNamed(ForyField, inPackage: 'fory');
- static const TypeChecker _foryUnionChecker =
- TypeChecker.typeNamed(ForyUnion, inPackage: 'fory');
- static const TypeChecker _listTypeChecker =
- TypeChecker.typeNamed(ListType, inPackage: 'fory');
- static const TypeChecker _mapTypeChecker =
- TypeChecker.typeNamed(MapType, inPackage: 'fory');
- static const TypeChecker _refOptionChecker =
- TypeChecker.typeNamed(RefOption, inPackage: 'fory');
- static const TypeChecker _nullableOptionChecker =
- TypeChecker.typeNamed(NullableOption, inPackage: 'fory');
- static const TypeChecker _int32Checker =
- TypeChecker.typeNamed(Int32Type, inPackage: 'fory');
- static const TypeChecker _int64Checker =
- TypeChecker.typeNamed(Int64Type, inPackage: 'fory');
- static const TypeChecker _uint8Checker =
- TypeChecker.typeNamed(Uint8Type, inPackage: 'fory');
- static const TypeChecker _uint16Checker =
- TypeChecker.typeNamed(Uint16Type, inPackage: 'fory');
- static const TypeChecker _uint32Checker =
- TypeChecker.typeNamed(Uint32Type, inPackage: 'fory');
- static const TypeChecker _uint64Checker =
- TypeChecker.typeNamed(Uint64Type, inPackage: 'fory');
+ static final TypeChecker _foryStructChecker = TypeChecker.fromRuntime(
+ ForyStruct,
+ );
+ static final TypeChecker _foryFieldChecker = TypeChecker.fromRuntime(
+ ForyField,
+ );
+ static final TypeChecker _foryUnionChecker = TypeChecker.fromRuntime(
+ ForyUnion,
+ );
+ static final TypeChecker _listTypeChecker =
TypeChecker.fromRuntime(ListType);
+ static final TypeChecker _mapTypeChecker = TypeChecker.fromRuntime(MapType);
+ static final TypeChecker _refOptionChecker = TypeChecker.fromRuntime(
+ RefOption,
+ );
+ static final TypeChecker _nullableOptionChecker = TypeChecker.fromRuntime(
+ NullableOption,
+ );
+ static final TypeChecker _int32Checker = TypeChecker.fromRuntime(Int32Type);
+ static final TypeChecker _int64Checker = TypeChecker.fromRuntime(Int64Type);
+ static final TypeChecker _uint8Checker = TypeChecker.fromRuntime(Uint8Type);
+ static final TypeChecker _uint16Checker =
TypeChecker.fromRuntime(Uint16Type);
+ static final TypeChecker _uint32Checker =
TypeChecker.fromRuntime(Uint32Type);
+ static final TypeChecker _uint64Checker =
TypeChecker.fromRuntime(Uint64Type);
final Map<String, String> _importPrefixByLibraryIdentifier =
<String, String>{};
@@ -73,11 +70,13 @@ final class ForyGenerator extends Generator {
final generatedApiName = '${helperBaseName}Fory';
final enumSpecs = enumElements.map(_analyzeEnum).toList(growable: false);
- final structSpecs =
- annotatedClasses.map(_analyzeStruct).toList(growable: false);
+ final structSpecs = annotatedClasses
+ .map(_analyzeStruct)
+ .toList(growable: false);
final output = StringBuffer()
..writeln(
- '// ignore_for_file: implementation_imports,
invalid_use_of_internal_member, unused_element, unnecessary_null_comparison')
+ '// ignore_for_file: implementation_imports,
invalid_use_of_internal_member, unused_element, unnecessary_null_comparison',
+ )
..writeln();
for (final enumSpec in enumSpecs) {
@@ -121,7 +120,8 @@ final class ForyGenerator extends Generator {
void _buildImportPrefixMap(LibraryReader library) {
_importPrefixByLibraryIdentifier.clear();
- for (final import in library.element.firstFragment.libraryImports) {
+ for (final import
+ in library.element.definingCompilationUnit.libraryImports) {
final importedLibrary = import.importedLibrary;
final prefix = import.prefix?.element.displayName;
if (importedLibrary == null || prefix == null || prefix.isEmpty) {
@@ -196,8 +196,9 @@ final class ForyGenerator extends Generator {
}
if (_isList(type) || _isSet(type)) {
final argument = (type as InterfaceType).typeArguments.single;
- final elementSpec =
- typeSpec is _ListTypeSpecInfo ? typeSpec.element : null;
+ final elementSpec = typeSpec is _ListTypeSpecInfo
+ ? typeSpec.element
+ : null;
return _GeneratedFieldTypeSpec(
typeLiteral: _typeReferenceLiteral(type),
typeId: _typeIdFor(type),
@@ -258,10 +259,12 @@ final class ForyGenerator extends Generator {
List<_GeneratedFieldSpec> fields,
) {
final unnamedConstructor = element.unnamedConstructor;
- final hasZeroArgConstructor = unnamedConstructor != null &&
+ final hasZeroArgConstructor =
+ unnamedConstructor != null &&
!unnamedConstructor.isFactory &&
- unnamedConstructor.formalParameters
- .every((parameter) => parameter.isOptional);
+ unnamedConstructor.parameters.every(
+ (parameter) => parameter.isOptional,
+ );
if (hasZeroArgConstructor && fields.every((field) => field.writable)) {
return const _ConstructorPlan.mutable();
}
@@ -279,7 +282,7 @@ final class ForyGenerator extends Generator {
};
final arguments = <_ConstructorArgumentSpec>[];
final constructorFieldNames = <String>{};
- for (final parameter in unnamedConstructor.formalParameters) {
+ for (final parameter in unnamedConstructor.parameters) {
final parameterName = parameter.displayName;
final field = fieldByName[parameterName];
if (field == null) {
@@ -367,8 +370,9 @@ final class ForyGenerator extends Generator {
final hasRuntimeFastPath = structSpec.fields.any(
(field) => !_usesDirectGeneratedBasicFastPath(field),
);
- final directCursorRuns =
- _directGeneratedWriteReservationRuns(structSpec.fields);
+ final directCursorRuns = _directGeneratedWriteReservationRuns(
+ structSpec.fields,
+ );
final directCursorRunByStart = <int, _DirectGeneratedWriteReservationRun>{
for (final run in directCursorRuns) run.start: run,
};
@@ -430,9 +434,7 @@ final class ForyGenerator extends Generator {
..writeln(
'final GeneratedStructRegistration<${structSpec.name}>
$registrationName = GeneratedStructRegistration<${structSpec.name}>(',
)
- ..writeln(
- ' fieldWritersBySlot: <_${structSpec.name}FieldWriter>[',
- );
+ ..writeln(' fieldWritersBySlot: <_${structSpec.name}FieldWriter>[');
for (var index = 0; index < structSpec.fields.length; index += 1) {
output.writeln(' _write${structSpec.name}Field$index,');
}
@@ -456,9 +458,7 @@ final class ForyGenerator extends Generator {
}
output
..writeln(' type: ${structSpec.name},')
- ..writeln(
- ' serializerFactory: _${structSpec.name}ForySerializer.new,',
- )
+ ..writeln(' serializerFactory: _${structSpec.name}ForySerializer.new,')
..writeln(' evolving: ${structSpec.evolving},')
..writeln(' fields: $metadataListName,')
..writeln(');')
@@ -533,9 +533,7 @@ final class ForyGenerator extends Generator {
..writeln(' return;')
..writeln(' }')
..writeln(' final writers = $registrationName.fieldWritersBySlot;')
- ..writeln(
- ' for (final field in slots.orderedFields) {',
- )
+ ..writeln(' for (final field in slots.orderedFields) {')
..writeln(' writers[field.slot](context, field, value);')
..writeln(' }')
..writeln(' }')
@@ -601,9 +599,7 @@ final class ForyGenerator extends Generator {
final field = structSpec.fields[index];
final readerFunctionName = field.readerFunctionName(structSpec.name);
final rawValueName = 'raw${structSpec.name}$index';
- output.writeln(
- ' if (slots.containsSlot($index)) {',
- );
+ output.writeln(' if (slots.containsSlot($index)) {');
output.writeln(
' final $rawValueName = slots.valueForSlot($index);',
);
@@ -667,8 +663,9 @@ final class ForyGenerator extends Generator {
..writeln(' context.reference(value);');
for (final fieldName
in structSpec.constructorPlan.postConstructionFieldNames) {
- final field =
- structSpec.fields.firstWhere((item) => item.name == fieldName);
+ final field = structSpec.fields.firstWhere(
+ (item) => item.name == fieldName,
+ );
output.writeln(' value.${field.name} = ${field.localName};');
}
output.writeln(' return value;');
@@ -685,9 +682,7 @@ final class ForyGenerator extends Generator {
final field = structSpec.fields[index];
final readerFunctionName = field.readerFunctionName(structSpec.name);
final rawValueName = 'raw${structSpec.name}$index';
- output.writeln(
- ' if (slots.containsSlot($index)) {',
- );
+ output.writeln(' if (slots.containsSlot($index)) {');
output.writeln(
' final $rawValueName = slots.valueForSlot($index);',
);
@@ -705,8 +700,9 @@ final class ForyGenerator extends Generator {
..writeln(' context.reference(value);');
for (final fieldName
in structSpec.constructorPlan.postConstructionFieldNames) {
- final field =
- structSpec.fields.firstWhere((item) => item.name == fieldName);
+ final field = structSpec.fields.firstWhere(
+ (item) => item.name == fieldName,
+ );
output.writeln(' value.${field.name} = ${field.localName};');
}
output.writeln(' return value;');
@@ -773,7 +769,8 @@ final class ForyGenerator extends Generator {
)
..writeln(' }')
..writeln(
- ' if (hasNamed && (namespace == null || typeName == null)) {')
+ ' if (hasNamed && (namespace == null || typeName == null)) {',
+ )
..writeln(
" throw ArgumentError('Both namespace and typeName are required
for named registration.');",
)
@@ -830,8 +827,10 @@ final class ForyGenerator extends Generator {
positionalArguments.add(field.localName);
}
}
- final arguments =
- <String>[...positionalArguments, ...namedArguments].join(', ');
+ final arguments = <String>[
+ ...positionalArguments,
+ ...namedArguments,
+ ].join(', ');
return '${structSpec.name}($arguments)';
}
@@ -901,8 +900,9 @@ GeneratedFieldType(
nullable: fieldType.nullable,
ref: fieldType.ref,
dynamic: fieldType.dynamic,
- arguments:
- fieldType.arguments.map(_fromDebugFieldType).toList(growable: false),
+ arguments: fieldType.arguments
+ .map(_fromDebugFieldType)
+ .toList(growable: false),
);
}
@@ -942,10 +942,7 @@ GeneratedFieldType(
nonNullableType,
nonNullableFieldType,
valueExpression,
- nullExpression: _nullExpression(
- nonNullableType,
- errorTarget: 'value',
- ),
+ nullExpression: _nullExpression(nonNullableType, errorTarget: 'value'),
);
return '$valueExpression == null ? $nullExpression : $converted';
}
@@ -972,10 +969,7 @@ GeneratedFieldType(
elementType,
elementFieldType,
'item',
- nullExpression: _nullExpression(
- elementType,
- errorTarget: 'list item',
- ),
+ nullExpression: _nullExpression(elementType, errorTarget: 'list item'),
);
return 'List<${_typeCodeString(elementType)}>.of((($valueExpression as
List)).map((item) => $convertedElement))';
}
@@ -989,10 +983,7 @@ GeneratedFieldType(
elementType,
elementFieldType,
'item',
- nullExpression: _nullExpression(
- elementType,
- errorTarget: 'set item',
- ),
+ nullExpression: _nullExpression(elementType, errorTarget: 'set item'),
);
return 'Set<${_typeCodeString(elementType)}>.of((($valueExpression as
Set)).map((item) => $convertedElement))';
}
@@ -1010,19 +1001,13 @@ GeneratedFieldType(
keyType,
keyFieldType,
'key',
- nullExpression: _nullExpression(
- keyType,
- errorTarget: 'map key',
- ),
+ nullExpression: _nullExpression(keyType, errorTarget: 'map key'),
);
final convertedValue = _conversionExpressionForType(
valueType,
valueFieldType,
'value',
- nullExpression: _nullExpression(
- valueType,
- errorTarget: 'map value',
- ),
+ nullExpression: _nullExpression(valueType, errorTarget: 'map value'),
);
return 'Map<${_typeCodeString(keyType)},
${_typeCodeString(valueType)}>.of((($valueExpression as Map)).map((key, value)
=> MapEntry($convertedKey, $convertedValue)))';
}
@@ -1077,9 +1062,7 @@ GeneratedFieldType(
field.fieldType.typeId == TypeIds.enumById;
}
- bool _usesDirectGeneratedDeclaredReadFastPath(
- _GeneratedFieldSpec field,
- ) {
+ bool _usesDirectGeneratedDeclaredReadFastPath(_GeneratedFieldSpec field) {
if (field.fieldType.nullable ||
field.fieldType.ref ||
field.fieldType.dynamic == true) {
@@ -1116,9 +1099,7 @@ GeneratedFieldType(
}
List<_DirectGeneratedWriteReservationRun>
- _directGeneratedWriteReservationRuns(
- List<_GeneratedFieldSpec> fields,
- ) {
+ _directGeneratedWriteReservationRuns(List<_GeneratedFieldSpec> fields) {
final runs = <_DirectGeneratedWriteReservationRun>[];
int? start;
var bytes = 0;
@@ -1534,7 +1515,8 @@ GeneratedFieldType(
}
_GeneratedFieldTypeSpec _nonNullableFieldType(
- _GeneratedFieldTypeSpec fieldType) {
+ _GeneratedFieldTypeSpec fieldType,
+ ) {
if (!fieldType.nullable) {
return fieldType;
}
@@ -1689,7 +1671,8 @@ GeneratedFieldType(
if (leftCompressed != rightCompressed) {
return leftCompressed ? 1 : -1;
}
- final sizeCompare = _primitiveSize(right.fieldType.typeId) -
+ final sizeCompare =
+ _primitiveSize(right.fieldType.typeId) -
_primitiveSize(left.fieldType.typeId);
if (sizeCompare != 0) {
return sizeCompare;
@@ -1720,10 +1703,7 @@ GeneratedFieldType(
return left.name.compareTo(right.name);
}
- int _compareOtherFields(
- _GeneratedFieldSpec left,
- _GeneratedFieldSpec right,
- ) {
+ int _compareOtherFields(_GeneratedFieldSpec left, _GeneratedFieldSpec right)
{
final keyCompare = left.sortKey.compareTo(right.sortKey);
if (keyCompare != 0) {
return keyCompare;
@@ -1845,9 +1825,9 @@ GeneratedFieldType(
'tagged' => TypeIds.taggedInt64,
'fixed' => TypeIds.int64,
_ => throw InvalidGenerationSourceError(
- 'Unsupported Int64Type encoding: $encodingValue.',
- element: field,
- ),
+ 'Unsupported Int64Type encoding: $encodingValue.',
+ element: field,
+ ),
};
return _IntegerAnnotationSpec(typeId: typeId);
}
@@ -1879,9 +1859,9 @@ GeneratedFieldType(
'tagged' => TypeIds.taggedUint64,
'fixed' => TypeIds.uint64,
_ => throw InvalidGenerationSourceError(
- 'Unsupported Uint64Type encoding: $encodingValue.',
- element: field,
- ),
+ 'Unsupported Uint64Type encoding: $encodingValue.',
+ element: field,
+ ),
};
return _IntegerAnnotationSpec(typeId: typeId);
}
@@ -1917,8 +1897,9 @@ GeneratedFieldType(
final options = _readTypeOptions(reader);
final keyObj = reader.peek('key');
final valueObj = reader.peek('value');
- final key =
- keyObj != null && !keyObj.isNull ? _readTypeSpecObj(keyObj) : null;
+ final key = keyObj != null && !keyObj.isNull
+ ? _readTypeSpecObj(keyObj)
+ : null;
final value = valueObj != null && !valueObj.isNull
? _readTypeSpecObj(valueObj)
: null;
@@ -2066,8 +2047,8 @@ GeneratedFieldType(
final method = element.getMethod('fromRawValue');
if (method == null ||
!method.isStatic ||
- method.formalParameters.length != 1 ||
- !method.formalParameters.single.type.isDartCoreInt) {
+ method.parameters.length != 1 ||
+ !method.parameters.single.type.isDartCoreInt) {
return false;
}
return method.returnType.element == element;
@@ -2187,8 +2168,9 @@ GeneratedFieldType(
if (nonNullable.typeArguments.isEmpty) {
return baseName;
}
- final typeArguments =
- nonNullable.typeArguments.map(_typeCodeString).join(', ');
+ final typeArguments = nonNullable.typeArguments
+ .map(_typeCodeString)
+ .join(', ');
return '$baseName<$typeArguments>';
}
return nonNullable.getDisplayString();
@@ -2317,9 +2299,9 @@ final class _ConstructorPlan {
final List<String> postConstructionFieldNames;
const _ConstructorPlan.mutable()
- : mode = _ConstructorMode.mutable,
- arguments = const <_ConstructorArgumentSpec>[],
- postConstructionFieldNames = const <String>[];
+ : mode = _ConstructorMode.mutable,
+ arguments = const <_ConstructorArgumentSpec>[],
+ postConstructionFieldNames = const <String>[];
const _ConstructorPlan.constructor({
required this.arguments,
diff --git a/dart/packages/fory/pubspec.yaml b/dart/packages/fory/pubspec.yaml
index 7860a9e7f..801474c5e 100644
--- a/dart/packages/fory/pubspec.yaml
+++ b/dart/packages/fory/pubspec.yaml
@@ -28,11 +28,11 @@ environment:
sdk: ^3.6.1
dependencies:
- analyzer: ^12.1.0
- build: ^4.0.5
+ analyzer: '>=6.5.0 <8.0.0'
+ build: ^2.4.1
build_config: ^1.1.0
meta: ^1.14.0
- source_gen: ^4.2.2
+ source_gen: ^2.0.0
dev_dependencies:
build_runner: ^2.4.13
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]