@@ -2,13 +2,15 @@ package com.telerik.metadata.parsing.kotlin.classes
2
2
3
3
import com.telerik.metadata.ClassRepo
4
4
import com.telerik.metadata.ClassUtil
5
+ import com.telerik.metadata.ClassUtil.getCanonicalName
5
6
import com.telerik.metadata.parsing.NativeFieldDescriptor
6
7
import com.telerik.metadata.parsing.NativeMethodDescriptor
7
8
import com.telerik.metadata.parsing.NativePropertyDescriptor
8
9
import com.telerik.metadata.parsing.bytecode.classes.NativeClassBytecodeDescriptor
9
10
import com.telerik.metadata.parsing.kotlin.fields.KotlinCompanionFieldDescriptor
10
11
import com.telerik.metadata.parsing.kotlin.fields.KotlinEnumFieldDescriptor
11
12
import com.telerik.metadata.parsing.kotlin.fields.KotlinJvmFieldDescriptor
13
+ import com.telerik.metadata.parsing.kotlin.fields.KotlinObjectInstanceFieldDescriptor
12
14
import com.telerik.metadata.parsing.kotlin.metadata.MetadataAnnotation
13
15
import com.telerik.metadata.parsing.kotlin.metadata.bytecode.BytecodeClassMetadataParser
14
16
import com.telerik.metadata.parsing.kotlin.methods.KotlinMethodDescriptor
@@ -49,7 +51,12 @@ class KotlinClassDescriptor(nativeClass: JavaClass, private val metadataAnnotati
49
51
fields.add(possibleCompanionField.get())
50
52
}
51
53
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()) {
53
60
val enumFields = getEnumEntriesAsFields(nativeClass, metaClass.enumEntries)
54
61
fields.addAll(enumFields)
55
62
}
@@ -113,6 +120,21 @@ class KotlinClassDescriptor(nativeClass: JavaClass, private val metadataAnnotati
113
120
return Optional .empty()
114
121
}
115
122
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
+
116
138
private fun getEnumEntriesAsFields (nativeClass : JavaClass , metadataEnumEntries : Collection <String >): Collection <KotlinEnumFieldDescriptor > {
117
139
val bytecodeFields = nativeClass.fields
118
140
0 commit comments