Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
249 commits
Select commit Hold shift + click to select a range
2d518fa
empty commit for feature/primitive_list PR
zaki50 Jul 27, 2017
63834a1
Merge branch 'master-4.0' into feature/primitive_list
zaki50 Aug 8, 2017
bc8ebe9
Merge branch 'master-4.0' into feature/primitive_list
zaki50 Aug 22, 2017
0634205
Modify APIs to support Primitive List feature (Design 1)
zaki50 Aug 24, 2017
9351594
revert non-API changes
zaki50 Aug 24, 2017
342ea81
add RealmFieldType.BINARY_LIST
zaki50 Aug 28, 2017
8be7be7
remove unused import
zaki50 Aug 28, 2017
f3f4a26
Merge branch 'master-4.0' into feature/primitive_list
zaki50 Aug 29, 2017
f1e0528
Merge branch 'feature/primitive_list' into my/primitive_list_api
zaki50 Aug 29, 2017
c8a8821
Merge branch 'master-4.0' into feature/primitive_list
zaki50 Sep 5, 2017
eef456d
Merge branch 'feature/primitive_list' into my/primitive_list_api
zaki50 Sep 5, 2017
e86713e
Primitive List feature(Part2: Nullability changes) (#5150)
zaki50 Sep 5, 2017
6ec1b48
add methods to modify PrimitiveList in OsList
zaki50 Sep 5, 2017
e498439
update Property
zaki50 Sep 5, 2017
3015122
fix test
zaki50 Sep 5, 2017
a859bdd
fix tests
zaki50 Sep 5, 2017
f8699f8
Merge branch 'my/primitive_list_6_OsList' into my/primitive_list_7_Sc…
zaki50 Sep 5, 2017
88ece6e
generate getters and setters for primitive list
zaki50 Sep 5, 2017
d86453f
empty commit for part9
zaki50 Sep 6, 2017
81d4061
implement logic for primitive list in RealmList
zaki50 Sep 6, 2017
14489f7
fix tests
zaki50 Sep 6, 2017
c48d399
fix annotation processor unit tests
zaki50 Sep 6, 2017
6c8b329
Merge branch 'my/primitive_list_8_annotation_processor' into my/primi…
zaki50 Sep 6, 2017
501d6b2
Merge branch 'master-4.0' into my/primitive_list_6_OsList
zaki50 Sep 6, 2017
80c963e
Merge branch 'my/primitive_list_6_OsList' into my/primitive_list_7_Sc…
zaki50 Sep 6, 2017
d4333f1
Merge branch 'my/primitive_list_7_Schema' into my/primitive_list_8_an…
zaki50 Sep 6, 2017
b305367
Merge branch 'my/primitive_list_8_annotation_processor' into my/primi…
zaki50 Sep 6, 2017
c48bee2
throw an exception if query or aggregation feature is used for primit…
zaki50 Sep 6, 2017
8b07850
add realm field types
zaki50 Sep 6, 2017
df0e6a0
SchemaInfo for primitive list
zaki50 Sep 6, 2017
7c420cc
Merge branch 'my/primitive_list_7_Schema' into my/primitive_list_8_an…
zaki50 Sep 6, 2017
ed554e9
fix a bug
zaki50 Sep 6, 2017
392a877
Merge branch 'my/primitive_list_7_Schema' into my/primitive_list_8_an…
zaki50 Sep 6, 2017
2f38412
fix a bug
zaki50 Sep 6, 2017
395fc8b
Merge branch 'my/primitive_list_7_Schema' into my/primitive_list_8_an…
zaki50 Sep 6, 2017
86bd3d4
fix tests
zaki50 Sep 6, 2017
a097d8f
Merge branch 'my/primitive_list_8_annotation_processor' into my/primi…
zaki50 Sep 6, 2017
1892469
Merge branch 'master-4.0' into feature/primitive_list
zaki50 Sep 6, 2017
8cd8e13
Merge branch 'feature/primitive_list' into my/primitive_list_6_OsList
zaki50 Sep 6, 2017
cdf9585
Merge branch 'my/primitive_list_6_OsList' into my/primitive_list_7_Sc…
zaki50 Sep 6, 2017
ba3daaa
Merge branch 'my/primitive_list_7_Schema' into my/primitive_list_8_an…
zaki50 Sep 6, 2017
2b007a4
Merge branch 'my/primitive_list_8_annotation_processor' into my/primi…
zaki50 Sep 6, 2017
84aca51
address findbugs issues
zaki50 Sep 6, 2017
94b109b
added Javadoc comment and RealmList.toArray()
zaki50 Sep 6, 2017
04c04c1
fix bug
zaki50 Sep 7, 2017
c505b4d
Merge branch 'my/primitive_list_8_annotation_processor' into my/primi…
zaki50 Sep 7, 2017
799ee7e
Draft implementation of accessor context
beeender Sep 7, 2017
c1d2396
implement Primitive List logic for copy() and insert()
zaki50 Sep 7, 2017
9654a68
Merge branch 'my/primitive_list_8_annotation_processor' into my/primi…
zaki50 Sep 7, 2017
5243cd6
implement Primitive List logic for insert(Realm, Iterator,...)
zaki50 Sep 7, 2017
36c23ec
Merge branch 'my/primitive_list_8_annotation_processor' into my/primi…
zaki50 Sep 7, 2017
7cc7ae5
generate code for primitive list in update(), insertOrUpdate()
zaki50 Sep 7, 2017
8fb4430
Merge branch 'my/primitive_list_8_annotation_processor' into my/primi…
zaki50 Sep 7, 2017
535563c
minor refactoring
zaki50 Sep 7, 2017
125b88b
Merge branch 'master-4.0' into feature/primitive_list
zaki50 Sep 7, 2017
d00f93f
Merge branch 'feature/primitive_list' into my/primitive_list_6_OsList
zaki50 Sep 7, 2017
d863ddc
Merge branch 'my/primitive_list_6_OsList' into my/primitive_list_7_Sc…
zaki50 Sep 7, 2017
4e16256
Merge branch 'my/primitive_list_7_Schema' into my/primitive_list_8_an…
zaki50 Sep 7, 2017
3a9cc02
Merge branch 'my/primitive_list_8_annotation_processor' into my/primi…
zaki50 Sep 7, 2017
53d88ee
implement primitive list supprt for copyFromRealm()
zaki50 Sep 7, 2017
40a2006
Merge branch 'my/primitive_list_7_Schema' into mc/primitive_list_10_o…
zaki50 Sep 7, 2017
2715ce4
Merge branch 'mc/primitive_list_10_oslist_JNI' into my/primitive_list…
zaki50 Sep 7, 2017
1464120
Merge branch 'my/primitive_list_8_annotation_processor' into my/primi…
zaki50 Sep 7, 2017
780bb4b
Merge branch 'master' into feature/primitive_list
zaki50 Sep 7, 2017
de1355d
Merge branch 'feature/primitive_list' into my/primitive_list_6_OsList
zaki50 Sep 7, 2017
d37e6a2
Merge branch 'my/primitive_list_6_OsList' into my/primitive_list_7_Sc…
zaki50 Sep 7, 2017
7d57d50
Merge branch 'my/primitive_list_7_Schema' into mc/primitive_list_10_o…
zaki50 Sep 7, 2017
7e81516
Merge branch 'mc/primitive_list_10_oslist_JNI' into my/primitive_list…
zaki50 Sep 7, 2017
b328e39
Merge branch 'my/primitive_list_8_annotation_processor' into my/primi…
zaki50 Sep 7, 2017
7d48934
fixed a bug that getFieldType returns UNSUPPORTED_TABLE and isColumnN…
zaki50 Sep 8, 2017
5627cb1
Merge branch 'my/primitive_list_7_Schema' into mc/primitive_list_10_o…
zaki50 Sep 8, 2017
a43e1a7
Merge branch 'mc/primitive_list_10_oslist_JNI' into my/primitive_list…
zaki50 Sep 8, 2017
b50a4d4
Merge branch 'my/primitive_list_8_annotation_processor' into my/primi…
zaki50 Sep 8, 2017
6738f1d
added a test to get field meta data of primitive lists
zaki50 Sep 8, 2017
af7cec4
Merge branch 'my/primitive_list_8_annotation_processor' into my/primi…
zaki50 Sep 8, 2017
202f59a
Merge remote-tracking branch 'origin/master' into feature/primitive_list
beeender Sep 8, 2017
32d3aba
Merge branch 'feature/primitive_list' into my/primitive_list_6_OsList
beeender Sep 8, 2017
094437f
Merge branch 'my/primitive_list_6_OsList' into my/primitive_list_7_Sc…
beeender Sep 8, 2017
3417036
Merge branch 'my/primitive_list_7_Schema' into mc/primitive_list_10_o…
beeender Sep 8, 2017
965def3
Merge branch 'mc/primitive_list_10_oslist_JNI' into my/primitive_list…
beeender Sep 8, 2017
7c9ed74
Merge branch 'my/primitive_list_8_annotation_processor' into my/primi…
beeender Sep 8, 2017
87300f2
Add accessor context for string and bytes[]
beeender Sep 8, 2017
5d3e7b3
fix test
zaki50 Sep 8, 2017
0990d92
Merge branch 'my/primitive_list_8_annotation_processor' into my/primi…
zaki50 Sep 8, 2017
2f5d0f0
fix #5233
zaki50 Sep 9, 2017
b6f7930
move ManagedListOperator classes from the inside of RealmList to outside
zaki50 Sep 9, 2017
60aafd1
Merge branch 'mc/primitive_list_10_oslist_JNI' into my/primitive_list…
zaki50 Sep 9, 2017
35dfd99
Merge branch 'my/primitive_list_8_annotation_processor' into my/primi…
zaki50 Sep 9, 2017
b18a135
Commit missing file
beeender Sep 11, 2017
ac3beb0
Merge branch 'mc/primitive_list_10_oslist_JNI' into my/primitive_list…
zaki50 Sep 11, 2017
6e83c90
Merge branch 'my/primitive_list_8_annotation_processor' into my/primi…
zaki50 Sep 11, 2017
1ee2cf4
reformat code
zaki50 Sep 11, 2017
a2c65f3
Changed to throw IllegalArgumentException instead of IllegalStateExce…
zaki50 Sep 11, 2017
ebac9c1
Merge branch 'mc/primitive_list_10_oslist_JNI' into my/primitive_list…
zaki50 Sep 11, 2017
625c3d6
Merge branch 'my/primitive_list_8_annotation_processor' into my/primi…
zaki50 Sep 11, 2017
5955ef4
Implement special handling for byte[] in RealmList
zaki50 Sep 11, 2017
24fa44b
Merge branch 'master' into feature/primitive_list
zaki50 Sep 11, 2017
82ac176
Merge branch 'feature/primitive_list' into my/primitive_list_6_OsList
zaki50 Sep 11, 2017
146bc19
Merge branch 'my/primitive_list_6_OsList' into my/primitive_list_7_Sc…
zaki50 Sep 11, 2017
a4b4d72
Merge branch 'my/primitive_list_7_Schema' into mc/primitive_list_10_o…
zaki50 Sep 11, 2017
439c69a
Merge branch 'mc/primitive_list_10_oslist_JNI' into my/primitive_list…
zaki50 Sep 11, 2017
4c6ac92
Merge branch 'my/primitive_list_8_annotation_processor' into my/primi…
zaki50 Sep 11, 2017
8560532
Fix build on x86_64
beeender Sep 11, 2017
a0db053
avoid unnecessary looping
zaki50 Sep 11, 2017
b7ab7d7
use fqcn when makeing a string of value type.
zaki50 Sep 11, 2017
e837379
fix RealmList.toString()
zaki50 Sep 11, 2017
0fb5ed3
Primitive List feature(Part6: OsList) (#5208)
zaki50 Sep 11, 2017
afaf891
Merge branch 'master' into feature/primitive_list
zaki50 Sep 11, 2017
df751f6
Merge commit '0fb5ed3' into feature/primitive_list
zaki50 Sep 11, 2017
c47c203
Merge branch 'feature/primitive_list' into my/primitive_list_7_Schema
zaki50 Sep 11, 2017
cea9a95
Merge branch 'my/primitive_list_7_Schema' into mc/primitive_list_10_o…
zaki50 Sep 11, 2017
477845e
Merge branch 'mc/primitive_list_10_oslist_JNI' into my/primitive_list…
zaki50 Sep 11, 2017
2183bc9
Merge branch 'my/primitive_list_8_annotation_processor' into my/primi…
zaki50 Sep 11, 2017
8063604
Fix findbugs
beeender Sep 12, 2017
c7cf446
fix a bug
zaki50 Sep 12, 2017
ccd95a2
Merge branch 'master' into feature/primitive_list
zaki50 Sep 12, 2017
0720b06
Merge branch 'feature/primitive_list' into my/primitive_list_7_Schema
zaki50 Sep 12, 2017
0c74291
Merge branch 'my/primitive_list_7_Schema' into mc/primitive_list_10_o…
zaki50 Sep 12, 2017
3b74154
Merge branch 'mc/primitive_list_10_oslist_JNI' into my/primitive_list…
zaki50 Sep 12, 2017
dfa644d
Merge branch 'my/primitive_list_8_annotation_processor' into my/primi…
zaki50 Sep 12, 2017
ff3c205
Remove RealmFieldType.isList()
beeender Sep 12, 2017
ea0c317
Rephrase
beeender Sep 12, 2017
66557fd
fix bugs
zaki50 Sep 12, 2017
b4ff2e0
add instrumentation tests
zaki50 Sep 12, 2017
674c647
Merge branch 'master' into feature/primitive_list
zaki50 Sep 12, 2017
bbb925d
Merge branch 'feature/primitive_list' into my/primitive_list_7_Schema
zaki50 Sep 12, 2017
55f5663
Merge branch 'my/primitive_list_7_Schema' into mc/primitive_list_10_o…
zaki50 Sep 12, 2017
192f572
Merge branch 'mc/primitive_list_10_oslist_JNI' into my/primitive_list…
zaki50 Sep 12, 2017
665a090
Merge branch 'my/primitive_list_8_annotation_processor' into my/primi…
zaki50 Sep 12, 2017
e2e2d93
remove unused variable
zaki50 Sep 12, 2017
494578f
Merge branch 'my/primitive_list_7_Schema' into mc/primitive_list_10_o…
zaki50 Sep 12, 2017
9df91fa
Merge branch 'mc/primitive_list_10_oslist_JNI' into my/primitive_list…
zaki50 Sep 12, 2017
1bfcbec
Merge branch 'my/primitive_list_8_annotation_processor' into my/primi…
zaki50 Sep 12, 2017
0ad34c4
fix a bug that annotation processor always generates schema of primit…
zaki50 Sep 12, 2017
27f2212
Merge branch 'my/primitive_list_8_annotation_processor' into my/primi…
zaki50 Sep 12, 2017
6b67f01
add a constructor to create non-null primitive list
zaki50 Sep 12, 2017
f1cdcb6
Merge branch 'mc/primitive_list_10_oslist_JNI' into my/primitive_list…
zaki50 Sep 12, 2017
87e6ed9
Merge branch 'my/primitive_list_8_annotation_processor' into my/primi…
zaki50 Sep 12, 2017
4f62fa6
fix nativeIsColumnNullable
zaki50 Sep 12, 2017
38b25a5
Merge branch 'my/primitive_list_7_Schema' into mc/primitive_list_10_o…
zaki50 Sep 12, 2017
873ab52
Merge branch 'mc/primitive_list_10_oslist_JNI' into my/primitive_list…
zaki50 Sep 12, 2017
ef24542
Merge branch 'my/primitive_list_8_annotation_processor' into my/primi…
zaki50 Sep 12, 2017
4044eb6
fix compilation error
zaki50 Sep 12, 2017
6f1788e
Merge branch 'my/primitive_list_7_Schema' into mc/primitive_list_10_o…
zaki50 Sep 12, 2017
50a7ba8
Merge branch 'mc/primitive_list_10_oslist_JNI' into my/primitive_list…
zaki50 Sep 12, 2017
375d3d9
Merge branch 'my/primitive_list_8_annotation_processor' into my/primi…
zaki50 Sep 12, 2017
676c6e3
fix implementation of RealmList.remove(Object)
zaki50 Sep 12, 2017
f354cea
fix RealmListTests
zaki50 Sep 12, 2017
57be25f
fix RealmListTests
zaki50 Sep 12, 2017
8ff3de5
Handle non-null primitive list in JNI
beeender Sep 13, 2017
d790a86
Primitive List feature(Part7: Schema) (#5209)
zaki50 Sep 13, 2017
c364668
Merge branch 'feature/primitive_list' into mc/primitive_list_10_oslis…
zaki50 Sep 13, 2017
e35ff91
Merge branch 'mc/primitive_list_10_oslist_JNI' into my/primitive_list…
zaki50 Sep 13, 2017
ab29e5d
Merge branch 'my/primitive_list_8_annotation_processor' into my/primi…
zaki50 Sep 13, 2017
4211526
added tests for 'copyToRealm()' and 'copyFromRealm()'
zaki50 Sep 13, 2017
f4c75f6
added tests for non-null primitive list
zaki50 Sep 13, 2017
d48107a
fix test
zaki50 Sep 13, 2017
ec0feef
introduced OsObjectSchemaInfoaddPersistedValueListProperty() for prim…
zaki50 Sep 13, 2017
067bd1f
Merge branch 'mc/primitive_list_10_oslist_JNI' into my/primitive_list…
zaki50 Sep 13, 2017
e6549f7
use OsObjectSchemaInfo.addPersistedValueListProperty()
zaki50 Sep 13, 2017
072518d
Merge branch 'my/primitive_list_8_annotation_processor' into my/primi…
zaki50 Sep 13, 2017
2fd41f0
reformat
zaki50 Sep 13, 2017
f3f734d
Move list type check to CheckedRow
beeender Sep 13, 2017
637790e
Merge branch 'mc/primitive_list_10_oslist_JNI' into my/primitive_list…
zaki50 Sep 13, 2017
2864ab1
Merge branch 'my/primitive_list_8_annotation_processor' into my/primi…
zaki50 Sep 13, 2017
787b1cc
add size check to OsListTests.addNull_insertNull_setNull_requiredList…
zaki50 Sep 13, 2017
65cb83c
fix test
zaki50 Sep 13, 2017
86561b5
Merge branch 'mc/primitive_list_10_oslist_JNI' into my/primitive_list…
zaki50 Sep 13, 2017
69fbdf5
introduce Row.getModelList() and Row.getValueList() to check field ty…
zaki50 Sep 13, 2017
4f99c61
Merge branch 'my/primitive_list_8_annotation_processor' into my/primi…
zaki50 Sep 13, 2017
0e5b09e
Check nullable and throw ealier in JNI
beeender Sep 14, 2017
f276882
Remove fixme and useless code
beeender Sep 14, 2017
d0a0334
Merge branch 'mc/primitive_list_10_oslist_JNI' into my/primitive_list…
zaki50 Sep 14, 2017
92d0765
Merge branch 'my/primitive_list_8_annotation_processor' into my/primi…
zaki50 Sep 14, 2017
cf120e2
update nullablility annotations
zaki50 Sep 14, 2017
ec053e0
Merge branch 'mc/primitive_list_10_oslist_JNI' into my/primitive_list…
zaki50 Sep 14, 2017
889f892
Merge branch 'my/primitive_list_8_annotation_processor' into my/primi…
zaki50 Sep 14, 2017
d4ee982
update test case to expose an issue
zaki50 Sep 14, 2017
815bad7
Revert non-related changes
beeender Sep 14, 2017
b22c309
address review feedback
zaki50 Sep 14, 2017
d9707d7
add notice to Realm.*Json*()
zaki50 Sep 14, 2017
77d68cf
simplify Proxy's createDetachedCopy()
zaki50 Sep 14, 2017
a0fb560
Support listener on OsList
beeender Sep 14, 2017
7961a64
Merge pull request #5216 from realm/mc/primitive_list_10_oslist_JNI
beeender Sep 14, 2017
4400ab3
stop to add backlink field into nullable field list
zaki50 Sep 14, 2017
8c9e60f
add comments to ClassMetaData.hasRequiredAnnotation() and ClassMetaD…
zaki50 Sep 14, 2017
557f216
move Utils.getRealmListElementTypeMirror() to TypeMirrors class.
zaki50 Sep 14, 2017
1fd1b00
fix exception message
zaki50 Sep 14, 2017
c036e8c
add class comment to TypeMirrors
zaki50 Sep 14, 2017
76cbde4
add TODO comment
zaki50 Sep 14, 2017
c1dc3f0
Merge branch 'feature/primitive_list' into my/primitive_list_8_annota…
zaki50 Sep 14, 2017
7f0ed76
Merge branch 'my/primitive_list_8_annotation_processor' into my/primi…
zaki50 Sep 14, 2017
3d611a7
Merge branch 'my/primitive_list_9_RealmList' into mc/primitive_list_1…
zaki50 Sep 14, 2017
0c8dde8
Merge branch 'master' into feature/primitive_list
zaki50 Sep 14, 2017
88b4b66
Merge branch 'feature/primitive_list' into my/primitive_list_8_annota…
zaki50 Sep 14, 2017
3241a87
Merge branch 'my/primitive_list_8_annotation_processor' into my/primi…
zaki50 Sep 14, 2017
ef2aa91
Merge branch 'my/primitive_list_9_RealmList' into mc/primitive_list_1…
zaki50 Sep 14, 2017
9811cbe
Primitive List feature(Part8: Annotation processor implementation) (#…
zaki50 Sep 15, 2017
70d83aa
Merge branch 'feature/primitive_list' into my/primitive_list_9_RealmList
zaki50 Sep 15, 2017
e179fd5
Merge branch 'my/primitive_list_9_RealmList' into mc/primitive_list_1…
zaki50 Sep 15, 2017
db550a7
remove outdate comment
zaki50 Sep 15, 2017
078041a
fix todo comment
zaki50 Sep 15, 2017
5f9dbd4
use custom deleter for shared_ptr<char> that contains char[]
zaki50 Sep 15, 2017
7874296
fix failing test
zaki50 Sep 16, 2017
eebf152
remove methods to return primitive array
zaki50 Sep 16, 2017
1da98b7
Merge branch 'master' into feature/primitive_list
zaki50 Sep 16, 2017
fda1d0e
Merge branch 'feature/primitive_list' into my/primitive_list_9_RealmList
zaki50 Sep 16, 2017
ae6e91d
Merge branch 'my/primitive_list_9_RealmList' into mc/primitive_list_1…
zaki50 Sep 16, 2017
786e63d
Merge branch 'my/primitive_list_9_RealmList' into my/primitive_list_1…
zaki50 Sep 16, 2017
bb43a16
Using constans defined in Table class
zaki50 Sep 16, 2017
4f5cb68
use assertArrayEquals() instead of assertTrue(Arrays.equals())
zaki50 Sep 16, 2017
5e0b43c
add changelog entry about removed methods
zaki50 Sep 16, 2017
a3e2407
remove unused code
zaki50 Sep 16, 2017
b7d0167
update comment
zaki50 Sep 16, 2017
f27b2a2
remove comment
zaki50 Sep 16, 2017
e9e960d
update exception message
zaki50 Sep 18, 2017
4acc4a2
update thrown.expectMessage() to check exception message
zaki50 Sep 18, 2017
676a11b
fix test case name
zaki50 Sep 18, 2017
b33bb8e
add assertion for remove/removeAll
zaki50 Sep 18, 2017
b7b59bd
update RealmList.toString()
zaki50 Sep 18, 2017
a12c0c3
update exception message
zaki50 Sep 18, 2017
88ed4ba
fix failing tests
zaki50 Sep 18, 2017
06d562d
remove special handling to byte array in RealmList
zaki50 Sep 18, 2017
40b1ac2
remove special type conversion via Number in toArray()
zaki50 Sep 18, 2017
5817352
Merge branch 'my/primitive_list_9_RealmList' into mc/primitive_list_1…
zaki50 Sep 18, 2017
4ff447d
fix failing tests
zaki50 Sep 18, 2017
2fee5f7
Merge branch 'my/primitive_list_9_RealmList' into my/primitive_list_1…
zaki50 Sep 18, 2017
90affd1
remove unnecessary index checks
zaki50 Sep 18, 2017
38bd2bc
refactor ManagedListOperator and its sub-classes
zaki50 Sep 19, 2017
c871e8a
use thrown.expectMessage()
zaki50 Sep 19, 2017
93a4037
add Javadoc comments to ManagedListOperator and its subclasses
zaki50 Sep 19, 2017
31eca1c
Merge branch 'master' into feature/primitive_list
zaki50 Sep 19, 2017
e4de8b3
Merge branch 'feature/primitive_list' into my/primitive_list_9_RealmList
zaki50 Sep 19, 2017
d798e2d
Merge branch 'my/primitive_list_9_RealmList' into mc/primitive_list_1…
zaki50 Sep 19, 2017
3f496e2
Merge branch 'my/primitive_list_9_RealmList' into my/primitive_list_1…
zaki50 Sep 19, 2017
c50e0a3
address review comments
zaki50 Sep 19, 2017
a1f3d7b
Merge branch 'my/primitive_list_9_RealmList' into mc/primitive_list_1…
zaki50 Sep 19, 2017
748f8f0
Merge branch 'my/primitive_list_9_RealmList' into my/primitive_list_1…
zaki50 Sep 19, 2017
4c63804
Primitive List feature(Part 9, RealmList) (#5213)
zaki50 Sep 19, 2017
9b691ac
Merge branch 'feature/primitive_list' into mc/primitive_list_13_Liste…
zaki50 Sep 19, 2017
41e78b8
Merge branch 'feature/primitive_list' into my/primitive_list_14_fix_s…
zaki50 Sep 19, 2017
30f57f9
Merge pull request #5266 from realm/my/primitive_list_14_fix_shared_p…
zaki50 Sep 19, 2017
e0bb50c
Merge pull request #5259 from realm/mc/primitive_list_13_Listener_on_…
zaki50 Sep 19, 2017
7187807
Merge branch 'master' into feature/primitive_list
cmelchior Sep 26, 2017
9e287d4
fix intentation
zaki50 Sep 26, 2017
e306e08
Merge branch 'master' into feature/primitive_list
cmelchior Sep 26, 2017
2cd1e3e
Primitive List feature(Part15: Disable RealmList.createSnapshot() whe…
zaki50 Sep 29, 2017
068fbce
Merge branch 'master' into feature/primitive_list
cmelchior Oct 1, 2017
efa3315
Fix unit test
cmelchior Oct 1, 2017
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,11 +9,14 @@
* Removed deprecated API `RealmObject.removeChangeListeners()`. Use `RealmObject.removeAllChangeListeners()` instead.
* `SyncUser.Callback` to becomes generic.
* Removed `SyncUser.getAccessToken` method from public API, and rename it to `getRefreshToken`.
* Relaxed upper bound of type parameter of `RealmList`, `RealmQuery`, `RealmResults`, `RealmCollection`, `OrderedRealmCollection` and `OrderedRealmCollectionSnapshot`.

## Deprecated

## Enhancements

* Now users can use `String`, `byte[]`, `Boolean`, `Long`, `Integer`, `Short`, `Byte`, `Double`, `Float` and `Date` as a type parameter of `RealmList`.

## Bug Fixes

## Internal
Expand All @@ -29,6 +32,7 @@
### Breaking Changes

* `RealmResults.distinct()`/`RealmResults.distinctAsync()` have been removed. Use `RealmQuery.distinct()`/`RealmQuery.distinctAsync()` instead.
* `RealmQuery.createQuery(Realm, Class)`, `RealmQuery.createDynamicQuery(DynamicRealm, String)`, `RealmQuery.createQueryFromResult(RealmResults)` and `RealmQuery.createQueryFromList(RealmList)` have been removed. Use `Realm.where(Class)`, `DynamicRealm.where(String)`, RealmResults.where()` and `RealmList.where()` instead.

### Enhancements

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -174,7 +174,7 @@ class KotlinExampleActivity : Activity() {

// Sorting
val sortedPersons = realm.where(Person::class.java).findAllSorted("age", Sort.DESCENDING)
status += "\nSorting ${sortedPersons.last().name} == ${realm.where(Person::class.java).findAll().first().name}"
status += "\nSorting ${sortedPersons.last()?.name} == ${realm.where(Person::class.java).findAll().first()?.name}"

} finally {
realm.close()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,7 @@ public class ClassMetaData {
private final List<VariableElement> indexedFields = new ArrayList<VariableElement>(); // list of all fields marked @Index.
private final Set<Backlink> backlinks = new HashSet<Backlink>();
private final Set<VariableElement> nullableFields = new HashSet<VariableElement>(); // Set of fields which can be nullable
private final Set<VariableElement> nullableValueListFields = new HashSet<VariableElement>(); // Set of fields whose elements can be nullable

private String packageName; // package name for model class.
private boolean hasDefaultConstructor; // True if model has a public no-arg constructor.
Expand All @@ -66,21 +67,36 @@ public class ClassMetaData {
private boolean containsHashCode;

private final List<TypeMirror> validPrimaryKeyTypes;
private final List<TypeMirror> validListValueTypes;
private final Types typeUtils;
private final Elements elements;

public ClassMetaData(ProcessingEnvironment env, TypeElement clazz) {
public ClassMetaData(ProcessingEnvironment env, TypeMirrors typeMirrors, TypeElement clazz) {
this.classType = clazz;
this.className = clazz.getSimpleName().toString();
typeUtils = env.getTypeUtils();
elements = env.getElementUtils();
TypeMirror stringType = env.getElementUtils().getTypeElement("java.lang.String").asType();


validPrimaryKeyTypes = Arrays.asList(
stringType,
typeUtils.getPrimitiveType(TypeKind.SHORT),
typeUtils.getPrimitiveType(TypeKind.INT),
typeUtils.getPrimitiveType(TypeKind.LONG),
typeUtils.getPrimitiveType(TypeKind.BYTE)
typeMirrors.STRING_MIRROR,
typeMirrors.PRIMITIVE_LONG_MIRROR,
typeMirrors.PRIMITIVE_INT_MIRROR,
typeMirrors.PRIMITIVE_SHORT_MIRROR,
typeMirrors.PRIMITIVE_BYTE_MIRROR
);

validListValueTypes = Arrays.asList(
typeMirrors.STRING_MIRROR,
typeMirrors.BINARY_MIRROR,
typeMirrors.BOOLEAN_MIRROR,
typeMirrors.LONG_MIRROR,
typeMirrors.INTEGER_MIRROR,
typeMirrors.SHORT_MIRROR,
typeMirrors.BYTE_MIRROR,
typeMirrors.DOUBLE_MIRROR,
typeMirrors.FLOAT_MIRROR,
typeMirrors.DATE_MIRROR
);

for (Element element : classType.getEnclosedElements()) {
Expand Down Expand Up @@ -167,6 +183,15 @@ public boolean isNullable(VariableElement variableElement) {
return nullableFields.contains(variableElement);
}

/**
* Checks if the element of {@code RealmList} designated by {@code realmListVariableElement} is nullable.
*
* @return {@code true} if the element is nullable type, {@code false} otherwise.
*/
public boolean isElementNullable(VariableElement realmListVariableElement) {
return nullableValueListFields.contains(realmListVariableElement);
}

/**
* Checks if a VariableElement is indexed.
*
Expand Down Expand Up @@ -240,7 +265,7 @@ public boolean generate() {
packageName = packageElement.getQualifiedName().toString();

if (!categorizeClassElements()) { return false; }
if (!checkListTypes()) { return false; }
if (!checkCollectionTypes()) { return false; }
if (!checkReferenceTypes()) { return false; }
if (!checkDefaultConstructor()) { return false; }
if (!checkForFinalFields()) { return false; }
Expand Down Expand Up @@ -274,25 +299,14 @@ private boolean categorizeClassElements() {
return true;
}

private boolean checkListTypes() {
private boolean checkCollectionTypes() {
for (VariableElement field : fields) {
if (Utils.isRealmList(field) || Utils.isRealmResults(field)) {
// Check for missing generic (default back to Object)
if (Utils.getGenericTypeQualifiedName(field) == null) {
Utils.error("No generic type supplied for field", field);
if (Utils.isRealmList(field)) {
if (!checkRealmListType(field)) {
return false;
}

// Check that the referenced type is a concrete class and not an interface
TypeMirror fieldType = field.asType();
List<? extends TypeMirror> typeArguments = ((DeclaredType) fieldType).getTypeArguments();
String genericCanonicalType = typeArguments.get(0).toString();
TypeElement typeElement = elements.getTypeElement(genericCanonicalType);
if (typeElement.getSuperclass().getKind() == TypeKind.NONE) {
Utils.error(
"Only concrete Realm classes are allowed in RealmLists. "
+ "Neither interfaces nor abstract classes are allowed.",
field);
} else if (Utils.isRealmResults(field)) {
if (!checkRealmResultsType(field)) {
return false;
}
}
Expand All @@ -301,6 +315,75 @@ private boolean checkListTypes() {
return true;
}

private boolean checkRealmListType(VariableElement field) {
// Check for missing generic (default back to Object)
if (Utils.getGenericTypeQualifiedName(field) == null) {
Utils.error("No generic type supplied for field", field);
return false;
}

// Check that the referenced type is a concrete class and not an interface
TypeMirror fieldType = field.asType();
final TypeMirror elementTypeMirror = ((DeclaredType) fieldType).getTypeArguments().get(0);
if (elementTypeMirror.getKind() == TypeKind.DECLARED /* class of interface*/) {
TypeElement elementTypeElement = (TypeElement) ((DeclaredType) elementTypeMirror).asElement();
if (elementTypeElement.getSuperclass().getKind() == TypeKind.NONE) {
Utils.error(
"Only concrete Realm classes are allowed in RealmLists. "
+ "Neither interfaces nor abstract classes are allowed.",
field);
return false;
}
}

// Check if the actual value class is acceptable
if (!validListValueTypes.contains(elementTypeMirror) && !Utils.isRealmModel(elementTypeMirror)) {
final StringBuilder messageBuilder = new StringBuilder(
"Element type of RealmList must be a class implementing 'RealmModel' or one of the ");
final String separator = ", ";
for (TypeMirror type : validListValueTypes) {
messageBuilder.append('\'').append(type.toString()).append('\'').append(separator);
}
messageBuilder.setLength(messageBuilder.length() - separator.length());
messageBuilder.append('.');
Utils.error(messageBuilder.toString(), field);
return false;
}

return true;
}

private boolean checkRealmResultsType(VariableElement field) {
// Only classes implementing RealmModel are allowed since RealmResults field is used only for backlinks.

// Check for missing generic (default back to Object)
if (Utils.getGenericTypeQualifiedName(field) == null) {
Utils.error("No generic type supplied for field", field);
return false;
}

TypeMirror fieldType = field.asType();
final TypeMirror elementTypeMirror = ((DeclaredType) fieldType).getTypeArguments().get(0);
if (elementTypeMirror.getKind() == TypeKind.DECLARED /* class or interface*/) {
TypeElement elementTypeElement = (TypeElement) ((DeclaredType) elementTypeMirror).asElement();
if (elementTypeElement.getSuperclass().getKind() == TypeKind.NONE) {
Utils.error(
"Only concrete Realm classes are allowed in RealmResults. "
+ "Neither interfaces nor abstract classes are allowed.",
field);
return false;
}
}

// Check if the actual value class is acceptable
if (!Utils.isRealmModel(elementTypeMirror)) {
Utils.error("Element type of RealmResults must be a class implementing 'RealmModel'.", field);
return false;
}

return true;
}

private boolean checkReferenceTypes() {
for (VariableElement field : fields) {
if (Utils.isRealmModel(field)) {
Expand Down Expand Up @@ -376,14 +459,23 @@ private boolean categorizeField(Element element) {
if (!categorizeIndexField(element, field)) { return false; }
}

if (isRequiredField(field)) {
// @Required annotation of RealmList field only affects its value type, not field itself.
if (Utils.isRealmList(field)) {
// We only check @Required annotation. @org.jetbrains.annotations.NotNull annotation should not affect nullability of the list values.
if (!hasRequiredAnnotation(field)) {
final List<? extends TypeMirror> fieldTypeArguments = ((DeclaredType) field.asType()).getTypeArguments();
if (fieldTypeArguments.isEmpty() || !Utils.isRealmModel(fieldTypeArguments.get(0))) {
nullableValueListFields.add(field);
}
}
} else if (isRequiredField(field)) {
categorizeRequiredField(element, field);
} else {
// The field doesn't have the @Required annotation.
// The field doesn't have the @Required and @org.jetbrains.annotations.NotNull annotation.
// Without @Required annotation, boxed types/RealmObject/Date/String/bytes should be added to
// nullableFields.
// RealmList and Primitive types are NOT nullable always. @Required annotation is not supported.
if (!Utils.isPrimitiveType(field) && !Utils.isRealmList(field)) {
// RealmList of models, RealmResults(backlinks) and primitive types are NOT nullable. @Required annotation is not supported.
if (!Utils.isPrimitiveType(field) && !Utils.isRealmResults(field)) {
nullableFields.add(field);
}
}
Expand All @@ -409,8 +501,26 @@ private boolean categorizeField(Element element) {
return true;
}

/**
* This method only checks if the field has {@code @Required} annotation.
* In most cases, you should use {@link #isRequiredField(VariableElement)} to take into account
* Kotlin's annotation as well.
*
* @param field target field.
* @return {@code true} if the field has {@code @Required} annotation, {@code false} otherwise.
* @see #isRequiredField(VariableElement)
*/
private boolean hasRequiredAnnotation(VariableElement field) {
return field.getAnnotation(Required.class) != null;
}

/**
* Checks if the field is annotated as required.
* @param field target field.
* @return {@code true} if the field is annotated as required, {@code false} otherwise.
*/
private boolean isRequiredField(VariableElement field) {
if (field.getAnnotation(Required.class) != null) {
if (hasRequiredAnnotation(field)) {
return true;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,16 @@ public enum RealmFieldType {
REALM_INTEGER("INTEGER", "Long"),
OBJECT("OBJECT", "Object"),
LIST("LIST", "List"),
BACKLINK("BACKLINK", null);

BACKLINK("LINKING_OBJECTS", null),

INTEGER_LIST("INTEGER_LIST", "List"),
BOOLEAN_LIST("BOOLEAN_LIST", "List"),
STRING_LIST("STRING_LIST", "List"),
BINARY_LIST("BINARY_LIST", "List"),
DATE_LIST("DATE_LIST", "List"),
FLOAT_LIST("FLOAT_LIST", "List"),
DOUBLE_LIST("DOUBLE_LIST", "List");

private final String realmType;
private final String javaType;
Expand Down Expand Up @@ -110,4 +119,22 @@ public String getJavaType() {
// TODO: add support for char and Char
JAVA_TO_REALM_TYPES = Collections.unmodifiableMap(m);
}


static final Map<String, RealmFieldType> LIST_ELEMENT_TYPE_TO_REALM_TYPES;

static {
Map<String, RealmFieldType> m = new HashMap<String, RealmFieldType>();
m.put("java.lang.Byte", RealmFieldType.INTEGER_LIST);
m.put("java.lang.Short", RealmFieldType.INTEGER_LIST);
m.put("java.lang.Integer", RealmFieldType.INTEGER_LIST);
m.put("java.lang.Long", RealmFieldType.INTEGER_LIST);
m.put("java.lang.Float", RealmFieldType.FLOAT_LIST);
m.put("java.lang.Double", RealmFieldType.DOUBLE_LIST);
m.put("java.lang.Boolean", RealmFieldType.BOOLEAN_LIST);
m.put("java.lang.String", RealmFieldType.STRING_LIST);
m.put("java.util.Date", RealmFieldType.DATE_LIST);
m.put("byte[]", RealmFieldType.BINARY_LIST);
LIST_ELEMENT_TYPE_TO_REALM_TYPES = Collections.unmodifiableMap(m);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -172,6 +172,8 @@ public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment

// Create all proxy classes
private boolean processAnnotations(RoundEnvironment roundEnv) {
final TypeMirrors typeMirrors = new TypeMirrors(processingEnv);

for (Element classElement : roundEnv.getElementsAnnotatedWith(RealmClass.class)) {

// The class must either extend RealmObject or implement RealmModel
Expand All @@ -186,7 +188,7 @@ private boolean processAnnotations(RoundEnvironment roundEnv) {
return false;
}

ClassMetaData metadata = new ClassMetaData(processingEnv, (TypeElement) classElement);
ClassMetaData metadata = new ClassMetaData(processingEnv, typeMirrors, (TypeElement) classElement);
if (!metadata.isModelClass()) { continue; }

Utils.note("Processing class " + metadata.getSimpleClassName());
Expand All @@ -202,7 +204,7 @@ private boolean processAnnotations(RoundEnvironment roundEnv) {
Utils.error(e.getMessage(), classElement);
}

RealmProxyClassGenerator sourceCodeGenerator = new RealmProxyClassGenerator(processingEnv, metadata);
RealmProxyClassGenerator sourceCodeGenerator = new RealmProxyClassGenerator(processingEnv, typeMirrors, metadata);
try {
sourceCodeGenerator.generate();
} catch (IOException e) {
Expand Down
Loading