Skip to content

Commit bcaf0f1

Browse files
jsjeonting-yuan
authored andcommitted
Adapt to removal of old JVM backend
See https://youtrack.jetbrains.com/issue/KT-71197 Co-authored-by: Alexander Udalov <[email protected]> (cherry picked from commit 4ca3406)
1 parent 5364f92 commit bcaf0f1

File tree

1 file changed

+46
-19
lines changed
  • compiler-plugin/src/main/kotlin/com/google/devtools/ksp/processing/impl

1 file changed

+46
-19
lines changed

compiler-plugin/src/main/kotlin/com/google/devtools/ksp/processing/impl/ResolverImpl.kt

+46-19
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ import com.intellij.psi.impl.source.PsiClassReferenceType
5757
import org.jetbrains.kotlin.builtins.KotlinBuiltIns
5858
import org.jetbrains.kotlin.builtins.jvm.JavaToKotlinClassMap
5959
import org.jetbrains.kotlin.codegen.ClassBuilderMode
60-
import org.jetbrains.kotlin.codegen.OwnerKind
60+
import org.jetbrains.kotlin.codegen.signature.BothSignatureWriter
6161
import org.jetbrains.kotlin.codegen.state.KotlinTypeMapper
6262
import org.jetbrains.kotlin.config.LanguageVersionSettingsImpl
6363
import org.jetbrains.kotlin.container.ComponentProvider
@@ -66,9 +66,11 @@ import org.jetbrains.kotlin.container.tryGetService
6666
import org.jetbrains.kotlin.descriptors.*
6767
import org.jetbrains.kotlin.descriptors.annotations.AnnotationDescriptor
6868
import org.jetbrains.kotlin.descriptors.annotations.Annotations
69+
import org.jetbrains.kotlin.fileClasses.JvmFileClassUtil
6970
import org.jetbrains.kotlin.incremental.components.NoLookupLocation
7071
import org.jetbrains.kotlin.load.java.components.TypeUsage
7172
import org.jetbrains.kotlin.load.java.descriptors.JavaForKotlinOverridePropertyDescriptor
73+
import org.jetbrains.kotlin.load.java.descriptors.getImplClassNameForDeserialized
7274
import org.jetbrains.kotlin.load.java.lazy.*
7375
import org.jetbrains.kotlin.load.java.lazy.descriptors.LazyJavaTypeParameterDescriptor
7476
import org.jetbrains.kotlin.load.java.lazy.types.JavaTypeResolver
@@ -106,13 +108,15 @@ import org.jetbrains.kotlin.resolve.multiplatform.findExpects
106108
import org.jetbrains.kotlin.resolve.scopes.DescriptorKindFilter
107109
import org.jetbrains.kotlin.resolve.scopes.LexicalScope
108110
import org.jetbrains.kotlin.resolve.scopes.MemberScope
111+
import org.jetbrains.kotlin.serialization.deserialization.descriptors.DescriptorWithContainerSource
109112
import org.jetbrains.kotlin.types.*
110113
import org.jetbrains.kotlin.types.checker.SimpleClassicTypeSystemContext
111114
import org.jetbrains.kotlin.types.typeUtil.replaceArgumentsWithStarProjections
112115
import org.jetbrains.kotlin.types.typeUtil.substitute
113116
import org.jetbrains.kotlin.types.typeUtil.supertypes
114117
import org.jetbrains.kotlin.util.containingNonLocalDeclaration
115118
import org.jetbrains.org.objectweb.asm.Opcodes
119+
import org.jetbrains.org.objectweb.asm.Type
116120
import java.io.File
117121
import java.util.*
118122

