Skip to content

Commit b5496b6

Browse files
authored
Merge pull request #283 from wuseal/3.6.0-dev
3.6.0 dev merge into master after publication
2 parents 3a45702 + 54472a6 commit b5496b6

File tree

169 files changed

+5711
-1360
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

169 files changed

+5711
-1360
lines changed

.travis.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,9 @@ before_install:
33
- chmod +x library/gradlew
44
- chmod +x library/gradle/wrapper/gradle-wrapper.jar
55
script:
6+
- ./gradlew check
67
- cd library && ./gradlew build test
8+
- cd ../
79
deploy:
810
- provider: releases
911
api_key:

build.gradle

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
buildscript {
2-
ext.kotlin_version = '1.3.41'
2+
ext.kotlin_version = '1.3.61'
33

44
repositories {
55
mavenLocal()
@@ -20,7 +20,7 @@ apply plugin: 'kotlin'
2020
apply plugin: 'org.jetbrains.intellij'
2121

2222
group 'wu.seal'
23-
version '3.5.1'
23+
version '3.6.0'
2424

2525
intellij {
2626
version '2017.1'
@@ -49,4 +49,9 @@ dependencies {
4949
exclude group: "org.jetbrains.kotlin"
5050
}
5151
}
52+
compileKotlin {
53+
kotlinOptions {
54+
languageVersion = "1.3"
55+
}
56+
}
5257

doc_for_extensions.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ Customize your own plugin by these steps, and you will have your own plugin, in
3434
package extensions.wu.seal
3535

3636
import extensions.Extension
37-
import wu.seal.jsontokotlin.classscodestruct.KotlinDataClass
37+
import wu.seal.jsontokotlin.model.classscodestruct.KotlinDataClass
3838
import javax.swing.JPanel
3939

4040
object AllUpperCase :Extension(){

src/main/kotlin/extensions/Extension.kt

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,16 +2,17 @@ package extensions
22

33
import com.google.gson.Gson
44
import com.google.gson.JsonObject
5-
import wu.seal.jsontokotlin.ConfigManager
5+
import wu.seal.jsontokotlin.model.ConfigManager
66
import wu.seal.jsontokotlin.interceptor.IImportClassDeclarationInterceptor
7-
import wu.seal.jsontokotlin.interceptor.IKotlinDataClassInterceptor
7+
import wu.seal.jsontokotlin.interceptor.IKotlinClassInterceptor
8+
import wu.seal.jsontokotlin.model.classscodestruct.KotlinClass
89
import javax.swing.JPanel
910

1011
/**
1112
* Extension which represent a function extending the current functions of JsonToKotlinClass plugin
1213
* It must have a UI item to be insert into the JBList JPanel of Extensions Tab
1314
*/
14-
abstract class Extension : IImportClassDeclarationInterceptor, IKotlinDataClassInterceptor {
15+
abstract class Extension : IImportClassDeclarationInterceptor, IKotlinClassInterceptor<KotlinClass> {
1516

1617
private val gson = Gson()
1718

Lines changed: 11 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,9 @@
11
package extensions
22

33
import extensions.chen.biao.KeepAnnotationSupport
4-
import extensions.wu.seal.KeepAnnotationSupportForAndroidX
54
import extensions.jose.han.ParcelableAnnotationSupport
65
import extensions.ted.zeng.PropertyAnnotationLineSupport
7-
import extensions.wu.seal.ClassNameSuffixSupport
8-
import extensions.wu.seal.ForceInitDefaultValueWithOriginJsonValueSupport
9-
import extensions.wu.seal.PropertyPrefixSupport
10-
import extensions.wu.seal.PropertySuffixSupport
6+
import extensions.wu.seal.*
117
import extensions.xu.rui.PrimitiveTypeNonNullableSupport
128

139
/**
@@ -18,14 +14,15 @@ object ExtensionsCollector {
1814
* all extensions
1915
*/
2016
val extensions = listOf(
21-
KeepAnnotationSupport,
22-
KeepAnnotationSupportForAndroidX,
23-
PropertyAnnotationLineSupport,
24-
ParcelableAnnotationSupport,
25-
PropertyPrefixSupport,
26-
PropertySuffixSupport,
27-
ClassNameSuffixSupport,
28-
PrimitiveTypeNonNullableSupport,
29-
ForceInitDefaultValueWithOriginJsonValueSupport
17+
KeepAnnotationSupport,
18+
KeepAnnotationSupportForAndroidX,
19+
PropertyAnnotationLineSupport,
20+
ParcelableAnnotationSupport,
21+
PropertyPrefixSupport,
22+
PropertySuffixSupport,
23+
ClassNameSuffixSupport,
24+
PrimitiveTypeNonNullableSupport,
25+
ForceInitDefaultValueWithOriginJsonValueSupport,
26+
DisableDataClassSupport
3027
)
3128
}

src/main/kotlin/extensions/chen/biao/KeepAnnotationSupport.kt

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
11
package extensions.chen.biao
22

33
import extensions.Extension
4-
import wu.seal.jsontokotlin.classscodestruct.Annotation
5-
import wu.seal.jsontokotlin.classscodestruct.KotlinDataClass
4+
import wu.seal.jsontokotlin.model.classscodestruct.Annotation
5+
import wu.seal.jsontokotlin.model.classscodestruct.KotlinClass
6+
import wu.seal.jsontokotlin.model.classscodestruct.DataClass
67
import wu.seal.jsontokotlin.ui.checkBox
78
import wu.seal.jsontokotlin.ui.horizontalLinearLayout
89
import javax.swing.JPanel
@@ -30,19 +31,23 @@ object KeepAnnotationSupport : Extension() {
3031
}
3132
}
3233

33-
override fun intercept(kotlinDataClass: KotlinDataClass): KotlinDataClass {
34+
override fun intercept(kotlinClass: KotlinClass): KotlinClass {
3435

35-
return if (getConfig(configKey).toBoolean()) {
36+
if (kotlinClass is DataClass) {
37+
return if (getConfig(configKey).toBoolean()) {
3638

37-
val classAnnotationString = "@Keep"
39+
val classAnnotationString = "@Keep"
3840

39-
val classAnnotation = Annotation.fromAnnotationString(classAnnotationString)
41+
val classAnnotation = Annotation.fromAnnotationString(classAnnotationString)
4042

41-
val newAnnotations = mutableListOf(classAnnotation).also { it.addAll(kotlinDataClass.annotations) }
43+
val newAnnotations = mutableListOf(classAnnotation).also { it.addAll(kotlinClass.annotations) }
4244

43-
return kotlinDataClass.copy(annotations = newAnnotations)
45+
return kotlinClass.copy(annotations = newAnnotations)
46+
} else {
47+
kotlinClass
48+
}
4449
} else {
45-
kotlinDataClass
50+
return kotlinClass
4651
}
4752

4853
}

src/main/kotlin/extensions/jose/han/ParcelableAnnotationSupport.kt

Lines changed: 15 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
11
package extensions.jose.han
22

33
import extensions.Extension
4-
import wu.seal.jsontokotlin.classscodestruct.Annotation
5-
import wu.seal.jsontokotlin.classscodestruct.KotlinDataClass
4+
import wu.seal.jsontokotlin.model.classscodestruct.Annotation
5+
import wu.seal.jsontokotlin.model.classscodestruct.KotlinClass
6+
import wu.seal.jsontokotlin.model.classscodestruct.DataClass
67
import wu.seal.jsontokotlin.ui.checkBox
78
import wu.seal.jsontokotlin.ui.horizontalLinearLayout
89
import wu.seal.jsontokotlin.ui.link
@@ -30,21 +31,23 @@ object ParcelableAnnotationSupport : Extension() {
3031
}
3132
}
3233

33-
override fun intercept(kotlinDataClass: KotlinDataClass): KotlinDataClass {
34-
return if (getConfig(configKey).toBoolean()) {
34+
override fun intercept(kotlinClass: KotlinClass): KotlinClass {
3535

36-
val classAnnotationString1 = "@SuppressLint(\"ParcelCreator\")"
37-
val classAnnotationString2 = "@Parcelize"
36+
if (kotlinClass is DataClass) {
37+
if (getConfig(configKey).toBoolean()) {
3838

39-
val classAnnotation1 = Annotation.fromAnnotationString(classAnnotationString1)
40-
val classAnnotation2 = Annotation.fromAnnotationString(classAnnotationString2)
39+
val classAnnotationString1 = "@SuppressLint(\"ParcelCreator\")"
40+
val classAnnotationString2 = "@Parcelize"
4141

42-
val newAnnotations = mutableListOf(classAnnotation1,classAnnotation2).also { it.addAll(kotlinDataClass.annotations) }
42+
val classAnnotation1 = Annotation.fromAnnotationString(classAnnotationString1)
43+
val classAnnotation2 = Annotation.fromAnnotationString(classAnnotationString2)
4344

44-
return kotlinDataClass.copy(annotations = newAnnotations, parentClassTemplate = "Parcelable")
45-
} else {
46-
kotlinDataClass
45+
val newAnnotations = mutableListOf(classAnnotation1, classAnnotation2).also { it.addAll(kotlinClass.annotations) }
46+
47+
return kotlinClass.copy(annotations = newAnnotations, parentClassTemplate = "Parcelable")
48+
}
4749
}
50+
return kotlinClass
4851
}
4952

5053
override fun intercept(originClassImportDeclaration: String): String {

src/main/kotlin/extensions/ted/zeng/PropertyAnnotationLineSupport.kt

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
11
package extensions.ted.zeng
22

33
import extensions.Extension
4-
import wu.seal.jsontokotlin.classscodestruct.KotlinDataClass
5-
import wu.seal.jsontokotlin.classscodestruct.Property
4+
import wu.seal.jsontokotlin.model.classscodestruct.KotlinClass
5+
import wu.seal.jsontokotlin.model.classscodestruct.DataClass
6+
import wu.seal.jsontokotlin.model.classscodestruct.Property
67
import wu.seal.jsontokotlin.ui.checkBox
78
import wu.seal.jsontokotlin.ui.horizontalLinearLayout
89
import javax.swing.JPanel
@@ -27,11 +28,16 @@ object PropertyAnnotationLineSupport : Extension() {
2728
}
2829
}
2930

30-
override fun intercept(kotlinDataClass: KotlinDataClass): KotlinDataClass {
31-
if (getConfig(configKey).toBoolean()) {
32-
kotlinDataClass.properties.forEach(Property::letLastAnnotationStayInSameLine)
31+
override fun intercept(kotlinClass: KotlinClass): KotlinClass {
32+
33+
return if (kotlinClass is DataClass) {
34+
if (getConfig(configKey).toBoolean()) {
35+
kotlinClass.properties.forEach(Property::letLastAnnotationStayInSameLine)
36+
}
37+
kotlinClass
38+
} else {
39+
kotlinClass
3340
}
34-
return kotlinDataClass
3541
}
3642

3743
}

src/main/kotlin/extensions/wu/seal/ClassNameSuffixSupport.kt

Lines changed: 36 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
package extensions.wu.seal
22

33
import extensions.Extension
4-
import wu.seal.jsontokotlin.classscodestruct.KotlinDataClass
4+
import wu.seal.jsontokotlin.model.classscodestruct.KotlinClass
5+
import wu.seal.jsontokotlin.model.classscodestruct.DataClass
56
import wu.seal.jsontokotlin.ui.NamingConventionDocument
67
import wu.seal.jsontokotlin.ui.checkBox
78
import wu.seal.jsontokotlin.ui.horizontalLinearLayout
@@ -39,51 +40,52 @@ object ClassNameSuffixSupport : Extension() {
3940
}
4041

4142

42-
override fun intercept(kotlinDataClass: KotlinDataClass): KotlinDataClass {
43-
44-
val suffix = getConfig(suffixKey)
45-
46-
return if (getConfig(suffixKeyEnable).toBoolean() && suffix.isNotEmpty()) {
47-
val standTypes = listOf("Int", "Double", "Long", "String", "Boolean")
48-
val originName = kotlinDataClass.name
49-
val newPropertyTypes =
50-
kotlinDataClass.properties.map {
51-
val rawSubType = getChildType(getRawType(it.type))
52-
when {
53-
it.type.isMapType() -> {
54-
it.type//currently don't support map type
43+
override fun intercept(kotlinClass: KotlinClass): KotlinClass {
44+
45+
return if (kotlinClass is DataClass) {
46+
val suffix = getConfig(suffixKey)
47+
return if (getConfig(suffixKeyEnable).toBoolean() && suffix.isNotEmpty()) {
48+
val standTypes = listOf("Int", "Double", "Long", "String", "Boolean")
49+
val originName = kotlinClass.name
50+
val newPropertyTypes =
51+
kotlinClass.properties.map {
52+
val rawSubType = getChildType(getRawType(it.type))
53+
when {
54+
it.type.isMapType() -> {
55+
it.type//currently don't support map type
56+
}
57+
standTypes.contains(rawSubType) -> it.type
58+
else -> it.type.replace(rawSubType, rawSubType + suffix)
5559
}
56-
standTypes.contains(rawSubType) -> it.type
57-
else -> it.type.replace(rawSubType, rawSubType + suffix)
5860
}
59-
}
6061

61-
val newPropertyDefaultValues = kotlinDataClass.properties.map {
62-
val rawSubType = getChildType(getRawType(it.type))
63-
when {
64-
it.value.isEmpty() -> it.value
65-
it.type.isMapType() -> {
66-
it.value//currently don't support map type
62+
val newPropertyDefaultValues = kotlinClass.properties.map {
63+
val rawSubType = getChildType(getRawType(it.type))
64+
when {
65+
it.value.isEmpty() -> it.value
66+
it.type.isMapType() -> {
67+
it.value//currently don't support map type
68+
}
69+
standTypes.contains(rawSubType) -> it.value
70+
else -> it.value.replace(rawSubType, rawSubType + suffix)
6771
}
68-
standTypes.contains(rawSubType) -> it.value
69-
else -> it.value.replace(rawSubType, rawSubType + suffix)
7072
}
71-
}
7273

73-
val newProperties = kotlinDataClass.properties.mapIndexed { index, property ->
74+
val newProperties = kotlinClass.properties.mapIndexed { index, property ->
7475

75-
val newType = newPropertyTypes[index]
76+
val newType = newPropertyTypes[index]
7677

77-
val newValue = newPropertyDefaultValues[index]
78+
val newValue = newPropertyDefaultValues[index]
7879

79-
property.copy(type = newType, value = newValue)
80+
property.copy(type = newType, value = newValue)
81+
}
82+
kotlinClass.copy(name = originName + suffix, properties = newProperties)
83+
} else {
84+
kotlinClass
8085
}
8186

82-
83-
kotlinDataClass.copy(name = originName + suffix, properties = newProperties)
84-
8587
} else {
86-
kotlinDataClass
88+
kotlinClass
8789
}
8890

8991
}
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
package extensions.wu.seal
2+
3+
import extensions.Extension
4+
import wu.seal.jsontokotlin.model.classscodestruct.DataClass
5+
import wu.seal.jsontokotlin.model.classscodestruct.KotlinClass
6+
import wu.seal.jsontokotlin.model.classscodestruct.NormalClass
7+
import wu.seal.jsontokotlin.ui.checkBox
8+
import wu.seal.jsontokotlin.ui.horizontalLinearLayout
9+
import javax.swing.JPanel
10+
11+
/**
12+
* Extension support disable kotlin data class, after enable this, all kotlin data classes will be changed to [NormalClass]
13+
*/
14+
object DisableDataClassSupport : Extension() {
15+
16+
const val configKey = "wu.seal.disable_data_class_support"
17+
18+
override fun createUI(): JPanel {
19+
20+
return horizontalLinearLayout {
21+
checkBox(
22+
"Disable Kotlin Data Class",
23+
getConfig(configKey).toBoolean()
24+
) { isSelectedAfterClick ->
25+
setConfig(configKey, isSelectedAfterClick.toString())
26+
}()
27+
fillSpace()
28+
}
29+
}
30+
31+
override fun intercept(kotlinClass: KotlinClass): KotlinClass {
32+
33+
if (kotlinClass is DataClass && getConfig(configKey).toBoolean()) {
34+
with(kotlinClass) {
35+
return NormalClass(annotations, name, properties, parentClassTemplate, modifiable)
36+
}
37+
} else {
38+
return kotlinClass
39+
}
40+
}
41+
}

0 commit comments

Comments
 (0)