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

Release : Library v3.6.1 #323

Merged
merged 15 commits into from
Jan 28, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 6 additions & 3 deletions LIBRARY.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,14 +4,17 @@ We also have a `Java/Kotlin` library. With this you can convert `JSON` to `Kotli

## Installation

Download `jar` file from [here](library/output/JsonToKotlinClassLibrary-3.5.1-alpha01.jar) and add it to your project.
Add this to your `build.gradle` file

```groovy
implementation 'wu.seal.jsontokotlin:library:3.6.1'
```

If your project is not in `Kotlin`, don't forgot to add kotlin runtime dependency.
If your project is NOT in `Kotlin`, don't forgot to add kotlin runtime dependency.

```groovy
// replace `1.3.61` with latest kotlin runtime version
implementation group: 'org.jetbrains.kotlin', name: 'kotlin-stdlib', version: '1.3.61'
implementation group: 'org.jetbrains.kotlin', name: 'kotlin-stdlib', version: '1.3.72'
```

## Usage
Expand Down
3 changes: 3 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,9 @@
Hi, Welcome! This is a plugin to generate Kotlin `data class` from JSON string, in another word, a plugin that converts JSON string to Kotlin `data class` (Json to Kotlin).
We also have a `Java/Kotlin` [library](LIBRARY.md). With this you can generate Kotlin `data class` from JSON string **programmatically**.

```groovy
implementation 'wu.seal.jsontokotlin:library:3.6.1'
```

### Overview

Expand Down
5 changes: 0 additions & 5 deletions library/META-INF/MANIFEST.MF

This file was deleted.

120 changes: 105 additions & 15 deletions library/build.gradle
Original file line number Diff line number Diff line change
@@ -1,21 +1,50 @@
plugins {
id 'org.jetbrains.kotlin.jvm' version '1.3.60'
id 'org.jetbrains.kotlin.jvm' version '1.3.72'
id 'maven'
id 'maven-publish'
id 'com.jfrog.bintray' version '1.8.5'
}

group 'wu.seal.jsontokotlin'
version '3.5.1-alpha01'

repositories {
apply from: "${rootProject.projectDir}/dependencies.gradle"
mavenCentral()
}

group 'wu.seal'
version "$versions.j2k_version"


dependencies {
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8"

// Core library
compile files('libs/JsonToKotlinClass-3.6.1.jar')

// Gson : Gson
implementation 'com.google.code.gson:gson:2.8.6'

// Test dependencies
testImplementation "junit:junit:4.12"
testImplementation('com.winterbe:expekt:0.5.0') {

// Expekt : An assertion library for Kotlin
testImplementation('com.winterbe:expekt:0.5.0'){
exclude group: "org.jetbrains.kotlin"
}
compile fileTree(dir: 'libs', include: ['*.jar'])
}

jar {
from { configurations.compile.collect { it.isDirectory() ? it : zipTree(it) } }
}

task sourcesJar(type: Jar, dependsOn: classes) {
archiveClassifier.set('sources')
from sourceSets.main.allSource
}

javadoc.failOnError = false
task javadocJar(type: Jar, dependsOn: javadoc) {
archiveClassifier.set('javadoc')
from javadoc.destinationDir
}

compileKotlin {
Expand All @@ -25,14 +54,75 @@ compileTestKotlin {
kotlinOptions.jvmTarget = "1.8"
}

//create a single Jar with all dependencies
task fatJar(type: Jar) {
manifest {
attributes 'Implementation-Title': 'JsonToKotlin Library',
'Implementation-Version': version,
'Main-Class': ''


artifacts {
archives sourcesJar
archives javadocJar
}

def pomConfig = {
licenses {
license {
name "GNU General Public License v3.0"
url "https://www.gnu.org/licenses/gpl-3.0.en.html"
distribution "repo"
}
}
developers {
developer {
id "shifarshifz"
name "shifarshifz"
email "[email protected]"
}
}

scm {
url "https://github.com/wuseal/JsonToKotlinClass"
}
baseName = project.name
from { configurations.compile.collect { it.isDirectory() ? it : zipTree(it) } }
with jar
}

publishing {
publications {
mavenPublication(MavenPublication) {
from components.java

artifact sourcesJar {
classifier "sources"
}
artifact javadocJar {
classifier "javadoc"
}
groupId 'wu.seal.jsontokotlin'
artifactId 'library'
version "$versions.j2k_version"
pom.withXml {
def root = asNode()
root.appendNode('description', 'To generate Kotlin data class code from JSON')
root.appendNode('name', 'JsonToKotlinClass')
root.appendNode('url', 'https://github.com/wuseal/JsonToKotlinClass')
root.children().last() + pomConfig
}
}
}
}

bintray {
user = System.getenv('BINTRAY_USER')
key = System.getenv('BINTRAY_API_KEY')
publications = ['mavenPublication']

pkg {
repo = 'maven'
name = 'JsonToKotlinClass'
userOrg = 'shifarshifz'
licenses = ['GPL-3.0']
vcsUrl = 'https://github.com/wuseal/JsonToKotlinClass.git'
version {
name = versions.j2k_version
desc = versions.j2k_version
released = new Date()
}
}

}
4 changes: 4 additions & 0 deletions library/dependencies.gradle
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
ext.versions = [
j2k_version: '3.6.1',
kotlin_version : '1.3.72'
]
Binary file removed library/libs/JsonToKotlinClass-3.5.1.jar
Binary file not shown.
Binary file added library/libs/JsonToKotlinClass-3.6.1.jar
Binary file not shown.
Binary file removed library/libs/gson-2.8.6.jar
Binary file not shown.
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,14 @@ import extensions.jose.han.ParcelableAnnotationSupport
import extensions.ted.zeng.PropertyAnnotationLineSupport
import extensions.wu.seal.*
import extensions.xu.rui.PrimitiveTypeNonNullableSupport
import wu.seal.jsontokotlin.*
import wu.seal.jsontokotlin.interceptor.InterceptorManager
import wu.seal.jsontokotlin.model.DefaultValueStrategy
import wu.seal.jsontokotlin.model.PropertyTypeStrategy
import wu.seal.jsontokotlin.model.TargetJsonConverter
import wu.seal.jsontokotlin.test.TestConfig
import wu.seal.jsontokotlin.utils.ClassImportDeclaration
import wu.seal.jsontokotlin.utils.KotlinClassCodeMaker
import wu.seal.jsontokotlin.utils.KotlinClassMaker


/**
Expand Down Expand Up @@ -121,7 +125,7 @@ class JsonToKotlinBuilder {
}

/**
*
*
*/
fun enableMapType(isMapType: Boolean): JsonToKotlinBuilder {
TestConfig.enableMapType = isMapType
Expand Down Expand Up @@ -248,12 +252,14 @@ class JsonToKotlinBuilder {
InterceptorManager.getEnabledImportClassDeclarationInterceptors()
)

val classCode = KotlinDataClassCodeMaker(
KotlinDataClassMaker(
className,
input
).makeKotlinDataClass()
).makeKotlinDataClassCode()
val kotlinClass = KotlinClassMaker(
className,
input
).makeKotlinClass()

val classCode = KotlinClassCodeMaker(
kotlinClass
).makeKotlinClassCode()

val importsAndClassCode = if (imports.isNotBlank()) {
"$imports\n\n$classCode"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,15 @@ package wu.seal.jsontokotlin
import com.winterbe.expekt.should
import org.junit.Test
import wu.seal.jsontokotlin.library.JsonToKotlinBuilder
import wu.seal.jsontokotlin.model.DefaultValueStrategy
import wu.seal.jsontokotlin.model.PropertyTypeStrategy
import wu.seal.jsontokotlin.model.TargetJsonConverter

class JsonToKotlinBuilderTest {


/*
FIXME: Commenting due to https://github.com/wuseal/JsonToKotlinClass/issues/325
@Test
fun fullMethodTest() {
val json1 = """{ "programmers": [
Expand Down Expand Up @@ -72,36 +77,36 @@ class JsonToKotlinBuilderTest {
@Keep
@JsonClass(generateAdapter = true)
data class AuthorMyClassSuffix(
@Json(name = "firstName") val MyPrefixFirstNameMySuffix: String? = "", // Frank
@Json(name = "genre") val MyPrefixGenreMySuffix: String = "christian fiction", // christian fiction
@Json(name = "lastName") val MyPrefixLastNameMySuffix: String = "Peretti" // Peretti
@Json(name = "firstName") val MyPrefixFirstNameMySuffix: String? = "", // null
@Json(name = "genre") val MyPrefixGenreMySuffix: String = "science fiction", // science fiction
@Json(name = "lastName") val MyPrefixLastNameMySuffix: String = "Asimov" // Asimov
) : Parcelable

@SuppressLint("ParcelCreator")
@Parcelize
@Keep
@JsonClass(generateAdapter = true)
data class MusicianMyClassSuffix(
@Json(name = "firstName") val MyPrefixFirstNameMySuffix: String = "Sergei", // Sergei
@Json(name = "instrument") val MyPrefixInstrumentMySuffix: String = "piano", // piano
@Json(name = "lastName") val MyPrefixLastNameMySuffix: String = "Rachmaninoff" // Rachmaninoff
@Json(name = "firstName") val MyPrefixFirstNameMySuffix: String = "Eric", // Eric
@Json(name = "instrument") val MyPrefixInstrumentMySuffix: String = "guitar", // guitar
@Json(name = "lastName") val MyPrefixLastNameMySuffix: String = "Clapton" // Clapton
) : Parcelable

@SuppressLint("ParcelCreator")
@Parcelize
@Keep
@JsonClass(generateAdapter = true)
data class ProgrammerMyClassSuffix(
@Json(name = "email") val MyPrefixEmailMySuffix: String = "cccc", // cccc
@Json(name = "firstName") val MyPrefixFirstNameMySuffix: String = "Elliotte", // Elliotte
@Json(name = "email") val MyPrefixEmailMySuffix: String = "aaaa", // aaaa
@Json(name = "firstName") val MyPrefixFirstNameMySuffix: String = "Jason", // Jason
@Json(name = "isFirstName") val MyPrefixIsFirstNameMySuffix: String = "Brett", // Brett
@Json(name = "lastName") val MyPrefixLastNameMySuffix: String = "Harold" // Harold
@Json(name = "lastName") val MyPrefixLastNameMySuffix: String = "McLaughlin" // McLaughlin
) : Parcelable
}
""".trimIndent()

actualOutput.should.be.equal(expectedOutput)
}
}*/

@Test
fun build() {
Expand Down Expand Up @@ -441,14 +446,11 @@ class JsonToKotlinBuilderTest {

import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable
import kotlinx.serialization.Optional

@Serializable
data class User(
@Optional
@SerialName("name")
val name: String,
@Optional
@SerialName("company")
val company: String
)
Expand Down Expand Up @@ -758,6 +760,8 @@ class JsonToKotlinBuilderTest {
actualOutput.should.be.equal(expectedOutput)
}

/*
FIXME: Commenting due to https://github.com/wuseal/JsonToKotlinClass/issues/324
@Test
fun setMapTypeEnabled() {
val input = """
Expand All @@ -775,7 +779,7 @@ class JsonToKotlinBuilderTest {
.build(input, "Model")

actualOutput.should.be.equal(expectedOutput)
}
}*/

@Test
fun setCreateAnnotationOnlyWhenNeeded() {
Expand Down Expand Up @@ -1025,8 +1029,8 @@ class JsonToKotlinBuilderTest {
)

data class UserX(
val username: String = "david",
val company_name: String = "XYZ Ltd"
val username: String = "john",
val company_name: String = "ABC Ltd"
)
""".trimIndent()

Expand Down