-
-
Notifications
You must be signed in to change notification settings - Fork 420
Test relocating kotlin-reflect library #1695
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Test relocating kotlin-reflect library #1695
Conversation
f64baed
to
1717efa
Compare
This comment was marked as outdated.
This comment was marked as outdated.
plugins {
kotlin("jvm") version "2.2.0"
id("com.gradleup.shadow") version "9.1.0"
}
dependencies {
implementation("org.jetbrains.kotlin:kotlin-reflect:2.2.0")
}
tasks.shadowJar {
manifest {
attributes["Main-Class"] = "org.example.MainKt"
}
enableAutoRelocation = true
}
package org.example
import kotlin.reflect.full.memberProperties
fun main() {
println(MemberClass()::class.memberProperties)
}
private class MemberClass {
val prop1 = "property 1"
val prop2 by lazy { "property 2" }
} |
1717efa
to
34271be
Compare
34271be
to
5d71568
Compare
Not all reflection functions are failed; |
5d71568
to
d084caf
Compare
84132f9
to
affe64a
Compare
7dac1ef
to
cd819e3
Compare
937ef39
to
98131f5
Compare
cd819e3
to
3285a0a
Compare
This is a new issue based on #1539. Relocating Kotlin stdlibs, including |
I do not know the specifics of |
``` Error occurred when running command line: Exception in thread "main" java.lang.AssertionError: Built-in class shadow.kotlin.Any is not found at shadow.kotlin.reflect.jvm.internal.impl.builtins.KotlinBuiltIns$3.invoke(KotlinBuiltIns.java:93) at shadow.kotlin.reflect.jvm.internal.impl.builtins.KotlinBuiltIns$3.invoke(KotlinBuiltIns.java:88) at shadow.kotlin.reflect.jvm.internal.impl.storage.LockBasedStorageManager$MapBasedMemoizedFunction.invoke(LockBasedStorageManager.java:578) at shadow.kotlin.reflect.jvm.internal.impl.storage.LockBasedStorageManager$MapBasedMemoizedFunctionToNotNull.invoke(LockBasedStorageManager.java:681) at shadow.kotlin.reflect.jvm.internal.impl.builtins.KotlinBuiltIns.getBuiltInClassByName(KotlinBuiltIns.java:223) at shadow.kotlin.reflect.jvm.internal.impl.builtins.KotlinBuiltIns.getAny(KotlinBuiltIns.java:228) at shadow.kotlin.reflect.jvm.internal.impl.builtins.KotlinBuiltIns.getAnyType(KotlinBuiltIns.java:504) at shadow.kotlin.reflect.jvm.internal.impl.descriptors.NotFoundClasses$MockClassDescriptor.<init>(NotFoundClasses.kt:62) at shadow.kotlin.reflect.jvm.internal.impl.descriptors.NotFoundClasses.classes$lambda$2(NotFoundClasses.kt:45) at shadow.kotlin.reflect.jvm.internal.impl.descriptors.NotFoundClasses.accessor$NotFoundClasses$lambda1(NotFoundClasses.kt) at shadow.kotlin.reflect.jvm.internal.impl.descriptors.NotFoundClasses$$Lambda$1.invoke(Unknown Source) at shadow.kotlin.reflect.jvm.internal.impl.storage.LockBasedStorageManager$MapBasedMemoizedFunction.invoke(LockBasedStorageManager.java:578) at shadow.kotlin.reflect.jvm.internal.impl.storage.LockBasedStorageManager$MapBasedMemoizedFunctionToNotNull.invoke(LockBasedStorageManager.java:681) at shadow.kotlin.reflect.jvm.internal.impl.descriptors.NotFoundClasses.getClass(NotFoundClasses.kt:97) at shadow.kotlin.reflect.jvm.internal.impl.serialization.deserialization.TypeDeserializer.typeConstructor$notFoundClass(TypeDeserializer.kt:151) at shadow.kotlin.reflect.jvm.internal.impl.serialization.deserialization.TypeDeserializer.typeConstructor(TypeDeserializer.kt:156) at shadow.kotlin.reflect.jvm.internal.impl.serialization.deserialization.TypeDeserializer.simpleType(TypeDeserializer.kt:91) at shadow.kotlin.reflect.jvm.internal.impl.serialization.deserialization.TypeDeserializer.type(TypeDeserializer.kt:68) at shadow.kotlin.reflect.jvm.internal.impl.serialization.deserialization.descriptors.DeserializedClassDescriptor$DeserializedClassTypeConstructor.computeSupertypes(DeserializedClassDescriptor.kt:242) at shadow.kotlin.reflect.jvm.internal.impl.types.AbstractTypeConstructor.supertypes$lambda$0(AbstractTypeConstructor.kt:78) at shadow.kotlin.reflect.jvm.internal.impl.types.AbstractTypeConstructor.accessor$AbstractTypeConstructor$lambda0(AbstractTypeConstructor.kt) at shadow.kotlin.reflect.jvm.internal.impl.types.AbstractTypeConstructor$$Lambda$0.invoke(Unknown Source) at shadow.kotlin.reflect.jvm.internal.impl.storage.LockBasedStorageManager$LockBasedLazyValue.invoke(LockBasedStorageManager.java:408) at shadow.kotlin.reflect.jvm.internal.impl.storage.LockBasedStorageManager$LockBasedLazyValueWithPostCompute.invoke(LockBasedStorageManager.java:481) at shadow.kotlin.reflect.jvm.internal.impl.storage.LockBasedStorageManager$LockBasedNotNullLazyValueWithPostCompute.invoke(LockBasedStorageManager.java:512) at shadow.kotlin.reflect.jvm.internal.impl.types.AbstractTypeConstructor.getSupertypes(AbstractTypeConstructor.kt:27) at shadow.kotlin.reflect.jvm.internal.impl.serialization.deserialization.descriptors.DeserializedClassDescriptor$DeserializedClassMemberScope.getNonDeclaredVariableNames(DeserializedClassDescriptor.kt:360) at shadow.kotlin.reflect.jvm.internal.impl.serialization.deserialization.descriptors.DeserializedMemberScope$OptimizedImplementation.variableNames_delegate$lambda$9(DeserializedMemberScope.kt:262) at shadow.kotlin.reflect.jvm.internal.impl.serialization.deserialization.descriptors.DeserializedMemberScope$OptimizedImplementation.accessor$DeserializedMemberScope$OptimizedImplementation$lambda4(DeserializedMemberScope.kt) at shadow.kotlin.reflect.jvm.internal.impl.serialization.deserialization.descriptors.DeserializedMemberScope$OptimizedImplementation$$Lambda$4.invoke(Unknown Source) at shadow.kotlin.reflect.jvm.internal.impl.storage.LockBasedStorageManager$LockBasedLazyValue.invoke(LockBasedStorageManager.java:408) at shadow.kotlin.reflect.jvm.internal.impl.storage.LockBasedStorageManager$LockBasedNotNullLazyValue.invoke(LockBasedStorageManager.java:527) at shadow.kotlin.reflect.jvm.internal.impl.storage.StorageKt.getValue(storage.kt:42) at shadow.kotlin.reflect.jvm.internal.impl.serialization.deserialization.descriptors.DeserializedMemberScope$OptimizedImplementation.getVariableNames(DeserializedMemberScope.kt:261) at shadow.kotlin.reflect.jvm.internal.impl.serialization.deserialization.descriptors.DeserializedMemberScope$OptimizedImplementation.addFunctionsAndPropertiesTo(DeserializedMemberScope.kt:349) at shadow.kotlin.reflect.jvm.internal.impl.serialization.deserialization.descriptors.DeserializedMemberScope.computeDescriptors(DeserializedMemberScope.kt:115) at shadow.kotlin.reflect.jvm.internal.impl.serialization.deserialization.descriptors.DeserializedClassDescriptor$DeserializedClassMemberScope.allDescriptors$lambda$2(DeserializedClassDescriptor.kt:279) at shadow.kotlin.reflect.jvm.internal.impl.serialization.deserialization.descriptors.DeserializedClassDescriptor$DeserializedClassMemberScope.accessor$DeserializedClassDescriptor$DeserializedClassMemberScope$lambda1(DeserializedClassDescriptor.kt) at shadow.kotlin.reflect.jvm.internal.impl.serialization.deserialization.descriptors.DeserializedClassDescriptor$DeserializedClassMemberScope$$Lambda$1.invoke(Unknown Source) at shadow.kotlin.reflect.jvm.internal.impl.storage.LockBasedStorageManager$LockBasedLazyValue.invoke(LockBasedStorageManager.java:408) at shadow.kotlin.reflect.jvm.internal.impl.storage.LockBasedStorageManager$LockBasedNotNullLazyValue.invoke(LockBasedStorageManager.java:527) at shadow.kotlin.reflect.jvm.internal.impl.serialization.deserialization.descriptors.DeserializedClassDescriptor$DeserializedClassMemberScope.getContributedDescriptors(DeserializedClassDescriptor.kt:289) at shadow.kotlin.reflect.jvm.internal.impl.resolve.scopes.ResolutionScope$DefaultImpls.getContributedDescriptors$default(ResolutionScope.kt:50) at shadow.kotlin.reflect.jvm.internal.KDeclarationContainerImpl.getMembers(KDeclarationContainerImpl.kt:58) at shadow.kotlin.reflect.jvm.internal.KClassImpl$Data.declaredNonStaticMembers_delegate$lambda$24(KClassImpl.kt:206) at shadow.kotlin.reflect.jvm.internal.KClassImpl$Data.accessor$KClassImpl$Data$lambda11(KClassImpl.kt) at shadow.kotlin.reflect.jvm.internal.KClassImpl$Data$$Lambda$11.invoke(Unknown Source) at shadow.kotlin.reflect.jvm.internal.ReflectProperties$LazySoftVal.invoke(ReflectProperties.java:70) at shadow.kotlin.reflect.jvm.internal.ReflectProperties$Val.getValue(ReflectProperties.java:32) at shadow.kotlin.reflect.jvm.internal.KClassImpl$Data.getDeclaredNonStaticMembers(KClassImpl.kt:206) at shadow.kotlin.reflect.jvm.internal.KClassImpl$Data.allNonStaticMembers_delegate$lambda$28(KClassImpl.kt:215) at shadow.kotlin.reflect.jvm.internal.KClassImpl$Data.accessor$KClassImpl$Data$lambda15(KClassImpl.kt) at shadow.kotlin.reflect.jvm.internal.KClassImpl$Data$$Lambda$15.invoke(Unknown Source) at shadow.kotlin.reflect.jvm.internal.ReflectProperties$LazySoftVal.invoke(ReflectProperties.java:70) at shadow.kotlin.reflect.jvm.internal.ReflectProperties$Val.getValue(ReflectProperties.java:32) at shadow.kotlin.reflect.jvm.internal.KClassImpl$Data.getAllNonStaticMembers(KClassImpl.kt:215) at shadow.kotlin.reflect.full.KClasses.getMemberProperties(KClasses.kt:146) at my.MainKt.main(Main.kt:5) at my.MainKt.main(Main.kt) ```
3285a0a
to
4424438
Compare
Yeah, it's relocated to something like public static final Name BUILT_INS_PACKAGE_NAME = Name.identifier("shadow.kotlin"); We can't update Should we suggest users not relocate |
``` Error occurred when running command line: Exception in thread "main" java.lang.AssertionError: Built-in class kotlin.Any is not found at shadow.kotlin.reflect.jvm.internal.impl.builtins.KotlinBuiltIns$3.invoke(KotlinBuiltIns.java:93) at shadow.kotlin.reflect.jvm.internal.impl.builtins.KotlinBuiltIns$3.invoke(KotlinBuiltIns.java:88) at shadow.kotlin.reflect.jvm.internal.impl.storage.LockBasedStorageManager$MapBasedMemoizedFunction.invoke(LockBasedStorageManager.java:578) at shadow.kotlin.reflect.jvm.internal.impl.storage.LockBasedStorageManager$MapBasedMemoizedFunctionToNotNull.invoke(LockBasedStorageManager.java:681) at shadow.kotlin.reflect.jvm.internal.impl.builtins.KotlinBuiltIns.getBuiltInClassByName(KotlinBuiltIns.java:223) at shadow.kotlin.reflect.jvm.internal.impl.builtins.KotlinBuiltIns.getAny(KotlinBuiltIns.java:228) at shadow.kotlin.reflect.jvm.internal.impl.builtins.KotlinBuiltIns.getAnyType(KotlinBuiltIns.java:504) at shadow.kotlin.reflect.jvm.internal.impl.descriptors.NotFoundClasses$MockClassDescriptor.<init>(NotFoundClasses.kt:62) ```
``` OLD: old.jar NEW: new.jar JAR │ old │ new │ diff ───────┼──────────┼──────────┼────── class │ 12.6 MiB │ 12.6 MiB │ 0 B other │ 74.6 KiB │ 74.6 KiB │ 0 B ───────┼──────────┼──────────┼────── total │ 12.7 MiB │ 12.7 MiB │ 0 B CLASSES │ old │ new │ diff ─────────┼───────┼───────┼─────────── classes │ 3149 │ 3149 │ 0 (+0 -0) methods │ 27835 │ 27835 │ 0 (+0 -0) fields │ 6257 │ 6257 │ 0 (+0 -0) ================= ==== JAR ==== ================= size │ diff │ path ──────────┼───────────┼──────────────────────────────────────── │ -28.7 KiB │ - shadow/kotlin/kotlin.kotlin_builtins 28.7 KiB │ +28.7 KiB │ + kotlin/kotlin.kotlin_builtins 0 B │ 0 B │ + kotlin/ ──────────┼───────────┼──────────────────────────────────────── 28.7 KiB │ 0 B │ (total) ```
relocate('kotlin.', 'shadow.kotlin.') | ||
relocate('kotlin.', 'shadow.kotlin.') { | ||
exclude('kotlin/kotlin.kotlin_builtins') | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
OLD: old.jar
NEW: new.jar
JAR │ old │ new │ diff
───────┼──────────┼──────────┼──────
class │ 12.6 MiB │ 12.6 MiB │ 0 B
other │ 74.6 KiB │ 74.6 KiB │ 0 B
───────┼──────────┼──────────┼──────
total │ 12.7 MiB │ 12.7 MiB │ 0 B
CLASSES │ old │ new │ diff
─────────┼───────┼───────┼───────────
classes │ 3149 │ 3149 │ 0 (+0 -0)
methods │ 27835 │ 27835 │ 0 (+0 -0)
fields │ 6257 │ 6257 │ 0 (+0 -0)
=================
==== JAR ====
=================
size │ diff │ path
──────────┼───────────┼────────────────────────────────────────
│ -28.7 KiB │ - shadow/kotlin/kotlin.kotlin_builtins
28.7 KiB │ +28.7 KiB │ + kotlin/kotlin.kotlin_builtins
0 B │ 0 B │ + kotlin/
──────────┼───────────┼────────────────────────────────────────
28.7 KiB │ 0 B │ (total)
Name nameIdentifier18 = Name.identifier("kotlin");
Intrinsics.checkNotNullExpressionValue(nameIdentifier18, "identifier(...)");
BUILT_INS_PACKAGE_NAME = nameIdentifier18;

There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Or we should suggest users exclude all builtin files by **/kotlin.kotlin_builtins
instead such one.
@Goooler, are there any details for which cases it becomes necessary to shadow the When configured as in the functional test, it turns out that the |
The Jetbrains Exposed was relocated by auto relocation (adding shadow prefixes for all packages), and it's transitive dependencies were relocated too... |
In general case, we should not shadow stdlib, because for many standard Kotlin classes, their name is fixed and protected from relocation (like here). At the same time, |
@Goooler, Summing up, I can say: Neither shadow plugin nor Kotlin are ready for relocation of
|
Thanks for the help! I document this point in #1760. Would you mind taking a review? |
Refs #1622