@@ -356,20 +360,28 @@ class ResolverImpl(
356360
override fun mapToJvmSignature(declaration: KSDeclaration): String? = mapToJvmSignatureInternal(declaration)
357361

358362
internal fun mapToJvmSignatureInternal(declaration: KSDeclaration): String? = when (declaration) {
359-
is KSClassDeclaration -> resolveClassDeclaration(declaration)?.let { typeMapper.mapType(it).descriptor }
363+
is KSClassDeclaration -> resolveClassDeclaration(declaration)?.let {
364+
typeMapper.mapType(it.defaultType).descriptor
365+
}
360366
is KSFunctionDeclaration -> resolveFunctionDeclaration(declaration)?.let {
361367
when (it) {
362368
is FunctionDescriptor -> typeMapper.mapAsmMethod(it).descriptor
363-
is PropertyDescriptor -> typeMapper.mapFieldSignature(it.type, it) ?: typeMapper.mapType(it).descriptor
369+
is PropertyDescriptor -> typeMapper.mapPropertySignature(it)
364370
else -> throw IllegalStateException("Unexpected descriptor type for declaration: $declaration")
365371
}
366372
}
367373
is KSPropertyDeclaration -> resolvePropertyDeclaration(declaration)?.let {
368-
typeMapper.mapFieldSignature(it.type, it) ?: typeMapper.mapType(it).descriptor
374+
typeMapper.mapPropertySignature(it)
369375
}
370376
else -> null
371377
}
372378

379+
private fun KotlinTypeMapper.mapPropertySignature(descriptor: PropertyDescriptor): String? {
380+
val sw = BothSignatureWriter(BothSignatureWriter.Mode.TYPE)
381+
writeFieldSignature(descriptor.type, descriptor, sw)
382+
return sw.makeJavaGenericSignature() ?: mapType(descriptor.type).descriptor
383+
}
384+
373385
override fun overrides(overrider: KSDeclaration, overridee: KSDeclaration): Boolean {
374386
fun resolveForOverride(declaration: KSDeclaration): DeclarationDescriptor? {
375387
return when (declaration) {
@@ -880,22 +892,13 @@ class ResolverImpl(
880892

881893
@KspExperimental
882894
override fun getJvmName(accessor: KSPropertyAccessor): String? {
883-
val descriptor = resolvePropertyAccessorDeclaration(accessor)
884-
885-
return descriptor?.let {
886-
// KotlinTypeMapper.mapSignature always uses OwnerKind.IMPLEMENTATION
887-
typeMapper.mapFunctionName(descriptor, OwnerKind.IMPLEMENTATION)
888-
}
895+
return resolvePropertyAccessorDeclaration(accessor)?.let(typeMapper::mapFunctionName)
889896
}
890897

891898
@KspExperimental
892899
override fun getJvmName(declaration: KSFunctionDeclaration): String? {
893900
// function names might be mangled if they receive inline class parameters or they are internal
894-
val descriptor = resolveFunctionDeclaration(declaration)
895-
return (descriptor as? FunctionDescriptor)?.let {
896-
// KotlinTypeMapper.mapSignature always uses OwnerKind.IMPLEMENTATION
897-
typeMapper.mapFunctionName(it, OwnerKind.IMPLEMENTATION)
898-
}
901+
return (resolveFunctionDeclaration(declaration) as? FunctionDescriptor)?.let(typeMapper::mapFunctionName)
899902
}
900903

901904
@KspExperimental
@@ -911,11 +914,35 @@ class ResolverImpl(
911914
}
912915

913916
private fun getJvmOwnerQualifiedName(descriptor: DeclarationDescriptor): String? {
914-
return try {
915-
typeMapper.mapImplementationOwner(descriptor).className
916-
} catch (unsupported: UnsupportedOperationException) {
917-
null
917+
return typeMapper.mapJvmImplementationOwner(descriptor)?.className
918+
}
919+
920+
private fun KotlinTypeMapper.mapJvmImplementationOwner(descriptor: DeclarationDescriptor): Type? {
921+
if (descriptor is ConstructorDescriptor) {
922+
return mapClass(descriptor.constructedClass)
918923
}
924+
925+
return when (val container = descriptor.containingDeclaration) {
926+
is PackageFragmentDescriptor ->
927+
internalNameForPackageMemberOwner(descriptor as CallableMemberDescriptor)?.let(Type::getObjectType)
928+
is ClassDescriptor ->
929+
mapClass(container)
930+
else -> null
931+
}
932+
}
933+
934+
private fun internalNameForPackageMemberOwner(descriptor: CallableMemberDescriptor): String? {
935+
val file = DescriptorToSourceUtils.getContainingFile(descriptor)
936+
if (file != null) {
937+
return JvmFileClassUtil.getFileClassInternalName(file)
938+
}
939+
940+
val directMember = DescriptorUtils.getDirectMember(descriptor)
941+
if (directMember is DescriptorWithContainerSource) {
942+
return directMember.getImplClassNameForDeserialized()?.internalName
943+
}
944+
945+
return null
919946
}
920947

921948
// TODO: refactor and reuse BinaryClassInfoCache

0 commit comments

Comments
 (0)