{"id":20929246,"url":"https://github.com/lennertsoffers/room-annotation-processor","last_synced_at":"2026-05-20T11:38:52.778Z","repository":{"id":109594866,"uuid":"574169221","full_name":"lennertsoffers/Room-Annotation-Processor","owner":"lennertsoffers","description":"Research about the workings of the annotation processor of Room","archived":false,"fork":false,"pushed_at":"2022-12-04T16:52:09.000Z","size":182,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-01-19T18:44:05.415Z","etag":null,"topics":["annotation-processing","java","room-database"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/lennertsoffers.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2022-12-04T16:34:40.000Z","updated_at":"2022-12-05T11:22:55.000Z","dependencies_parsed_at":"2023-04-25T04:34:56.963Z","dependency_job_id":null,"html_url":"https://github.com/lennertsoffers/Room-Annotation-Processor","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lennertsoffers%2FRoom-Annotation-Processor","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lennertsoffers%2FRoom-Annotation-Processor/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lennertsoffers%2FRoom-Annotation-Processor/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lennertsoffers%2FRoom-Annotation-Processor/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/lennertsoffers","download_url":"https://codeload.github.com/lennertsoffers/Room-Annotation-Processor/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":243324269,"owners_count":20273099,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["annotation-processing","java","room-database"],"created_at":"2024-11-18T21:18:35.661Z","updated_at":"2025-12-28T11:56:06.571Z","avatar_url":"https://github.com/lennertsoffers.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Room's annotation processor\n\nWelcome to the README file of my research assignment of Android Application development.\n\nMy project can be found in [this article](./markdown/The%20magic%20of%20Room's%20annotation%20processor.md).\n\n## Topic\n\nFor this research assignment, I wanted to do something different than just making a plain application. I chose to write a research about annotation processing. With a focus on the annotation processor that Room uses to generate files that handle database interaction in SQLite.\n\nThe research consists of two parts: \n* The research documents consisting of 5 chapters that explain a lot of theoretical concepts using code snippets\n\n  [Link to the introduction document](./markdown/The%20magic%20of%20Room's%20annotation%20processor.md)\n\n* Two demo applications, one made with Room and one made with a self-written annotation processor\n\nYou learn a lot by creating applications using concepts, but you learn even more when you try to explain the concepts you learned during the journey. Thats why I chose the methodology of of keep the demo simple and focussing on a wel written documentation that covers the technologies used in the demo applications.\n\n## Planning\n\nI started with the topic I already knew, creating an android application with navigation and fragments that uses Room as a database. Then I wanted to create the same application without Room, but without writing the SQLite implementation myself. That's why I needed an annotation processor.\n\nTo create the customized annotation processor, I needed to learn how to work with SQLite, so I followed the Android documentation tutorial for this.\n\nThen I could do some research on how to create an annotation processor and generate source files. It is possible to create source files without any template engine, but I found it more handy to work with templates.\n\nTemplate engine selection included listing the possible options, and then choosing the best option. I would have chosen Thymeleaf if it was possible to generate plain text files with it, but sadly enough it is optimize for generating xml code. That's why I chose Apache Velocity which is a super easy template engine I fell in love with during the process of using it.\n\nNow I had to bring everything I learned together and recreate the same demo application with the annotation processor.\n\nThe final step was to document everything and explain the different parts of the research in detail.\n\n## Time spent\n\n![Work Schema](./markdown/images/work_schema.png)\n\n## Overall feeling\n\nLooking back, I'm very proud on the project I made. Its maybe not the most glamourous with the best UI, but in my opinion, the beauty can be found in understanding hard topics.\n\nI'm really proud I was able to create a annotation processor that makes life easier. Just being able to add annotations in you code and have a working database interaction is for me personally why I love Java (and Kotlin).\n\nBut I'm also happy that I now finally understand what these annotations really do and what happens in the background. I how that people that are interested and read my research think the same.\n\nThe project may be a bit different than your standard application, but I tried my best to meet the requirements, while still keeping the demo clean and easily understandable.\n\nThat's why I would score my project a 9/10.\n\n## Sources\n\n* [Android Room](https://developer.android.com/training/data-storage/room)\n* [Android SQLite](https://developer.android.com/training/data-storage/sqlite)\n* [Apache Velocity](https://velocity.apache.org/)","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flennertsoffers%2Froom-annotation-processor","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Flennertsoffers%2Froom-annotation-processor","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flennertsoffers%2Froom-annotation-processor/lists"}