Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: add Kotlin model generator #1074

Merged
merged 45 commits into from
Jan 18, 2023
Merged

feat: add Kotlin model generator #1074

merged 45 commits into from
Jan 18, 2023

Conversation

LouisXhaferi
Copy link
Contributor

@LouisXhaferi LouisXhaferi commented Jan 3, 2023

This PR deals with adding support for Kotlin.

Todos:

  • Copy, Rename & Replace stuff in and from tepmplate files
  • Add generator to generators index file
  • Adapt logic & implement basic functionality
  • Use inline classes doesn't make sense in this context, also unnecessary performance optimization
  • Add Constraint Validation
  • Ensure that Classes can be compiled
  • Jackson Integration Not needed, Kotlin interop good enough
  • Add relevant reserved keywords to constants
  • Add mocked renderer
  • Testing
    • Test constrainer
    • Test restrained keywords
    • Test typemapping
    • Test presets
    • Test renderer
    • Add examples
  • Add FileGenerators test
  • Add Blackbox Tests
  • Doc
    • Add to main README
    • Add to list of generators
    • Add language specific Doc
  • Cleanup

For all steps, see contributing.md

Resolves #1073

Copy link
Contributor

@github-actions github-actions bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Welcome to AsyncAPI. Thanks a lot for creating your first pull request. Please check out our contributors guide useful for opening a pull request.
Keep in mind there are also other channels you can use to interact with AsyncAPI community. For more details check out this issue.

@LouisXhaferi
Copy link
Contributor Author

I'm pushing a bunch of malformed commit messages in here, I'll squash anything but the first chore commit once I'm done

@LouisXhaferi
Copy link
Contributor Author

One thing I'm not familiar with or quite so sure of is the whole __snapshots__ part during testing.

I suppose it's a regression testing thing? But who generates the snapshots the first time and what do I really test against?
I'll figure it out tomorrow.

@jonaslagoni
Copy link
Member

jonaslagoni commented Jan 4, 2023

I'm pushing a bunch of malformed commit messages in here, I'll squash anything but the first chore commit once I'm done

There are no specific format for commit messages in your local branch, everything is squashed when merged into next, so you have total freedom here🙂

One thing I'm not familiar with or quite so sure of is the whole __snapshots__ part during testing.

I suppose it's a regression testing thing? But who generates the snapshots the first time and what do I really test against? I'll figure it out tomorrow.

They are generated by the testing framework Jest, and can be updated by running the script npm run test:update, which will then update any non-matching snapshots with new expected results.

expect(models[0].result).toMatchSnapshot();

It is used instead of relying on using something like the following:

    expect(models[0].result).toEqual(expectedResult);

Which just makes it easier to work with then having to manually change the expected values 🙂

@sonarcloud
Copy link

sonarcloud bot commented Jan 8, 2023

Please retry analysis of this Pull-Request directly on SonarCloud.

@LouisXhaferi
Copy link
Contributor Author

My roadmap to completing this PR:
Constraint Validation Preset -> Test Annotation Renderer -> Test Presets -> Create Doc

Apart from that it seems to be working at this point.
Blackbox tests are passing, code can be compiled, unit test and examples passing.

Code probably needs a bit of care before I can complete this, since some parts are still copies, but all in all, this is nearly done.

P.S.:
Sorry for taking so long. I would have liked to be done with this last week.

@jonaslagoni
Copy link
Member

jonaslagoni commented Jan 17, 2023

In case you wanted to become a champion for Kotlin, remember add yourself to the codeowners file by adding the following:

# Language Champions for Kotlin and it's presets
*/generators/kotlin @LouisXhaferi 

@LouisXhaferi
Copy link
Contributor Author

LouisXhaferi commented Jan 17, 2023

In case you wanted to become a champion for Kotlin, remember add yourself to the codeowners file by adding the following:

# Language Champions for Kotlin and it's presets
*/generators/kotlin @LouisXhaferi 

