From d45000e53b880fc715b86c225847ffeeec7437af Mon Sep 17 00:00:00 2001 From: Zhenya Zasko Date: Tue, 13 May 2025 13:12:23 +0300 Subject: [PATCH 1/3] update creation logic --- .gitignore | 1 + .idea/workspace.xml | 43 ++- build.gradle | 34 +- settings.gradle | 2 +- .../betterme/eventsdroid/EventsGenerator.kt | 310 +++++++++++------- .../eventsdroid/EventsGeneratorTask.kt | 5 +- .../eventsdroid/entities/AnalyticsEntities.kt | 18 - .../betterme/eventsdroid/entities/Event.kt | 7 - 8 files changed, 246 insertions(+), 174 deletions(-) delete mode 100644 src/main/kotlin/com/betterme/eventsdroid/entities/AnalyticsEntities.kt delete mode 100644 src/main/kotlin/com/betterme/eventsdroid/entities/Event.kt diff --git a/.gitignore b/.gitignore index 1cfa470..7715aab 100644 --- a/.gitignore +++ b/.gitignore @@ -2,3 +2,4 @@ out/ build/ .gradle/ /.idea/ +local.properties diff --git a/.idea/workspace.xml b/.idea/workspace.xml index 7eea8da..c4ebf0e 100644 --- a/.idea/workspace.xml +++ b/.idea/workspace.xml @@ -10,10 +10,15 @@ + - + + + + + @@ -598,7 +617,7 @@ - + + + + + + + true + true + false + false + + + + + + + + true + true + false + false + + + + + + + + diff --git a/build.gradle b/build.gradle index 9dd561e..a49664c 100644 --- a/build.gradle +++ b/build.gradle @@ -1,5 +1,5 @@ plugins { - id 'org.jetbrains.kotlin.jvm' version '1.9.22' + id 'org.jetbrains.kotlin.jvm' version '2.1.20' id 'java-gradle-plugin' id "com.gradle.plugin-publish" version '1.2.1' id("maven-publish") @@ -13,8 +13,8 @@ dependencies { compileOnly gradleApi() // Kotlin - implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.9.22" - implementation "com.squareup:kotlinpoet:1.0.0-RC1" + implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8:2.1.20" + implementation "com.squareup:kotlinpoet:2.1.0" // JSON Parsing implementation "com.google.code.gson:gson:2.8.2" @@ -24,7 +24,7 @@ gradlePlugin { plugins { eventsGenerator { id = 'com.appsci.words.eventsdroid' - implementationClass = 'com.betterme.eventsdroid.EventsGeneratorPlugin' + implementationClass = 'com.appsci.words.eventsdroid.EventsGeneratorPlugin' } } } @@ -33,7 +33,7 @@ Properties properties = new Properties() properties.load(project.rootProject.file('local.properties').newDataInputStream()) group = "com.appsci.words" -version = "0.9.4" +version = "1.0.0-alpha11" publishing { repositories { @@ -48,6 +48,11 @@ publishing { } } +java { + sourceCompatibility = JavaVersion.VERSION_17 + targetCompatibility = JavaVersion.VERSION_17 +} + compileKotlin { kotlinOptions.jvmTarget = "17" } diff --git a/local.properties b/local.properties deleted file mode 100644 index 442337d..0000000 --- a/local.properties +++ /dev/null @@ -1,8 +0,0 @@ -## This file must *NOT* be checked into Version Control Systems, -# as it contains information specific to your local configuration. -# -# Location of the SDK. This is only used by Gradle. -# For customization when using a Version Control System, please read the -# header note. -#Tue Jan 28 12:33:35 EET 2025 -sdk.dir=/Users/yevhenii.zasko/Library/Android/sdk diff --git a/src/main/kotlin/com/betterme/eventsdroid/EventsGenerator.kt b/src/main/kotlin/com/appsci/words/eventsdroid/EventsGenerator.kt similarity index 90% rename from src/main/kotlin/com/betterme/eventsdroid/EventsGenerator.kt rename to src/main/kotlin/com/appsci/words/eventsdroid/EventsGenerator.kt index 03ded34..eb52843 100644 --- a/src/main/kotlin/com/betterme/eventsdroid/EventsGenerator.kt +++ b/src/main/kotlin/com/appsci/words/eventsdroid/EventsGenerator.kt @@ -1,4 +1,4 @@ -package com.betterme.eventsdroid +package com.appsci.words.eventsdroid import com.squareup.kotlinpoet.* import com.squareup.kotlinpoet.ParameterizedTypeName.Companion.parameterizedBy @@ -39,7 +39,7 @@ class EventsGenerator( .map { it.split(",(?=([^\"]*\"[^\"]*\")*[^\"]*$)".toRegex()) } // split by a cleaver regexp .filter { // category and name are mandatory - !it.getOrNull(1).isNullOrBlank() && !it.getOrNull(2).isNullOrBlank() + !it.getOrNull(0).isNullOrBlank() && !it.getOrNull(2).isNullOrBlank() } .groupBy { it.first() } .map { eventGroup -> @@ -51,12 +51,15 @@ class EventsGenerator( val eventParams = events .drop(4) - .windowed(2) // take pairs of parameters - .mapNotNull { (name, description) -> + .chunked(2) // take pairs of parameters + .mapNotNull { pair -> + val name = pair[0] + val description = pair.getOrNull(1) + val paramName = name.trim() if (paramName.isNotBlank()) { val isNullable = paramName.last() == '?' - val paramDescription = description.trim().takeIf { it.isNotBlank() } + val paramDescription = description?.trim()?.takeIf { it.isNotBlank() } Parameter( name = paramName.trimEnd('?'), @@ -87,6 +90,7 @@ class EventsGenerator( val eventGroups = parseCsvFile(schemaFile) eventGroups.forEach { eventGroup -> + var hasNullableParams = false val categoryName = eventGroup.name val formattedClassName = getFormattedEventSetClassName(categoryName) @@ -96,8 +100,8 @@ class EventsGenerator( val eventNames = mutableListOf() eventGroup.events.forEach { event -> - val eventName = event.customClassName ?: event.name - var eventClassName = getFormattedEventClassName(eventName) + val eventName = event.name + var eventClassName = getFormattedEventClassName(event.customClassName ?: event.name) val duplicateCount = eventNames.count { it == eventClassName } if (duplicateCount > 0) { @@ -106,6 +110,7 @@ class EventsGenerator( eventNames.add(eventClassName) val parameters = event.parameters + hasNullableParams = hasNullableParams || parameters.any { it.nullable } if (parameters.isEmpty()) { // Otherwise, plain Event object with empty custom parameters map will be @@ -132,11 +137,15 @@ class EventsGenerator( } } + val generalPackageName = packageName val eventsFile = FileSpec .builder( packageName = "$packageName.${categoryName.lowercase()}", fileName = "$className" ) + .apply { + if (hasNullableParams) addImport(generalPackageName, "orNone") + } .addType(rootObjectBuilder.build()) .build() eventsFile.writeTo(destFilePath) @@ -181,7 +190,7 @@ class EventsGenerator( } val defaultValueFunction = FunSpec.builder("orNone") - .receiver(String::class.asTypeName().asNullable()) + .receiver(String::class.asTypeName().copy(nullable = true)) .addStatement("return this ?: \"none\"") .returns(String::class) @@ -203,7 +212,7 @@ class EventsGenerator( return eventObjectBuilder .apply { - if (description != null) addKdoc("%L", description) + if (description != null) addKdoc("%L\n", description) } .superclass(ClassName(packageName, BASE_EVENT_CLASS_NAME)) .addSuperclassConstructorParameter("%S", categoryName) @@ -234,18 +243,13 @@ class EventsGenerator( val formattedParamName = getFormattedParameterName(field.name) // Add custom parameter to event constructor's signature. - customParamsConstructorBuilder.addParameter(formattedParamName, String::class) + val type = String::class.asTypeName().copy(nullable = field.nullable) + customParamsConstructorBuilder.addParameter(formattedParamName, type) // Provide specification for this custom parameter. - val type = if (field.nullable) { - String::class.asTypeName().asNullable() - } else { - String::class.asTypeName().asNonNullable() - } - val eventParamSpec = PropertySpec.builder(formattedParamName, type) .apply { - if (field.description != null) addKdoc("%L", field.description) + if (field.description != null) addKdoc("%L\n", field.description) } .initializer(formattedParamName) .build() @@ -266,7 +270,7 @@ class EventsGenerator( return eventDataClassBuilder .apply { - if (description != null) addKdoc("%L", description) + if (description != null) addKdoc("%L\n", description) } .addModifiers(KModifier.DATA) .primaryConstructor(customParamsConstructorBuilder.build()) diff --git a/src/main/kotlin/com/betterme/eventsdroid/EventsGeneratorExtension.kt b/src/main/kotlin/com/appsci/words/eventsdroid/EventsGeneratorExtension.kt similarity index 92% rename from src/main/kotlin/com/betterme/eventsdroid/EventsGeneratorExtension.kt rename to src/main/kotlin/com/appsci/words/eventsdroid/EventsGeneratorExtension.kt index dfb9ba8..e13706f 100644 --- a/src/main/kotlin/com/betterme/eventsdroid/EventsGeneratorExtension.kt +++ b/src/main/kotlin/com/appsci/words/eventsdroid/EventsGeneratorExtension.kt @@ -1,4 +1,4 @@ -package com.betterme.eventsdroid +package com.appsci.words.eventsdroid import org.gradle.api.Project import org.gradle.api.provider.Property diff --git a/src/main/kotlin/com/betterme/eventsdroid/EventsGeneratorPlugin.kt b/src/main/kotlin/com/appsci/words/eventsdroid/EventsGeneratorPlugin.kt similarity index 86% rename from src/main/kotlin/com/betterme/eventsdroid/EventsGeneratorPlugin.kt rename to src/main/kotlin/com/appsci/words/eventsdroid/EventsGeneratorPlugin.kt index 90985ec..01b6250 100644 --- a/src/main/kotlin/com/betterme/eventsdroid/EventsGeneratorPlugin.kt +++ b/src/main/kotlin/com/appsci/words/eventsdroid/EventsGeneratorPlugin.kt @@ -1,4 +1,4 @@ -package com.betterme.eventsdroid +package com.appsci.words.eventsdroid import org.gradle.api.Plugin import org.gradle.api.Project diff --git a/src/main/kotlin/com/betterme/eventsdroid/EventsGeneratorTask.kt b/src/main/kotlin/com/appsci/words/eventsdroid/EventsGeneratorTask.kt similarity index 95% rename from src/main/kotlin/com/betterme/eventsdroid/EventsGeneratorTask.kt rename to src/main/kotlin/com/appsci/words/eventsdroid/EventsGeneratorTask.kt index 673c33e..0f1a367 100644 --- a/src/main/kotlin/com/betterme/eventsdroid/EventsGeneratorTask.kt +++ b/src/main/kotlin/com/appsci/words/eventsdroid/EventsGeneratorTask.kt @@ -1,4 +1,4 @@ -package com.betterme.eventsdroid +package com.appsci.words.eventsdroid import org.gradle.api.DefaultTask import org.gradle.api.tasks.Input diff --git a/src/main/resources/com.betterme.eventsdroid.properties b/src/main/resources/com.betterme.eventsdroid.properties index 97b06e1..a3db2aa 100644 --- a/src/main/resources/com.betterme.eventsdroid.properties +++ b/src/main/resources/com.betterme.eventsdroid.properties @@ -1 +1 @@ -implementation-class=com.betterme.eventsdroid.EventsGeneratorPlugin \ No newline at end of file +implementation-class=com.appsci.words.eventsdroid.EventsGeneratorPlugin \ No newline at end of file From 3b43ddecaff6f1d6f6d1d28bd06060cda3da56be Mon Sep 17 00:00:00 2001 From: Zhenya Zasko Date: Tue, 13 May 2025 18:31:44 +0300 Subject: [PATCH 3/3] remove deps --- .idea/workspace.xml | 18 ++++++++++++------ build.gradle | 3 --- ...=> com.appsci.words.eventsdroid.properties} | 0 3 files changed, 12 insertions(+), 9 deletions(-) rename src/main/resources/{com.betterme.eventsdroid.properties => com.appsci.words.eventsdroid.properties} (100%) diff --git a/.idea/workspace.xml b/.idea/workspace.xml index 77f2155..0c647b5 100644 --- a/.idea/workspace.xml +++ b/.idea/workspace.xml @@ -12,12 +12,7 @@ - - - - - - + + + +