@@ -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