Yes, I will gladly be the champion for Kotlin (and join the TSC if that is part of it 🙏🏻 ) as a employee of Mercedes-Benz Tech Innovation 💪🏻
(I think we're even like a Linux Foundation Silver backer, which is pretty cool imo)

I'll do the following things this afternoon:

  • fix compilation error
  • exclude windows
  • open issue about windows not working and being excluded
  • add myself to CODEOWNERS for Kotlin

@LouisXhaferi
Copy link
Contributor Author

I have not found out why the windows runner would use the native compiler so far.

I checked out the Installer script, which looks fine and seems to install the correct version....

Since I have no idea where it goes wrong, I haven't opener an Issue yet.
I hope I'll find out later, otherwise I'll temporarily open one in this repo.

@LouisXhaferi
Copy link
Contributor Author

Aaah I need to do one more thing: install kotlin in the docker image

@jonaslagoni
Copy link
Member

I hope I'll find out later, otherwise I'll temporarily open one in this repo.

Temporary issue is all good, you can clarify it later once you figure it out 👍

@LouisXhaferi
Copy link
Contributor Author

I think.... I'm all done

@sonarcloud
Copy link

sonarcloud bot commented Jan 18, 2023

Kudos, SonarCloud Quality Gate passed!    Quality Gate passed

Bug A 0 Bugs
Vulnerability A 0 Vulnerabilities
Security Hotspot A 0 Security Hotspots
Code Smell A 0 Code Smells

No Coverage information No Coverage information
0.0% 0.0% Duplication

Copy link
Member

@jonaslagoni jonaslagoni left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM 🔥 Well done 💪

I will invite you on as a collaborator, so please check your invites/email. You can then add yourself to the TSC in the community repository, you can use this PR as guideline: asyncapi/community#570

If you encounter any problem just reach out 😄

@magicmatatjahu @Samridhi-98 @ron-debajyoti @leigh-johnson pinging you to let you know the Modelina family grows 😊

@jonaslagoni
Copy link
Member

/rtm

@asyncapi-bot asyncapi-bot merged commit fcdab58 into asyncapi:next Jan 18, 2023
@asyncapi-bot
Copy link
Contributor

🎉 This PR is included in version 1.0.0-next.41 🎉

The release is available on:

Your semantic-release bot 📦🚀

@jonaslagoni
Copy link
Member

@all-contributors please add @LouisXhaferi for code, test, doc, example, maintenance.

@allcontributors
Copy link
Contributor

@jonaslagoni

I've put up a pull request to add @LouisXhaferi! 🎉

@LouisXhaferi
Copy link
Contributor Author

LGTM 🔥 Well done 💪

I will invite you on as a collaborator, so please check your invites/email. You can then add yourself to the TSC in the community repository, you can use this PR as guideline: asyncapi/community#570

If you encounter any problem just reach out 😄

@magicmatatjahu @Samridhi-98 @ron-debajyoti @leigh-johnson pinging you to let you know the Modelina family grows 😊

Thank you for accompanying and supporting me through my first issue and pr here 💪🏻

jonaslagoni added a commit that referenced this pull request Jan 23, 2023
## [1.0.0](v0.59.9...v1.0.0) (2023-01-23)

### Upgrade Steps

You can find the migration details here: https://github.com/asyncapi/modelina/blob/master/docs/migration.md 

Dont hesitate to reach out if you need help migrating to version 1.

### Breaking Changes
There is no specific PR that contains the breaking changes but is part of multiple PRs. See the migration part above.

### New Features
* feat: add Rust Generator (#818)
* feat: add Kotlin model generator (#1074)
* feat: add Python generator (#863)
* feat: add jsonbinpack preset for TypeScript (#854)
* feat: add support for AsyncAPI 2.5 (#893)
* feat: add support for oneOf and anyOf as UnionModel (#899)
* feat: integrate new AsyncAPI parser version (#925)
* feat: add C# Newtonsoft preset (#970)
* feat: add access to entire property object in constrainer (#985)
* feat: add precise csharp enum type (#1047)
* feat: add dependency manager (#1063)

### Bug Fixes
* fix: unwrapping dictionaries not working in marshaling preset (#855)
* fix: import path of helpers in DartRenderer (#794)
* fix: modelina cannot be used in website environments (#843)
* fix: duplicate dependencies being rendered (#842)
* fix: inner references not being found (#844)
* fix: root level references are not handled for JSON Schema (#829)
* fix: wrong typescript number type used for integers (#902)
* fix: merging CommonModel properties should not carry over properties to other models (#917)
* fix: duplicate and self dependencies should not be rendered (#903)
* fix: python generates unusable class for empty properties (#901)
* fix: javascript should not split out enums (#926)
* fix: typescript marshaling preset not caring about external models (#927)
* fix: typescript rendering wrong array type when union (#928)
* fix: java dictionary constrainer gives unusable integer type for map value (#929)
* fix: remove unintended characters for typescript marshaling preset (#935)
* fix: enable processor options to be passed processors (#920)
* fix: references are getting incorrect model names (#951)
* fix: enum generator for Java should use strict types for it's values (#944)
* fix: implicit python import error (#981)
* fix: rust compile errors on enum members containing digits (#994)
* fix: add `exec` as a reserved keyword for Python (#1000)
* fix: c# newtonsoft preset syntax errors (#1004)
* fix: rust enum renderer only working for JSON Schema inputs (#1001)
* fix: dependencies are rendered twice (#1002)
* fix: rust impl new fn for Boxed values (#1013)
* fix: solving blackbox tests problems (#905)
* fix: structs missing pub keyword in RustGenerator (#1021)
* fix: reserved keywords in Rust should be case-sensitive (#1031)
* fix: pattern properties not being accounted for (#1006)
* fix: csharp generator does not render optional types for optional properties (#1051)
* fix: polymorphic / union models rendered with index in enum member name (#1056)
* fix: add Jackson annotations at the field level (#1059)
* fix: improve integration with old AsyncAPI parser (#1050)
* fix: add Java constraints annotations at the field level (#1067)
* fix: java generator could generate illegal package names (#1084)

### Other Changes
* docs: new core data model (#530)
* refactor: introduce new core models (#655)
* refactor: add CommonModel conversion to MetaModel (#677)
* refactor: add TypeScript constrainer (#683)
* refactor: add JavaScript constrainer (#693)
* refactor: add Go constrainer (#695)
* refactor: add splitter (#676)
* refactor: add C# constrainer (#696)
* refactor: add Java constrainer (#694)
* refactor: simplified constraints and type mapping (#725)
* refactor: convert CSharp to new constraint setup (#735)
* refactor: convert Go to new constraint setup (#732)
* refactor: convert TS to new constraint setup (#736)
* refactor: convert JS to new constraint setup (#741)
* refactor: add object property model (#758)
* chore: refactored model setup to support generators (#766)
* chore: refactored input processors (#767)
* chore: refactored TypeScript and generator implementation (#765)
* chore: refactored Java to new core model (#769)
* chore: refactored Go generator (#771)
* chore: refactored CSharp generator (#770)
* chore: refactored JavaScript generator  (#773)
* chore: refactored dart generator (#778)
* chore: fix build errors (#779)
* chore: fix file generator tests (#782)
* chore: add test and fix constrain implementation (#781)
* chore: fix wrongful import (#783)
* refactor: switch interpretation of pattern properties (#791)
* refactor: fix constrain helpers and add test (#792)
* chore: convert to any model from common model (#793)
* chore: remove old post interpreter and fix tests (#795)
* chore: fix TypeHelpers tests (#802)
* chore: fix generator and renderer tests (#803)
* chore: remove unnecessary common model test (#798)
* chore: remove name helpers (#801)
* chore: fix tests for OutputModel (#800)
* chore: give constrained properties access to the raw property (#799)
* chore: fix enum model conversion (#797)
* chore: fix contains property check failing (#810)
* chore: removed unused property and fix general tests (#809)
* chore: refactor dart generators and test (#796)
* chore: rewrite java generator tests (#804)
* chore: rewrite TypeScript generator tests (#806)
* chore: rewrite CSharp generator tests (#807)
* chore: rewrite javascript generator tests (#805)
* fix: remaining test and implementation issues (#824)
* docs: move banner location (#865)
* docs: update language documentation (#862)
* docs: add migration guidelines (#860)
* docs: update input processing documentation (#859)
* docs: update constraint documentation (#858)
* chore: remove unused functions (#849)
* docs: update usage documentation (#857)
* docs: update preset documentation (#861)
* refactor: simplified example tests (#868)
* chore: add a template for new generators (#850)
* docs: remove duplicate dart output (#892)
* test: update snapshot for failing test (#907)
* chore: add a new example for json-schema-draft4-from-object (#897)
* chore: add a new example for JSON schema draft 6 (#933)
* ci: use @swc/jest to speedup tests (#938)
* ci: fix broken release pipeline (#956)
* docs: add contribution guidelines for processors (#950)
* chore: add missing test dependency for docker (#992)
* docs: add contributing guidelines for presets (#990)
* docs: improve readme with use-cases and examples (#1034)
* chore: add missing blackbox scripts (#1046)
* docs: add versioning and maintenance section (#991)
* test: update snapshots (#1064)
* docs: fix the wrong link to constraint example (#1065)
* test: added example to generate all models within the same file (#1054)
* chore: added prettier config (#838)
* chore: format code (#1088)


Co-authored-by: Kenneth Aasan <k.aasan@sportradar.com>, Co-authored-by: Leigh Johnson <hi@leighjohnson.me>, Co-authored-by: Maciej Urbańczyk <urbanczyk.maciej.95@gmail.com>, Co-authored-by: Nitin Tejuja <95347924+nitintejuja@users.noreply.github.com>, Co-authored-by: Amit Kumar Sharma <ksamit1110@gmail.com>, Co-authored-by: artur-ciocanu <artur.ciocanu@gmail.com>, Co-authored-by: Andrey Zaytsev <zaytsevand@outlook.com>, Co-authored-by: Zbigniew Malcherczyk <zmalcherczyk@gmail.com>, Co-authored-by: Yushi OMOTE <yushiomote@gmail.com>, Co-authored-by: Alejandra Quetzalli  <alejandra.quetzalli@postman.com>, Co-authored-by: Artur Ciocanu <ciocanu@adobe.com>, Co-authored-by: Julian R <mail@julianrapp.de>, Co-authored-by: Anay Sarkar <53341181+anaysarkar7@users.noreply.github.com>, Co-authored-by: Louis Xhaferi <louis.xhaferi@gmx.de>, Co-authored-by: Akshat Nema <76521428+akshatnema@users.noreply.github.com>
jonaslagoni added a commit that referenced this pull request Jan 24, 2023
## [1.0.0](v0.59.9...v1.0.0) (2023-01-23)

### Upgrade Steps

You can find the migration details here: https://github.com/asyncapi/modelina/blob/master/docs/migration.md 

Dont hesitate to reach out if you need help migrating to version 1.

### Breaking Changes
There is no specific PR that contains the breaking changes but is part of multiple PRs. See the migration part above.

### New Features
* feat: add Rust Generator (#818)
* feat: add Kotlin model generator (#1074)
* feat: add Python generator (#863)
* feat: add jsonbinpack preset for TypeScript (#854)
* feat: add support for AsyncAPI 2.5 (#893)
* feat: add support for oneOf and anyOf as UnionModel (#899)
* feat: integrate new AsyncAPI parser version (#925)
* feat: add C# Newtonsoft preset (#970)
* feat: add access to entire property object in constrainer (#985)
* feat: add precise csharp enum type (#1047)
* feat: add dependency manager (#1063)

### Bug Fixes
* fix: unwrapping dictionaries not working in marshaling preset (#855)
* fix: import path of helpers in DartRenderer (#794)
* fix: modelina cannot be used in website environments (#843)
* fix: duplicate dependencies being rendered (#842)
* fix: inner references not being found (#844)
* fix: root level references are not handled for JSON Schema (#829)
* fix: wrong typescript number type used for integers (#902)
* fix: merging CommonModel properties should not carry over properties to other models (#917)
* fix: duplicate and self dependencies should not be rendered (#903)
* fix: python generates unusable class for empty properties (#901)
* fix: javascript should not split out enums (#926)
* fix: typescript marshaling preset not caring about external models (#927)
* fix: typescript rendering wrong array type when union (#928)
* fix: java dictionary constrainer gives unusable integer type for map value (#929)
* fix: remove unintended characters for typescript marshaling preset (#935)
* fix: enable processor options to be passed processors (#920)
* fix: references are getting incorrect model names (#951)
* fix: enum generator for Java should use strict types for it's values (#944)
* fix: implicit python import error (#981)
* fix: rust compile errors on enum members containing digits (#994)
* fix: add `exec` as a reserved keyword for Python (#1000)
* fix: c# newtonsoft preset syntax errors (#1004)
* fix: rust enum renderer only working for JSON Schema inputs (#1001)
* fix: dependencies are rendered twice (#1002)
* fix: rust impl new fn for Boxed values (#1013)
* fix: solving blackbox tests problems (#905)
* fix: structs missing pub keyword in RustGenerator (#1021)
* fix: reserved keywords in Rust should be case-sensitive (#1031)
* fix: pattern properties not being accounted for (#1006)
* fix: csharp generator does not render optional types for optional properties (#1051)
* fix: polymorphic / union models rendered with index in enum member name (#1056)
* fix: add Jackson annotations at the field level (#1059)
* fix: improve integration with old AsyncAPI parser (#1050)
* fix: add Java constraints annotations at the field level (#1067)
* fix: java generator could generate illegal package names (#1084)

### Other Changes
* docs: new core data model (#530)
* refactor: introduce new core models (#655)
* refactor: add CommonModel conversion to MetaModel (#677)
* refactor: add TypeScript constrainer (#683)
* refactor: add JavaScript constrainer (#693)
* refactor: add Go constrainer (#695)
* refactor: add splitter (#676)
* refactor: add C# constrainer (#696)
* refactor: add Java constrainer (#694)
* refactor: simplified constraints and type mapping (#725)
* refactor: convert CSharp to new constraint setup (#735)
* refactor: convert Go to new constraint setup (#732)
* refactor: convert TS to new constraint setup (#736)
* refactor: convert JS to new constraint setup (#741)
* refactor: add object property model (#758)
* chore: refactored model setup to support generators (#766)
* chore: refactored input processors (#767)
* chore: refactored TypeScript and generator implementation (#765)
* chore: refactored Java to new core model (#769)
* chore: refactored Go generator (#771)
* chore: refactored CSharp generator (#770)
* chore: refactored JavaScript generator  (#773)
* chore: refactored dart generator (#778)
* chore: fix build errors (#779)
* chore: fix file generator tests (#782)
* chore: add test and fix constrain implementation (#781)
* chore: fix wrongful import (#783)
* refactor: switch interpretation of pattern properties (#791)
* refactor: fix constrain helpers and add test (#792)
* chore: convert to any model from common model (#793)
* chore: remove old post interpreter and fix tests (#795)
* chore: fix TypeHelpers tests (#802)
* chore: fix generator and renderer tests (#803)
* chore: remove unnecessary common model test (#798)
* chore: remove name helpers (#801)
* chore: fix tests for OutputModel (#800)
* chore: give constrained properties access to the raw property (#799)
* chore: fix enum model conversion (#797)
* chore: fix contains property check failing (#810)
* chore: removed unused property and fix general tests (#809)
* chore: refactor dart generators and test (#796)
* chore: rewrite java generator tests (#804)
* chore: rewrite TypeScript generator tests (#806)
* chore: rewrite CSharp generator tests (#807)
* chore: rewrite javascript generator tests (#805)
* fix: remaining test and implementation issues (#824)
* docs: move banner location (#865)
* docs: update language documentation (#862)
* docs: add migration guidelines (#860)
* docs: update input processing documentation (#859)
* docs: update constraint documentation (#858)
* chore: remove unused functions (#849)
* docs: update usage documentation (#857)
* docs: update preset documentation (#861)
* refactor: simplified example tests (#868)
* chore: add a template for new generators (#850)
* docs: remove duplicate dart output (#892)
* test: update snapshot for failing test (#907)
* chore: add a new example for json-schema-draft4-from-object (#897)
* chore: add a new example for JSON schema draft 6 (#933)
* ci: use @swc/jest to speedup tests (#938)
* ci: fix broken release pipeline (#956)
* docs: add contribution guidelines for processors (#950)
* chore: add missing test dependency for docker (#992)
* docs: add contributing guidelines for presets (#990)
* docs: improve readme with use-cases and examples (#1034)
* chore: add missing blackbox scripts (#1046)
* docs: add versioning and maintenance section (#991)
* test: update snapshots (#1064)
* docs: fix the wrong link to constraint example (#1065)
* test: added example to generate all models within the same file (#1054)
* chore: added prettier config (#838)
* chore: format code (#1088)


Co-authored-by: Kenneth Aasan <k.aasan@sportradar.com>
Co-authored-by: Leigh Johnson <hi@leighjohnson.me>
Co-authored-by: Maciej Urbańczyk <urbanczyk.maciej.95@gmail.com>
Co-authored-by: Nitin Tejuja <95347924+nitintejuja@users.noreply.github.com>
Co-authored-by: Amit Kumar Sharma <ksamit1110@gmail.com>
Co-authored-by: artur-ciocanu <artur.ciocanu@gmail.com>
Co-authored-by: Andrey Zaytsev <zaytsevand@outlook.com>
Co-authored-by: Zbigniew Malcherczyk <zmalcherczyk@gmail.com>
Co-authored-by: Yushi OMOTE <yushiomote@gmail.com>
Co-authored-by: Alejandra Quetzalli  <alejandra.quetzalli@postman.com>
Co-authored-by: Artur Ciocanu <ciocanu@adobe.com>
Co-authored-by: Julian R <mail@julianrapp.de>
Co-authored-by: Anay Sarkar <53341181+anaysarkar7@users.noreply.github.com>
Co-authored-by: Louis Xhaferi <louis.xhaferi@gmx.de>
Co-authored-by: Akshat Nema <76521428+akshatnema@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants