feature incremental api generator, small fix string generator #26

Open
sergey.vlasenko wants to merge 4 commits from incremental_api_generator into feature/MB-43110_incremental_api_generator

[Android] Инкрементальная генерация моделей API

Сделал инкрементальной генерацию моделей апи.
Общий механизм такой: запускается таска apiGenerator (класс ApiGeneratorTask), которая на вход получает список изменений в директории спеки апи (см. доку грейдл).
Если файл в спеке апи был удалён, то ищется его джава/котлин класс и удаляется тоже. Все изменённые файлы сохраняются в список. Этот список передаётся в ApiModelsDependencyResolver.getDependenciesFromFiles, который возвращает список всех зависимостей (файлов) для переданного списка моделей. Происходит это с помощью FileParser().getAllTypeNamesFromJson, который из файла получает список используемых в модели названий типов, которые затем и ищутся в спеке апи.
Затем общий список файлов (изменнёных и их зависимостей) копируется во временную директорию, которая и передаётся в апи генератор.

[[Android] Инкрементальная генерация моделей API](https://jira.lan.ubrr.ru/browse/MB-42563) Сделал инкрементальной генерацию моделей апи. Общий механизм такой: запускается таска `apiGenerator` (класс `ApiGeneratorTask`), которая на вход получает список изменений в директории спеки апи (см. [доку грейдл](https://docs.gradle.org/current/userguide/incremental_build.html)). Если файл в спеке апи был удалён, то ищется его джава/котлин класс и удаляется тоже. Все изменённые файлы сохраняются в список. Этот список передаётся в `ApiModelsDependencyResolver.getDependenciesFromFiles`, который возвращает список всех зависимостей (файлов) для переданного списка моделей. Происходит это с помощью `FileParser().getAllTypeNamesFromJson`, который из файла получает список используемых в модели названий типов, которые затем и ищутся в спеке апи. Затем общий список файлов (изменнёных и их зависимостей) копируется во временную директорию, которая и передаётся в апи генератор.
sergey.vlasenko added 1 commit 2024-04-02 16:57:25 +03:00
sergey.vlasenko added 1 commit 2024-04-02 16:59:22 +03:00
3d4ada6bbf Merge branch 'feature/java_17_support' of https://git.svc.touchin.ru/TouchInstinct/BuildScripts into incremental_api_generator
# Conflicts:
#	gradle/plugins/src/main/java/apigen/ApiGeneratorPlugin.kt
#	gradle/scripts/stringGenerator.gradle
sergey.vlasenko added 1 commit 2024-04-02 18:07:49 +03:00
sergey.vlasenko reviewed 2024-04-02 18:08:43 +03:00
@ -0,0 +50,4 @@
val value = jsonEntry.value
val newTypes: Set<String> = when {
(value as? Collection<Map<String, Any?>>) != null -> {
Author
Member

Из-за дженерика обычный приведение типов через is не работает

Из-за дженерика обычный приведение типов через `is` не работает
sergey.vlasenko added 1 commit 2024-04-02 18:13:36 +03:00
bogdan.terehov reviewed 2024-04-17 15:13:24 +03:00
@ -0,0 +94,4 @@
inputChanges.getFileChanges(inputFiles)
.filter { it.fileType == FileType.FILE }
.forEach { change ->
Member

change ->

file ->

change -> file ->
bogdan.terehov reviewed 2024-04-17 15:16:07 +03:00
@ -0,0 +16,4 @@
private val fileParser: FileParser
) {
// Мапа для хранения и быстрого поиска типа модельки по файлам, т.к. не всегда имя файла совпадает с типом модельки.
Member

c -- у тебя на латинице

c -- у тебя на латинице
bogdan.terehov reviewed 2024-04-17 15:17:26 +03:00
@ -0,0 +65,4 @@
foundDependencies
} else {
foundDependencies + newDependencies
}
Member

files.fold(files) { foundDependencies, file ->
val newDependencies = getFileDependencies(file)

        if (newDependencies.isEmpty()) {
            foundDependencies
        } else {
            foundDependencies + newDependencies
        }

такой же код есть в getDependenciesFromFiles

files.fold(files) { foundDependencies, file -> val newDependencies = getFileDependencies(file) if (newDependencies.isEmpty()) { foundDependencies } else { foundDependencies + newDependencies } такой же код есть в getDependenciesFromFiles
bogdan.terehov reviewed 2024-04-17 15:19:33 +03:00
@ -0,0 +68,4 @@
foundTypes
} else {
foundTypes + newTypes
}
Member

а зачем вообще конструкция
if (newTypes.isEmpty()) {
foundTypes
} else {
foundTypes + newTypes
}

если newTypes пустой, то foundTypes + newTypes как раз будет равен foundTypes
Разве нет?

а зачем вообще конструкция if (newTypes.isEmpty()) { foundTypes } else { foundTypes + newTypes } если newTypes пустой, то foundTypes + newTypes как раз будет равен foundTypes Разве нет?
bogdan.terehov reviewed 2024-04-17 15:20:17 +03:00
@ -0,0 +90,4 @@
}
is MapType -> {
newTypeNames.addAll(type.getSubTypeNames())
Member

во всех остальных случая дубль кода

во всех остальных случая дубль кода
This pull request can be merged automatically.
You are not authorized to merge this pull request.
You can also view command line instructions.

Step 1:

From your project repository, check out a new branch and test the changes.
git checkout -b incremental_api_generator feature/MB-43110_incremental_api_generator
git pull origin incremental_api_generator

Step 2:

Merge the changes and update on Gitea.
git checkout feature/MB-43110_incremental_api_generator
git merge --no-ff incremental_api_generator
git push origin feature/MB-43110_incremental_api_generator
Sign in to join this conversation.
No reviewers
No Label
No Milestone
No project
No Assignees
2 Participants
Notifications
Due Date
The due date is invalid or out of range. Please use the format 'yyyy-mm-dd'.

No due date set.

Dependencies

No dependencies set.

Reference: TouchInstinct/BuildScripts#26
No description provided.