Skip to content

Commit 4d3164c

Browse files
external types: support external name for @entity #139
1 parent ec18417 commit 4d3164c

File tree

8 files changed

+47
-3
lines changed

8 files changed

+47
-3
lines changed

generator/lib/src/code_builder.dart

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -271,6 +271,7 @@ class CodeBuilder extends Builder {
271271

272272
entityInModel.name = entity.name;
273273
entityInModel.flags = entity.flags;
274+
entityInModel.externalName = entity.externalName;
274275
entityInModel.constructorParams = entity.constructorParams;
275276

276277
// here, the entity was found already and entityInModel and entity might differ, i.e. conflicts need to be resolved, so merge all properties first

generator/lib/src/code_chunks.dart

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -122,12 +122,16 @@ class CodeChunks {
122122
}
123123

124124
static String createModelEntity(ModelEntity entity) {
125+
var additionalArgs = '';
126+
if (entity.externalName != null) {
127+
additionalArgs += " externalName: '${entity.externalName}',";
128+
}
125129
return '''
126130
$obxInt.ModelEntity(
127131
id: ${createIdUid(entity.id)},
128132
name: '${entity.name}',
129133
lastPropertyId: ${createIdUid(entity.lastPropertyId)},
130-
flags: ${entity.flags},
134+
flags: ${entity.flags},$additionalArgs
131135
properties: <$obxInt.ModelProperty>[
132136
${entity.properties.map(createModelProperty).join(',')}
133137
],

generator/lib/src/entity_resolver.dart

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,11 @@ class EntityResolver extends Builder {
7070
null,
7171
uidRequest: !entityUid.isNull && entityUid.intValue == 0);
7272

73+
// @ExternalName
74+
_externalNameChecker.runIfMatches(classElement, (annotation) {
75+
entity.externalName = _readExternalNameParams(annotation);
76+
});
77+
7378
// Sync: check if enabled and options
7479
_syncChecker.runIfMatches(classElement, (annotation) {
7580
entity.flags |= OBXEntityFlags.SYNC_ENABLED;

generator/test/code_builder_test.dart

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -380,6 +380,26 @@ void main() {
380380
});
381381

382382
group("ExternalType and ExternalName annotations", () {
383+
test('annotations work on @Entity', () async {
384+
final source = r'''
385+
library example;
386+
import 'package:objectbox/objectbox.dart';
387+
388+
@Entity()
389+
@ExternalName(name: 'my-mongo-entity')
390+
class Example {
391+
@Id()
392+
int id = 0;
393+
}
394+
''';
395+
396+
final testEnv = GeneratorTestEnv();
397+
await testEnv.run(source);
398+
399+
final entity = testEnv.model.entities[0];
400+
expect(entity.externalName, "my-mongo-entity");
401+
});
402+
383403
test('annotations work on properties', () async {
384404
final source = r'''
385405
library example;

objectbox/lib/src/modelinfo/modelentity.dart

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ class ModelEntity {
1414
late String _name;
1515
IdUid lastPropertyId = const IdUid.empty();
1616
int _flags = 0;
17+
String? externalName;
1718
final List<ModelProperty> _properties;
1819
final List<ModelRelation> _relations;
1920
final List<ModelBacklink> _backlinks;
@@ -72,6 +73,7 @@ class ModelEntity {
7273
required String name,
7374
required this.lastPropertyId,
7475
required int flags,
76+
this.externalName,
7577
required List<ModelProperty> properties,
7678
required List<ModelRelation> relations,
7779
required List<ModelBacklink> backlinks})
@@ -94,6 +96,7 @@ class ModelEntity {
9496
_backlinks = [] {
9597
name = data['name'] as String?;
9698
flags = data['flags'] as int? ?? 0;
99+
externalName = data['externalName'] as String?;
97100

98101
final properties = data['properties'] as List;
99102
for (final p in properties) {
@@ -179,6 +182,7 @@ class ModelEntity {
179182
ret['lastPropertyId'] = lastPropertyId.toString();
180183
ret['name'] = name;
181184
if (flags != 0) ret['flags'] = flags;
185+
if (externalName != null) ret['externalName'] = externalName;
182186
ret['properties'] =
183187
properties.map((p) => p.toMap(forModelJson: forModelJson)).toList();
184188
ret['relations'] =

objectbox/lib/src/native/model.dart

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,15 @@ class Model {
5252

5353
if (entity.flags != 0) _check(C.model_entity_flags(_cModel, entity.flags));
5454

55+
final externalName = entity.externalName?.toNativeUtf8();
56+
if (externalName != null) {
57+
try {
58+
_check(C.model_entity_external_name(_cModel, externalName.cast()));
59+
} finally {
60+
calloc.free(externalName);
61+
}
62+
}
63+
5564
// add all properties
5665
entity.properties.forEach(addProperty);
5766

objectbox_test/test/box_test.dart

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -731,13 +731,13 @@ void main() {
731731
final box = store.box<EntityWithExternalType>();
732732
var testObject = EntityWithExternalType([90, 100, 110], [1, 2, 3]);
733733
testObject.mongoIdEntities
734-
.add(EntityWithExternalType([120, 130, 140], null));
734+
.add(EntityWithExternalType([120, 121, 122], null));
735735
final id = box.put(testObject);
736736
final item = box.get(id)!;
737737
expect(item.id, id);
738738
expect(item.mongoId, [90, 100, 110]);
739739
expect(item.mongoUuid, [1, 2, 3]);
740-
expect(item.mongoIdEntities.first.mongoId, [120, 130, 140]);
740+
expect(item.mongoIdEntities.first.mongoId, [120, 121, 122]);
741741
});
742742

743743
test('.count() works', () {

objectbox_test/test/objectbox-model.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -729,6 +729,7 @@
729729
"id": "16:5931645853908059165",
730730
"lastPropertyId": "3:7670802129899081197",
731731
"name": "EntityWithExternalType",
732+
"externalName": "my-mongo-entity",
732733
"properties": [
733734
{
734735
"id": "1:3044824951282217899",

0 commit comments

Comments
 (0)