Skip to content

Commit 074e94c

Browse files
authored
Merge pull request #201 from wuseal/3.4.0-bugfix/#193
3.4.0 bugfix/#193
2 parents d444119 + 0e596ef commit 074e94c

File tree

3 files changed

+28
-17
lines changed

3 files changed

+28
-17
lines changed

build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ buildscript {
1212
}
1313

1414
plugins {
15-
id "org.jetbrains.intellij" version "0.3.2"
15+
id "org.jetbrains.intellij" version "0.4.9"
1616
}
1717

1818
apply plugin: 'idea'
Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
#Mon May 14 11:49:38 CST 2018
1+
#Sun Jul 21 15:52:28 CST 2019
22
distributionBase=GRADLE_USER_HOME
33
distributionPath=wrapper/dists
44
zipStoreBase=GRADLE_USER_HOME
55
zipStorePath=wrapper/dists
6-
distributionUrl=https\://services.gradle.org/distributions/gradle-4.4-all.zip
6+
distributionUrl=https\://services.gradle.org/distributions/gradle-5.5.1-all.zip

src/main/kotlin/wu/seal/jsontokotlin/utils/KotlinDataClassFileGenerator.kt

Lines changed: 25 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -170,25 +170,36 @@ class KotlinDataClassFileGenerator(private val interceptors: List<IKotlinDataCla
170170
}
171171

172172
fun buildTypeReference(classes: List<ParsedKotlinDataClass>): List<ParsedKotlinDataClass> {
173-
val classNameList = classes.map { it.name }
173+
val notBeenReferencedClass = mutableListOf<ParsedKotlinDataClass>().apply {
174+
addAll(classes)
175+
removeAt(0)
176+
}
174177

175-
/**
176-
* Build Property Type reference to ParsedKotlinDataClass
177-
* Only pre class property type could reference behind classes
178-
*/
179-
classes.forEachIndexed { index, kotlinDataClass ->
180-
kotlinDataClass.properties.forEachIndexed { _, property ->
181-
val indexOfClassName =
182-
classNameList.firstIndexAfterSpecificIndex(getRawType(getChildType(property.propertyType)), index)
183-
if (indexOfClassName != -1) {
184-
property.kotlinDataClassPropertyTypeRef = classes[indexOfClassName]
185-
}
186-
}
178+
val classNameList = notBeenReferencedClass.map { it.name }.toMutableList()
179+
180+
classes.forEach {
181+
buildClassTypeReference(it, classNameList, notBeenReferencedClass)
187182
}
188183

189184
return classes
190185
}
191186

187+
private fun buildClassTypeReference(tobeBuildTypeReferenceClass: ParsedKotlinDataClass, classNameList: MutableList<String>, notBeenReferencedClass: MutableList<ParsedKotlinDataClass>) {
188+
tobeBuildTypeReferenceClass.properties.forEach { property ->
189+
val indexOfClassName =
190+
classNameList.indexOf(getRawType(getChildType(property.propertyType)))
191+
if (indexOfClassName != -1) {
192+
val referencedClass = notBeenReferencedClass[indexOfClassName]
193+
notBeenReferencedClass.remove(referencedClass)
194+
classNameList.removeAt(indexOfClassName)
195+
property.kotlinDataClassPropertyTypeRef = referencedClass
196+
197+
buildClassTypeReference(referencedClass,classNameList,notBeenReferencedClass)
198+
199+
}
200+
}
201+
}
202+
192203
private fun generateKotlinDataClassFile(
193204
fileName: String,
194205
packageDeclare: String,
@@ -243,7 +254,7 @@ class KotlinDataClassFileGenerator(private val interceptors: List<IKotlinDataCla
243254
private fun changeClassNameIfCurrentListContains(classesNames: List<String>, className: String): String {
244255
var newClassName = className
245256

246-
var fileNamesInLowerCase = classesNames.map { it.toLowerCase() }
257+
val fileNamesInLowerCase = classesNames.map { it.toLowerCase() }
247258
while (fileNamesInLowerCase.contains(newClassName.toLowerCase())) {
248259
newClassName += "X"
249260
}

0 commit comments

Comments
 (0)