From 18455bad35fd11b40281d5043a84ddd977b42c82 Mon Sep 17 00:00:00 2001 From: Mohamed Hamdan Date: Sun, 11 Nov 2018 09:37:36 +0200 Subject: [PATCH] Handle multiple embedded and add override to fields name --- annotations/gradle.properties | 2 +- .../winanalytics/annotations/Analytics.kt | 2 +- .../annotations/AnalyticsEmbedded.kt | 2 +- compiler/gradle.properties | 2 +- .../compiler/AnnotationParsingUtils.kt | 4 +-- .../winanalytics/compiler/BindingFactory.kt | 27 +++++++++------ .../compiler/CodeGenerationUtils.kt | 33 ++++++++++++++++--- .../winanalytics/compiler/ElementUtils.kt | 26 +++++++++++++-- .../winanalytics/compiler/MethodsUtil.kt | 2 +- .../winanalytics/compiler/StringUtils.kt | 19 +++++++++++ .../winanalytics/compiler/models/FieldData.kt | 11 +++++-- .../compiler/types/AnalyticsType.kt | 26 +++++++-------- .../compiler/types/ConfigurationType.kt | 2 +- .../winfooz/winanalytics/sample/Address.kt | 15 --------- .../winanalytics/sample/MainActivity.kt | 18 +--------- .../com/winfooz/winanalytics/sample/Model1.kt | 25 ++++++++++++++ .../com/winfooz/winanalytics/sample/Model2.kt | 28 ++++++++++++++++ .../com/winfooz/winanalytics/sample/Model3.kt | 17 +++++----- .../com/winfooz/winanalytics/sample/Model4.kt | 12 +++---- .../com/winfooz/winanalytics/sample/Str.java | 14 -------- .../com/winfooz/winanalytics/sample/User.kt | 25 -------------- winanalytics/gradle.properties | 2 +- 22 files changed, 188 insertions(+), 126 deletions(-) create mode 100644 compiler/src/main/java/com/winfooz/winanalytics/compiler/StringUtils.kt delete mode 100644 sample/src/main/java/com/winfooz/winanalytics/sample/Address.kt create mode 100644 sample/src/main/java/com/winfooz/winanalytics/sample/Model1.kt create mode 100644 sample/src/main/java/com/winfooz/winanalytics/sample/Model2.kt delete mode 100644 sample/src/main/java/com/winfooz/winanalytics/sample/Str.java delete mode 100644 sample/src/main/java/com/winfooz/winanalytics/sample/User.kt diff --git a/annotations/gradle.properties b/annotations/gradle.properties index 2ade67b..a2e102b 100644 --- a/annotations/gradle.properties +++ b/annotations/gradle.properties @@ -3,4 +3,4 @@ POM_DESCRIPTION=Annotations for use in your project POM_BINTRAY_NAME=com.winfooz.winanalytics:annotations POM_ARTIFACT_ID=annotations POM_PACKAGING=jar -POM_VERSION=1.0.5-beta +POM_VERSION=1.0.6-beta diff --git a/annotations/src/main/java/com/winfooz/winanalytics/annotations/Analytics.kt b/annotations/src/main/java/com/winfooz/winanalytics/annotations/Analytics.kt index 0fe737b..5871316 100644 --- a/annotations/src/main/java/com/winfooz/winanalytics/annotations/Analytics.kt +++ b/annotations/src/main/java/com/winfooz/winanalytics/annotations/Analytics.kt @@ -5,4 +5,4 @@ package com.winfooz.winanalytics.annotations */ @Target(AnnotationTarget.FIELD) @Retention(AnnotationRetention.RUNTIME) -annotation class Analytics(vararg val value: Event) +annotation class Analytics(val value: String, vararg val events: Event) diff --git a/annotations/src/main/java/com/winfooz/winanalytics/annotations/AnalyticsEmbedded.kt b/annotations/src/main/java/com/winfooz/winanalytics/annotations/AnalyticsEmbedded.kt index a23f05d..5112476 100644 --- a/annotations/src/main/java/com/winfooz/winanalytics/annotations/AnalyticsEmbedded.kt +++ b/annotations/src/main/java/com/winfooz/winanalytics/annotations/AnalyticsEmbedded.kt @@ -5,4 +5,4 @@ package com.winfooz.winanalytics.annotations */ @Target(AnnotationTarget.FIELD) @Retention(AnnotationRetention.RUNTIME) -annotation class AnalyticsEmbedded \ No newline at end of file +annotation class AnalyticsEmbedded(val override: String = "") \ No newline at end of file diff --git a/compiler/gradle.properties b/compiler/gradle.properties index 3eaa973..75a9b88 100644 --- a/compiler/gradle.properties +++ b/compiler/gradle.properties @@ -3,4 +3,4 @@ POM_DESCRIPTION=For proccess annotations and generate code POM_BINTRAY_NAME=com.winfooz.winanalytics:compiler POM_ARTIFACT_ID=compiler POM_PACKAGING=jar -POM_VERSION=1.0.5-beta +POM_VERSION=1.0.6-beta diff --git a/compiler/src/main/java/com/winfooz/winanalytics/compiler/AnnotationParsingUtils.kt b/compiler/src/main/java/com/winfooz/winanalytics/compiler/AnnotationParsingUtils.kt index 586ebf5..a863608 100644 --- a/compiler/src/main/java/com/winfooz/winanalytics/compiler/AnnotationParsingUtils.kt +++ b/compiler/src/main/java/com/winfooz/winanalytics/compiler/AnnotationParsingUtils.kt @@ -77,7 +77,7 @@ object AnnotationParsingUtils { if (element.enclosingElement is TypeElement) { val analytics = element.getAnnotation(Analytics::class.java) if (Validator.validate(element, processingEnv, analytics)) { - annotationsSet.add(ElementUtils.parseAnnotationData(processingEnv, element, analytics)) + annotationsSet.add(ElementUtils.parseAnalyticsAnnotationData(processingEnv, element, analytics)) } else { MessagerUtils.analyticsError(processingEnv.messager, element, Analytics::class.java) } @@ -100,7 +100,7 @@ object AnnotationParsingUtils { if (element.enclosingElement is TypeElement) { val analyticsEmbedded = element.getAnnotation(AnalyticsEmbedded::class.java) if (Validator.validate(element, processingEnv, analyticsEmbedded)) { - annotationsSet.add(ElementUtils.parseAnnotationData(processingEnv, element, analyticsEmbedded)) + annotationsSet.add(ElementUtils.parseAnalyticsEmbeddedAnnotationData(processingEnv, element, analyticsEmbedded)) } else { MessagerUtils.embeddedError(processingEnv.messager, element, AnalyticsEmbedded::class.java) } diff --git a/compiler/src/main/java/com/winfooz/winanalytics/compiler/BindingFactory.kt b/compiler/src/main/java/com/winfooz/winanalytics/compiler/BindingFactory.kt index 2fb4a47..80ccae3 100644 --- a/compiler/src/main/java/com/winfooz/winanalytics/compiler/BindingFactory.kt +++ b/compiler/src/main/java/com/winfooz/winanalytics/compiler/BindingFactory.kt @@ -19,23 +19,30 @@ object BindingFactory { * @param classBuilder The analytics class. * @param pkg The package that contains class which has class fields annotated with [Analytics] * annotation for import class in the generated analytics class. - * @param className The class name for add it as parameter for every generated method. + * @param className The class reference for add it as parameter for every generated method. * @param methods The methods which need to be generated inside [classBuilder]. * @param configurationData The configuration for enable or disable multiple client generation. * * @see AnalyticsType */ fun bindAnalytics(classBuilder: TypeSpec.Builder, pkg: String, className: String, - methods: MutableMap>, + methods: MutableMap>>>, configurationData: Configuration) { methods.keys.forEach { key -> val function = FunSpec.builder(MethodsUtil.getAnalyticsMethod(key)) function.addParameter("instance", ClassName(pkg, className)) if (isFirebaseMethod(key) || isFabricMethod(key) || isMixpanelMethod(key)) { - function.addStatement("val pair: Pair<%T, %N<%T, %T>> = %T(%S, %N)", String::class, "MutableMap", String::class, String::class, Pair::class, getEventName(key), "mutableMapOf()") - methods[key]?.forEach { - val index = it.indexOf(".") - function.addStatement("%N.%N.%N(%S, %N)", "pair", "second", "put", it.substring(if (index > -1) index + 1 else 0), "instance.$it.toString()") + function.addStatement( + "val pair: Pair<%T, %N<%T, %T>> = %T(%S, %N)", + String::class, + "MutableMap", + String::class, + String::class, + Pair::class, methods[key]?.first ?: "", + "mutableMapOf()" + ) + methods[key]?.second?.forEach { + function.addStatement("%N.%N.%N(%S, %N)", "pair", "second", "put", it.first, "instance.${it.second}.toString()") } if (isFirebaseMethod(key)) { function.addStatement("%N.log(%N)", FIREBASE_PREFIX.toLowerCase(), "pair") @@ -103,8 +110,8 @@ object BindingFactory { * @param typeSpec the [ConfigurationType]. * @param pkg The package that contains class which has class fields annotated with [Analytics] * annotation for import class in the generated analytics class. - * @param className The class name for know which class in the [pkg] need to import. - * @param name The field name + * @param className The class reference for know which class in the [pkg] need to import. + * @param name The field reference * @param configuration The configuration for enable or disable multiple client generation. */ fun bindAnalyticsConfigurationAnalyticsObjects(typeSpec: TypeSpec.Builder, pkg: String, name: String, className: String, configuration: Configuration) { @@ -137,7 +144,7 @@ object BindingFactory { * For add supported and enabled client to the Analytics class * * @param typeSpec the [ConfigurationType]. - * @param name The client name + * @param name The client reference * @param className The client class path for import. */ private fun addClient(typeSpec: TypeSpec.Builder, name: String, key: String, className: ClassName) { @@ -172,7 +179,7 @@ object BindingFactory { private fun isMixpanelMethod(key: String): Boolean = MethodsUtil.getAnalyticsMethod(key).contains(MIXPANEL_PREFIX, true) /** - * For remove clients names from the method name + * For remove clients names from the method reference */ private fun getEventName(key: String): String = key.replace(FIREBASE_PREFIX, "", true) .replace(MIXPANEL_PREFIX, "", true) diff --git a/compiler/src/main/java/com/winfooz/winanalytics/compiler/CodeGenerationUtils.kt b/compiler/src/main/java/com/winfooz/winanalytics/compiler/CodeGenerationUtils.kt index 7798806..f30ed2c 100644 --- a/compiler/src/main/java/com/winfooz/winanalytics/compiler/CodeGenerationUtils.kt +++ b/compiler/src/main/java/com/winfooz/winanalytics/compiler/CodeGenerationUtils.kt @@ -94,18 +94,43 @@ class CodeGenerationUtils { typeHelper = AnalyticsType(processingEnv, data.pkgName, data.className, configuration, configurationType) classesMap[data.className] = typeHelper } + parseEmbedded(typeHelper, processingEnv, data) + } + + private fun parseEmbedded(typeHelper: AnalyticsType?, processingEnv: ProcessingEnvironment, data: FieldData) { val elementMembers = processingEnv.elementUtils.getAllMembers((data.element.asType() as DeclaredType).asElement() as TypeElement) val elementMethods = ElementFilter.fieldsIn(elementMembers) - elementMethods?.forEach { + elementMethods?.forEach { it -> if (it.getAnnotation(Analytics::class.java) != null) { + val annotation = it.getAnnotation(Analytics::class.java) + val embedded = data.type as? AnalyticsEmbedded? + var value = annotation.value + if (embedded?.override?.isNotEmpty() == true) { + val overrides = embedded.override.split(",") + overrides.forEach { + if (it.split(":")[0].trim() == annotation.value.trim()) { + value = it.split(":")[1].trim() + } + } + } val newData = FieldData( data.element, data.pkgName, data.className, - data.name + "?." + it.simpleName.toString(), - it.getAnnotation(Analytics::class.java) + data.reference + "?." + it.simpleName.toString(), + annotation, + value + ) + typeHelper?.addStatement(newData) + } else if (it.getAnnotation(AnalyticsEmbedded::class.java) != null) { + val newData = FieldData( + it, + data.pkgName, + data.className, + data.reference + "?." + it.simpleName.toString(), + it.getAnnotation(AnalyticsEmbedded::class.java) ) - typeHelper.addStatement(newData) + parseEmbedded(typeHelper, processingEnv, newData) } } } diff --git a/compiler/src/main/java/com/winfooz/winanalytics/compiler/ElementUtils.kt b/compiler/src/main/java/com/winfooz/winanalytics/compiler/ElementUtils.kt index e7801a3..7d460e8 100644 --- a/compiler/src/main/java/com/winfooz/winanalytics/compiler/ElementUtils.kt +++ b/compiler/src/main/java/com/winfooz/winanalytics/compiler/ElementUtils.kt @@ -19,7 +19,7 @@ object ElementUtils { * * @return [FieldData] that contains the annotation values and other information about element. */ - fun parseAnnotationData(processingEnv: ProcessingEnvironment, element: Element, type: Annotation): FieldData { + fun parseAnalyticsAnnotationData(processingEnv: ProcessingEnvironment, element: Element, type: Annotation): FieldData { val enclosingElement = element.enclosingElement as TypeElement val pkg = processingEnv.elementUtils.getPackageOf(element).toString() return FieldData( @@ -27,7 +27,29 @@ object ElementUtils { pkg, enclosingElement.qualifiedName.toString().substring(pkg.length + 1), element.simpleName.toString(), - type + type, + (type as Analytics).value + ) + } + + /** + * @param processingEnv for use processing utils like messager for log errors or warnings + * or use filer to create kotlin or java files etc... + * @param element The element that annotated with [Analytics] or [AnalyticsEmbedded] + * @param type [AnalyticsEmbedded] or [Analytics] + * + * @return [FieldData] that contains the annotation values and other information about element. + */ + fun parseAnalyticsEmbeddedAnnotationData(processingEnv: ProcessingEnvironment, element: Element, type: Annotation): FieldData { + val enclosingElement = element.enclosingElement as TypeElement + val pkg = processingEnv.elementUtils.getPackageOf(element).toString() + return FieldData( + element, + pkg, + enclosingElement.qualifiedName.toString().substring(pkg.length + 1), + element.simpleName.toString(), + type, + "" ) } diff --git a/compiler/src/main/java/com/winfooz/winanalytics/compiler/MethodsUtil.kt b/compiler/src/main/java/com/winfooz/winanalytics/compiler/MethodsUtil.kt index 954da45..addfc37 100644 --- a/compiler/src/main/java/com/winfooz/winanalytics/compiler/MethodsUtil.kt +++ b/compiler/src/main/java/com/winfooz/winanalytics/compiler/MethodsUtil.kt @@ -3,7 +3,7 @@ package com.winfooz.winanalytics.compiler object MethodsUtil { /** - * For get method name + Event suffix based on [methodName] + * For get method reference + Event suffix based on [methodName] */ fun getAnalyticsMethod(methodName: String): String { return methodName[0].toLowerCase() + methodName.substring(1) + "Event" diff --git a/compiler/src/main/java/com/winfooz/winanalytics/compiler/StringUtils.kt b/compiler/src/main/java/com/winfooz/winanalytics/compiler/StringUtils.kt new file mode 100644 index 0000000..9e5bd2c --- /dev/null +++ b/compiler/src/main/java/com/winfooz/winanalytics/compiler/StringUtils.kt @@ -0,0 +1,19 @@ +package com.winfooz.winanalytics.compiler + +/** + * Project: WinAnalytics + * Created: November 09, 2018 + * + * @author Mohamed Hamdan + */ +fun String.toCamelCase(): String { + val parts = split(" ") + var camelCaseString = "" + parts.forEach { + camelCaseString += it.toProperCase() + } + camelCaseString = "${camelCaseString.first().toLowerCase()}${camelCaseString.substring(1)}" + return camelCaseString +} + +fun String.toProperCase(): String = "${substring(0, 1).toUpperCase()}${substring(1).toLowerCase()}" \ No newline at end of file diff --git a/compiler/src/main/java/com/winfooz/winanalytics/compiler/models/FieldData.kt b/compiler/src/main/java/com/winfooz/winanalytics/compiler/models/FieldData.kt index 545613c..9a83b78 100644 --- a/compiler/src/main/java/com/winfooz/winanalytics/compiler/models/FieldData.kt +++ b/compiler/src/main/java/com/winfooz/winanalytics/compiler/models/FieldData.kt @@ -28,12 +28,17 @@ class FieldData( var className: String, /** - * Class field name that annotated with [Analytics] annotation + * Class field reference that annotated with [Analytics] annotation */ - var name: String, + var reference: String, /** * The [Analytics] annotation for read [Event] annotations. */ - var type: Annotation + var type: Annotation, + + /** + * For custom field name. + */ + var eventName: String = "" ) \ No newline at end of file diff --git a/compiler/src/main/java/com/winfooz/winanalytics/compiler/types/AnalyticsType.kt b/compiler/src/main/java/com/winfooz/winanalytics/compiler/types/AnalyticsType.kt index 5c684a7..ee7d776 100644 --- a/compiler/src/main/java/com/winfooz/winanalytics/compiler/types/AnalyticsType.kt +++ b/compiler/src/main/java/com/winfooz/winanalytics/compiler/types/AnalyticsType.kt @@ -15,9 +15,9 @@ import javax.annotation.processing.ProcessingEnvironment * or use filer to create kotlin or java files etc... * @param pkg The package that contains class which has class fields annotated with [Analytics] * annotation for generate class in the same package. - * @param className The class name for generate analytics class with same name + "_Analytics" suffix + * @param className The class reference for generate analytics class with same reference + "_Analytics" suffix * @param configuration This configuration for generate methods based on configurations. - * @param configurationType This type for generate class with name "Analytics" contains every + * @param configurationType This type for generate class with reference "Analytics" contains every * object of analytics classes. */ class AnalyticsType( @@ -31,7 +31,7 @@ class AnalyticsType( /** * Methods for generate every value method with multiple client support. */ - private val methods = mutableMapOf>() + private val methods = mutableMapOf>>>() /** * For add current analytics class object to Analytics class to use from everywhere @@ -70,11 +70,11 @@ class AnalyticsType( * @see Configuration.any */ override fun addStatement(data: FieldData) { - (data.type as Analytics).value.forEach { - addAnalyticsMethod(configuration.any(), it.value.toLowerCase(), data) - addAnalyticsMethod(configuration.firebaseEnabled, it.value.toLowerCase() + FIREBASE_PREFIX, data) - addAnalyticsMethod(configuration.fabricEnabled, it.value.toLowerCase() + FABRIC_PREFIX, data) - addAnalyticsMethod(configuration.mixPanelEnabled, it.value.toLowerCase() + MIXPANEL_PREFIX, data) + (data.type as Analytics).events.forEach { + addAnalyticsMethod(configuration.any(), it.value, it.value.toCamelCase(), data) + addAnalyticsMethod(configuration.firebaseEnabled, it.value, it.value.toCamelCase() + FIREBASE_PREFIX, data) + addAnalyticsMethod(configuration.fabricEnabled, it.value, it.value.toCamelCase() + FABRIC_PREFIX, data) + addAnalyticsMethod(configuration.mixPanelEnabled, it.value, it.value.toCamelCase() + MIXPANEL_PREFIX, data) } } @@ -102,15 +102,15 @@ class AnalyticsType( * object. * * @param enabled for check if clients enabled or not. - * @param name the method name + * @param name the method reference * @param data the class field for add to log value. */ - private fun addAnalyticsMethod(enabled: Boolean, name: String, data: FieldData) { + private fun addAnalyticsMethod(enabled: Boolean, event: String, name: String, data: FieldData) { if (enabled) { if (methods[name] == null) { - methods[name] = mutableListOf(data.name) + methods[name] = Pair(event, mutableListOf(Pair(data.eventName, data.reference))) } else { - methods[name]?.add(data.name) + methods[name]?.second?.add(Pair(data.eventName, data.reference)) } } } @@ -119,7 +119,7 @@ class AnalyticsType( * For add parameter to function based on [add] param * * @param add for check if can add parameter on not based on [configuration]. - * @param name the parameter name. + * @param name the parameter reference. * @param className the parameter value. * * @see FunSpec.Builder diff --git a/compiler/src/main/java/com/winfooz/winanalytics/compiler/types/ConfigurationType.kt b/compiler/src/main/java/com/winfooz/winanalytics/compiler/types/ConfigurationType.kt index 3f23595..f446000 100644 --- a/compiler/src/main/java/com/winfooz/winanalytics/compiler/types/ConfigurationType.kt +++ b/compiler/src/main/java/com/winfooz/winanalytics/compiler/types/ConfigurationType.kt @@ -9,7 +9,7 @@ import java.io.File import javax.annotation.processing.ProcessingEnvironment /** - * This type for generate class with name "Analytics" contains every object of analytics classes. + * This type for generate class with reference "Analytics" contains every object of analytics classes. * * @param processingEnv for use processing utils like messager for log errors or warnings * or use filer to create kotlin or java files etc... diff --git a/sample/src/main/java/com/winfooz/winanalytics/sample/Address.kt b/sample/src/main/java/com/winfooz/winanalytics/sample/Address.kt deleted file mode 100644 index e1dfb60..0000000 --- a/sample/src/main/java/com/winfooz/winanalytics/sample/Address.kt +++ /dev/null @@ -1,15 +0,0 @@ -package com.winfooz.winanalytics.sample - -import com.winfooz.winanalytics.annotations.Analytics -import com.winfooz.winanalytics.annotations.Event - -data class Address( - @Analytics(Event("Login")) - val address: String, - - @Analytics(Event("Login")) - val latitude: String, - - @Analytics(Event("Login")) - val longitude: String -) diff --git a/sample/src/main/java/com/winfooz/winanalytics/sample/MainActivity.kt b/sample/src/main/java/com/winfooz/winanalytics/sample/MainActivity.kt index 53f9b8f..3445e3a 100644 --- a/sample/src/main/java/com/winfooz/winanalytics/sample/MainActivity.kt +++ b/sample/src/main/java/com/winfooz/winanalytics/sample/MainActivity.kt @@ -1,34 +1,18 @@ package com.winfooz.winanalytics.sample -import android.support.v7.app.AppCompatActivity import android.os.Bundle +import android.support.v7.app.AppCompatActivity import android.view.View -import com.winfooz.winanalytics.annotations.AnalyticsEmbedded class MainActivity : AppCompatActivity() { - var user: User? = null - - @AnalyticsEmbedded - var userEmbedded: User? = null - - @AnalyticsEmbedded - var addressEmbedded: Address? = null - override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) - val address = Address("Address", "11.25454654", "10,45454654664") - addressEmbedded = Address("Address", "11.25454654", "10,45454654664") - - user = User("Name", "email@email.com", "123456789", 0, address) - userEmbedded = User("Name", "email@email.com", "123456789", 0, address) - findViewById(R.id.hello_world).setOnClickListener(this::onHelloWorldClicked) } private fun onHelloWorldClicked(view: View) { - Example.getInstance(applicationContext).mainActivityAnalytics.loginEvent(this) } } diff --git a/sample/src/main/java/com/winfooz/winanalytics/sample/Model1.kt b/sample/src/main/java/com/winfooz/winanalytics/sample/Model1.kt new file mode 100644 index 0000000..7dff27b --- /dev/null +++ b/sample/src/main/java/com/winfooz/winanalytics/sample/Model1.kt @@ -0,0 +1,25 @@ +package com.winfooz.winanalytics.sample + +import com.winfooz.winanalytics.annotations.Analytics +import com.winfooz.winanalytics.annotations.AnalyticsEmbedded +import com.winfooz.winanalytics.annotations.Event + +/** + * Project: WinAnalytics + * Created: November 08, 2018 + * + * @author Mohamed Hamdan + */ +data class Model1( + @Analytics("test1", events = [Event("Logout")]) + val test1: String?, + + @Analytics("test2", events = [Event("Logout")]) + val test2: String?, + + @Analytics("test3", events = [Event("Logout")]) + val test3: String?, + + @AnalyticsEmbedded(override = "test1:Name, test2:Email, test3:Id") + val model2: Model2? +) diff --git a/sample/src/main/java/com/winfooz/winanalytics/sample/Model2.kt b/sample/src/main/java/com/winfooz/winanalytics/sample/Model2.kt new file mode 100644 index 0000000..57d56a4 --- /dev/null +++ b/sample/src/main/java/com/winfooz/winanalytics/sample/Model2.kt @@ -0,0 +1,28 @@ +package com.winfooz.winanalytics.sample + +import com.winfooz.winanalytics.annotations.Analytics +import com.winfooz.winanalytics.annotations.AnalyticsEmbedded +import com.winfooz.winanalytics.annotations.Event + +/** + * Project: WinAnalytics + * Created: November 08, 2018 + * + * @author Mohamed Hamdan + */ +data class Model2( + @Analytics("test1", events = [Event("Logout_pressed")]) + val test: String?, + + @Analytics("test2", events = [Event("Logout pressed")]) + val test1: String?, + + @Analytics("test3", events = [Event("Login pressed")]) + val test2: String?, + + @Analytics("test13", events = [Event("Logout pressed")]) + val test13: String?, + + @AnalyticsEmbedded(override = "test4:Name, test5:Email, test6:Id") + val test3: Model3? +) diff --git a/sample/src/main/java/com/winfooz/winanalytics/sample/Model3.kt b/sample/src/main/java/com/winfooz/winanalytics/sample/Model3.kt index bdceb16..a10116d 100644 --- a/sample/src/main/java/com/winfooz/winanalytics/sample/Model3.kt +++ b/sample/src/main/java/com/winfooz/winanalytics/sample/Model3.kt @@ -1,18 +1,19 @@ package com.winfooz.winanalytics.sample import com.winfooz.winanalytics.annotations.Analytics +import com.winfooz.winanalytics.annotations.AnalyticsEmbedded import com.winfooz.winanalytics.annotations.Event data class Model3( - @Analytics(Event("HelloWorld")) - val name: String, + @Analytics("test4", events = [Event("Logout")]) + val test4: String?, - @Analytics(Event("Logout")) - val email: String, + @Analytics("test5", events = [Event("Logout")]) + val test5: String?, - @Analytics(Event("Logout")) - val phone: String, + @Analytics("test6", events = [Event("Logout")]) + val test6: String?, - @Analytics(Event("HelloWorld")) - val age: Int + @AnalyticsEmbedded(override = "test7:Name, test8:Email, test9:Id") + val test7: Model4? ) \ No newline at end of file diff --git a/sample/src/main/java/com/winfooz/winanalytics/sample/Model4.kt b/sample/src/main/java/com/winfooz/winanalytics/sample/Model4.kt index 69c86b2..9d75576 100644 --- a/sample/src/main/java/com/winfooz/winanalytics/sample/Model4.kt +++ b/sample/src/main/java/com/winfooz/winanalytics/sample/Model4.kt @@ -4,12 +4,12 @@ import com.winfooz.winanalytics.annotations.Analytics import com.winfooz.winanalytics.annotations.Event data class Model4( - @Analytics(Event("Logout")) - val address: String, + @Analytics("test7", events = [Event("Logout")]) + val test8: String?, - @Analytics(Event("Logout")) - val latitude: String, + @Analytics("test8", events = [Event("Logout")]) + val test9: String?, - @Analytics(Event("Logout")) - val longitude: String + @Analytics("test9", events = [Event("Logout")]) + val test10: String? ) diff --git a/sample/src/main/java/com/winfooz/winanalytics/sample/Str.java b/sample/src/main/java/com/winfooz/winanalytics/sample/Str.java deleted file mode 100644 index 9730d8c..0000000 --- a/sample/src/main/java/com/winfooz/winanalytics/sample/Str.java +++ /dev/null @@ -1,14 +0,0 @@ -package com.winfooz.winanalytics.sample; - -import com.winfooz.winanalytics.annotations.Analytics; -import com.winfooz.winanalytics.annotations.Event; - -public class Str { - - @Analytics({@Event("Mohamed")}) - private boolean mMohamed; - - public boolean getMMohamed() { - return false; - } -} diff --git a/sample/src/main/java/com/winfooz/winanalytics/sample/User.kt b/sample/src/main/java/com/winfooz/winanalytics/sample/User.kt deleted file mode 100644 index ea5cab8..0000000 --- a/sample/src/main/java/com/winfooz/winanalytics/sample/User.kt +++ /dev/null @@ -1,25 +0,0 @@ -package com.winfooz.winanalytics.sample - -import com.winfooz.winanalytics.annotations.Event -import com.winfooz.winanalytics.annotations.AnalyticsEmbedded -import com.winfooz.winanalytics.annotations.Analytics - -data class User( - @Analytics( - Event("Login"), - Event("Logout") - ) - val name: String, - - @Analytics(Event("Login"), Event("Logout")) - val email: String, - - @Analytics(Event("Login")) - val phone: String, - - @Analytics(Event("Login")) - val age: Int, - - @AnalyticsEmbedded - val address: Address? -) \ No newline at end of file diff --git a/winanalytics/gradle.properties b/winanalytics/gradle.properties index 6099df4..647c739 100644 --- a/winanalytics/gradle.properties +++ b/winanalytics/gradle.properties @@ -3,4 +3,4 @@ POM_DESCRIPTION=For log analytics to firebase,fabric,mixpanel etc... POM_BINTRAY_NAME=com.winfooz.winanalytics:winanalytics POM_ARTIFACT_ID=winanalytics POM_PACKAGING=jar -POM_VERSION=1.0.5-beta +POM_VERSION=1.0.6-beta