google / google/built_value.dart

Classes not being generated with new Dart 3 classes modifiers

Open
#1,262 2 comments 1 reaction 1 assignee Claimed by @davidmorgan View on GitHub
p2 / feature request
Dominant language
Dart
Stars
886
Forks
195
Avg merge
1d 11h
Merged PRs (30d)
4

Description

Hi @davidmorgan, hope you are doing pretty well!

The generated code is not respecting the classes modifiers in case we mark our class with one, example:

**Entity**
```dart
abstract interface class CreateVehiclePayload {
int get year;
String get make;
String get model;
double get initialMileage;
String? get plate;
String? get plateState;
String? get vin;

String toJson();
}
```

**Model**
```dart
library create_vehicle_payload_model;

part 'create_vehicle_payload_model.g.dart';

abstract final class CreateVehiclePayloadModel
implements CreateVehiclePayload, Built {
const CreateVehiclePayloadModel._();

factory CreateVehiclePayloadModel({
required int year,
required String model,
required String make,
required double initialMileage,
String? plate,
String? plateState,
String? vin,
}) =>
_$CreateVehiclePayloadModel(
(b) => b
..year = year
..model = model
..make = make
..initialMileage = initialMileage
..plate = plate
..vin = vin
..plateState = plateState,
);

@override
String toJson() {
return jsonEncode(coreSerializers.serializeWith(CreateVehiclePayloadModel.serializer, this));
}

static Serializer get serializer => _$createVehiclePayloadModelSerializer;
}
```

Then, if I run the command `flutter pub run build_runner build --delete-conflicting-outputs`, I get the following generated file:

