LINUX.ORG.RU

Как в kotlin определить что тип built-in?

 


0

1

а то эта скотина делает так:

kotlin.reflect.jvm.internal.KotlinReflectionInternalError: Reflection on built-in Kotlin types is not yet fully supported. No metadata found for public open val length: kotlin.Int defined in kotlin.String[DeserializedPropertyDescriptor@576d5deb]

	at kotlin.reflect.jvm.internal.RuntimeTypeMapper.mapPropertySignature(RuntimeTypeMapper.kt:215)
	at kotlin.reflect.jvm.internal.KPropertyImpl.<init>(KPropertyImpl.kt:46)
	at kotlin.reflect.jvm.internal.KProperty1Impl.<init>(KProperty1Impl.kt:27)
	at kotlin.reflect.jvm.internal.KDeclarationContainerImpl.createProperty(KDeclarationContainerImpl.kt:90)
	at kotlin.reflect.jvm.internal.KDeclarationContainerImpl.access$createProperty(KDeclarationContainerImpl.kt:32)
	at kotlin.reflect.jvm.internal.KDeclarationContainerImpl$getMembers$visitor$1.visitPropertyDescriptor(KDeclarationContainerImpl.kt:52)
	at kotlin.reflect.jvm.internal.KDeclarationContainerImpl$getMembers$visitor$1.visitPropertyDescriptor(KDeclarationContainerImpl.kt:50)
	at kotlin.reflect.jvm.internal.impl.descriptors.impl.PropertyDescriptorImpl.accept(PropertyDescriptorImpl.java:452)
	at kotlin.reflect.jvm.internal.KDeclarationContainerImpl.getMembers(KDeclarationContainerImpl.kt:65)
	at kotlin.reflect.jvm.internal.KClassImpl$Data$declaredNonStaticMembers$2.invoke(KClassImpl.kt:139)
	at kotlin.reflect.jvm.internal.KClassImpl$Data$declaredNonStaticMembers$2.invoke(KClassImpl.kt:39)
	at kotlin.reflect.jvm.internal.ReflectProperties$LazySoftVal.invoke(ReflectProperties.java:93)
	at kotlin.reflect.jvm.internal.ReflectProperties$Val.getValue(ReflectProperties.java:32)
	at kotlin.reflect.jvm.internal.KClassImpl$Data.getDeclaredNonStaticMembers(KClassImpl.kt)
	at kotlin.reflect.jvm.internal.KClassImpl$Data$allNonStaticMembers$2.invoke(KClassImpl.kt:148)
	at kotlin.reflect.jvm.internal.KClassImpl$Data$allNonStaticMembers$2.invoke(KClassImpl.kt:39)
	at kotlin.reflect.jvm.internal.ReflectProperties$LazySoftVal.invoke(ReflectProperties.java:93)
	at kotlin.reflect.jvm.internal.ReflectProperties$Val.getValue(ReflectProperties.java:32)
	at kotlin.reflect.jvm.internal.KClassImpl$Data.getAllNonStaticMembers(KClassImpl.kt)
	at kotlin.reflect.full.KClasses.getMemberProperties(KClasses.kt:149)

Автор котлина конечно те еще скотлины, но вот как определить что перед нами «built-in Kotlin type» и не трогать его?

ps. посмотреть на имя пакета - очевидно, но не надежно

ps2. https://youtrack.jetbrains.com/issue/KT-13077

Deleted

Последнее исправление: Deleted (всего исправлений: 2)

Посмотрел на стек... Не пользуй это говно - самое простое решение.

Ну и рефлексию не пользуй. А так - naming conventions тут самый естественный костыль, если он вообще применим.

dzidzitop ★★
()
Ответ на: комментарий от dzidzitop

Не пользуй это говно

уже вляпались, я хз как можно было догадаться такое в продакшен выкатить, одно слово жетбрейзн

Deleted
()

Автор котлина конечно те еще скотлины, но вот как определить что перед нами «built-in Kotlin type» и не трогать его?

Возможно это связано с тем, что стандратная библиотека Kotlin-а должна уметь работать и на платформах, где рефлекшн работает иначе, не так как в Java. Например в том-же Kotlin-native с рефлекшеном будет сложнее, без создания дополнительного оверхеда, который в нативных языках не принято платить.

P.S. Кроме как для всяких сериализаций, для чего вы реально используете рефлекшн?

qrck ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.