@@ -2,13 +2,15 @@ package com.telerik.metadata.parsing.kotlin.classes
22
33import com.telerik.metadata.ClassRepo
44import com.telerik.metadata.ClassUtil
5+ import com.telerik.metadata.ClassUtil.getCanonicalName
56import com.telerik.metadata.parsing.NativeFieldDescriptor
67import com.telerik.metadata.parsing.NativeMethodDescriptor
78import com.telerik.metadata.parsing.NativePropertyDescriptor
89import com.telerik.metadata.parsing.bytecode.classes.NativeClassBytecodeDescriptor
910import com.telerik.metadata.parsing.kotlin.fields.KotlinCompanionFieldDescriptor
1011import com.telerik.metadata.parsing.kotlin.fields.KotlinEnumFieldDescriptor
1112import com.telerik.metadata.parsing.kotlin.fields.KotlinJvmFieldDescriptor
13+ import com.telerik.metadata.parsing.kotlin.fields.KotlinObjectInstanceFieldDescriptor
1214import com.telerik.metadata.parsing.kotlin.metadata.MetadataAnnotation
1315import com.telerik.metadata.parsing.kotlin.metadata.bytecode.BytecodeClassMetadataParser
1416import com.telerik.metadata.parsing.kotlin.methods.KotlinMethodDescriptor
@@ -49,7 +51,12 @@ class KotlinClassDescriptor(nativeClass: JavaClass, private val metadataAnnotati
4951 fields.add(possibleCompanionField.get())
5052 }
5153
52- if (metaClass.enumEntries.isNotEmpty()){
54+ val possibleObjectInstanceField = getObjectFieldIfAny(nativeClass)
55+ if (possibleObjectInstanceField.isPresent){
56+ fields.add(possibleObjectInstanceField.get())
57+ }
58+
59+ if (metaClass.enumEntries.isNotEmpty()) {
5360 val enumFields = getEnumEntriesAsFields(nativeClass, metaClass.enumEntries)
5461 fields.addAll(enumFields)
5562 }
@@ -113,6 +120,21 @@ class KotlinClassDescriptor(nativeClass: JavaClass, private val metadataAnnotati
113120 return Optional .empty()
114121 }
115122
123+ private fun getObjectFieldIfAny (nativeClass : JavaClass ): Optional <KotlinObjectInstanceFieldDescriptor > {
124+ return nativeClass
125+ .fields
126+ .singleOrNull { field ->
127+ field.name == " INSTANCE" && getCanonicalName(field.type.signature) == nativeClass.className
128+ }.run {
129+ if (this != null ) {
130+ val objectInstanceField = KotlinObjectInstanceFieldDescriptor (this @run, this @KotlinClassDescriptor)
131+ Optional .of(objectInstanceField)
132+ } else {
133+ Optional .empty()
134+ }
135+ }
136+ }
137+
116138 private fun getEnumEntriesAsFields (nativeClass : JavaClass , metadataEnumEntries : Collection <String >): Collection <KotlinEnumFieldDescriptor > {
117139 val bytecodeFields = nativeClass.fields
118140
0 commit comments