```dart
// GENERATED CODE - DO NOT MODIFY BY HAND

part of 'create_vehicle_payload_model.dart';

// **************************************************************************
// BuiltValueGenerator
// **************************************************************************

Serializer _$createVehiclePayloadModelSerializer =
new _$CreateVehiclePayloadModelSerializer();

class _$CreateVehiclePayloadModelSerializer
implements StructuredSerializer {
@override
final Iterable types = const [
CreateVehiclePayloadModel,
_$CreateVehiclePayloadModel
];
@override
final String wireName = 'CreateVehiclePayloadModel';

@override
Iterable serialize(
Serializers serializers, CreateVehiclePayloadModel object,
{FullType specifiedType = FullType.unspecified}) {
final result = [
'year',
serializers.serialize(object.year, specifiedType: const FullType(int)),
'make',
serializers.serialize(object.make, specifiedType: const FullType(String)),
'model',
serializers.serialize(object.model,
specifiedType: const FullType(String)),
'initialMileage',
serializers.serialize(object.initialMileage,
specifiedType: const FullType(double)),
];
Object? value;
value = object.plate;
if (value != null) {
result
..add('plate')
..add(serializers.serialize(value,
specifiedType: const FullType(String)));
}
value = object.plateState;
if (value != null) {
result
..add('plateState')
..add(serializers.serialize(value,
specifiedType: const FullType(String)));
}
value = object.vin;
if (value != null) {
result
..add('vin')
..add(serializers.serialize(value,
specifiedType: const FullType(String)));
}
return result;
}

@override
CreateVehiclePayloadModel deserialize(
Serializers serializers, Iterable serialized,
{FullType specifiedType = FullType.unspecified}) {
final result = new CreateVehiclePayloadModelBuilder();

final iterator = serialized.iterator;
while (iterator.moveNext()) {
final key = iterator.current! as String;
iterator.moveNext();
final Object? value = iterator.current;
switch (key) {
case 'year':
result.year = serializers.deserialize(value,
specifiedType: const FullType(int))! as int;
break;
case 'make':
result.make = serializers.deserialize(value,
specifiedType: const FullType(String))! as String;
break;
case 'model':
result.model = serializers.deserialize(value,
specifiedType: const FullType(String))! as String;
break;
case 'initialMileage':
result.initialMileage = serializers.deserialize(value,
specifiedType: const FullType(double))! as double;
break;
case 'plate':
result.plate = serializers.deserialize(value,
specifiedType: const FullType(String)) as String?;
break;
case 'plateState':
result.plateState = serializers.deserialize(value,
specifiedType: const FullType(String)) as String?;
break;
case 'vin':
result.vin = serializers.deserialize(value,
specifiedType: const FullType(String)) as String?;
break;
}
}

return result.build();
}
}

class _$CreateVehiclePayloadModel extends CreateVehiclePayloadModel {
@override
final int year;
@override
final String make;
@override
final String model;
@override
final double initialMileage;
@override
final String? plate;
@override
final String? plateState;
@override
final String? vin;

factory _$CreateVehiclePayloadModel(
[void Function(CreateVehiclePayloadModelBuilder)? updates]) =>
(new CreateVehiclePayloadModelBuilder()..update(updates))._build();

_$CreateVehiclePayloadModel._(
{required this.year,
required this.make,
required this.model,
required this.initialMileage,
this.plate,
this.plateState,
this.vin})
: super._() {
BuiltValueNullFieldError.checkNotNull(
year, r'CreateVehiclePayloadModel', 'year');
BuiltValueNullFieldError.checkNotNull(
make, r'CreateVehiclePayloadModel', 'make');
BuiltValueNullFieldError.checkNotNull(
model, r'CreateVehiclePayloadModel', 'model');
BuiltValueNullFieldError.checkNotNull(
initialMileage, r'CreateVehiclePayloadModel', 'initialMileage');
}

@override
CreateVehiclePayloadModel rebuild(
void Function(CreateVehiclePayloadModelBuilder) updates) =>
(toBuilder()..update(updates)).build();

@override
CreateVehiclePayloadModelBuilder toBuilder() =>
new CreateVehiclePayloadModelBuilder()..replace(this);

@override
bool operator ==(Object other) {
if (identical(other, this)) return true;
return other is CreateVehiclePayloadModel &&
year == other.year &&
make == other.make &&
model == other.model &&
initialMileage == other.initialMileage &&
plate == other.plate &&
plateState == other.plateState &&
vin == other.vin;
}

@override
int get hashCode {
var _$hash = 0;
_$hash = $jc(_$hash, year.hashCode);
_$hash = $jc(_$hash, make.hashCode);
_$hash = $jc(_$hash, model.hashCode);
_$hash = $jc(_$hash, initialMileage.hashCode);
_$hash = $jc(_$hash, plate.hashCode);
_$hash = $jc(_$hash, plateState.hashCode);
_$hash = $jc(_$hash, vin.hashCode);
_$hash = $jf(_$hash);
return _$hash;
}

@override
String toString() {
return (newBuiltValueToStringHelper(r'CreateVehiclePayloadModel')
..add('year', year)
..add('make', make)
..add('model', model)
..add('initialMileage', initialMileage)
..add('plate', plate)
..add('plateState', plateState)
..add('vin', vin))
.toString();
}
}

class CreateVehiclePayloadModelBuilder
implements
Builder {
_$CreateVehiclePayloadModel? _$v;

int? _year;
int? get year => _$this._year;
set year(int? year) => _$this._year = year;

String? _make;
String? get make => _$this._make;
set make(String? make) => _$this._make = make;

String? _model;
String? get model => _$this._model;
set model(String? model) => _$this._model = model;

double? _initialMileage;
double? get initialMileage => _$this._initialMileage;
set initialMileage(double? initialMileage) =>
_$this._initialMileage = initialMileage;

String? _plate;
String? get plate => _$this._plate;
set plate(String? plate) => _$this._plate = plate;

String? _plateState;
String? get plateState => _$this._plateState;
set plateState(String? plateState) => _$this._plateState = plateState;

String? _vin;
String? get vin => _$this._vin;
set vin(String? vin) => _$this._vin = vin;

CreateVehiclePayloadModelBuilder();

CreateVehiclePayloadModelBuilder get _$this {
final $v = _$v;
if ($v != null) {
_year = $v.year;
_make = $v.make;
_model = $v.model;
_initialMileage = $v.initialMileage;
_plate = $v.plate;
_plateState = $v.plateState;
_vin = $v.vin;
_$v = null;
}
return this;
}

@override
void replace(CreateVehiclePayloadModel other) {
ArgumentError.checkNotNull(other, 'other');
_$v = other as _$CreateVehiclePayloadModel;
}

@override
void update(void Function(CreateVehiclePayloadModelBuilder)? updates) {
if (updates != null) updates(this);
}

@override
CreateVehiclePayloadModel build() => _build();

_$CreateVehiclePayloadModel _build() {
final _$result = _$v ??
new _$CreateVehiclePayloadModel._(
year: BuiltValueNullFieldError.checkNotNull(
year, r'CreateVehiclePayloadModel', 'year'),
make: BuiltValueNullFieldError.checkNotNull(
make, r'CreateVehiclePayloadModel', 'make'),
model: BuiltValueNullFieldError.checkNotNull(
model, r'CreateVehiclePayloadModel', 'model'),
initialMileage: BuiltValueNullFieldError.checkNotNull(
initialMileage, r'CreateVehiclePayloadModel', 'initialMileage'),
plate: plate,
plateState: plateState,
vin: vin);
replace(_$result);
return _$result;
}
}

// ignore_for_file: deprecated_member_use_from_same_package,type=lint
```

Then I get the following error -> `The type '_$CreateVehiclePayloadModel' must be 'base', 'final' or 'sealed' because the supertype 'CreateVehiclePayloadModel' is 'final'.`. In order to make it work, I have to manually add any of the mentioned modifiers, but I think it is not ideal, adding modifiers manually for each generated class is painful.

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.