Skip to content

Commit

Permalink
special handling of inline value class signature
Browse files Browse the repository at this point in the history
  • Loading branch information
neetopia committed Jun 17, 2024
1 parent d5416a8 commit b9db1a4
Show file tree
Hide file tree
Showing 3 changed files with 25 additions and 9 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -51,14 +51,7 @@ import com.intellij.psi.PsiMethod
import com.intellij.psi.impl.file.impl.JavaFileManager
import org.jetbrains.kotlin.analysis.api.components.buildSubstitutor
import org.jetbrains.kotlin.analysis.api.fir.types.KaFirType
import org.jetbrains.kotlin.analysis.api.symbols.KtEnumEntrySymbol
import org.jetbrains.kotlin.analysis.api.symbols.KtFunctionLikeSymbol
import org.jetbrains.kotlin.analysis.api.symbols.KtJavaFieldSymbol
import org.jetbrains.kotlin.analysis.api.symbols.KtNamedClassOrObjectSymbol
import org.jetbrains.kotlin.analysis.api.symbols.KtPropertyAccessorSymbol
import org.jetbrains.kotlin.analysis.api.symbols.KtPropertySymbol
import org.jetbrains.kotlin.analysis.api.symbols.KtSymbol
import org.jetbrains.kotlin.analysis.api.symbols.KtTypeAliasSymbol
import org.jetbrains.kotlin.analysis.api.symbols.*
import org.jetbrains.kotlin.analysis.api.types.KtType
import org.jetbrains.kotlin.analysis.decompiler.stub.file.ClsKotlinBinaryClassCache
import org.jetbrains.kotlin.analysis.low.level.api.fir.api.getFirResolveSession
Expand Down Expand Up @@ -757,7 +750,18 @@ class ResolverAAImpl(
fun KSType.toSignature(): String {
return if (this is KSTypeImpl) {
analyze {
this@toSignature.type.toSignature()
val decl = (this@toSignature.declaration as? KSClassDeclaration)
// special handling for single parameter inline value class
// unwrap the underlying for jvm signature.
if (
decl != null &&
(decl.modifiers.contains(Modifier.INLINE) || decl.modifiers.contains(Modifier.VALUE)) &&
decl.primaryConstructor?.parameters?.size == 1
) {
decl.primaryConstructor!!.parameters.single().type.resolve().toSignature()
} else {
this@toSignature.type.toSignature()
}
}
} else {
"<ERROR>"
Expand Down
6 changes: 6 additions & 0 deletions kotlin-analysis-api/testData/signatureMapper.kt
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@
// LCls;
// a: I
// foo: ()Ljava/lang/String;
// f: ()I
// <init>: ()V
// LJavaIntefaceWithVoid;
// getVoid: ()Ljava/lang/Void;
Expand All @@ -38,10 +39,15 @@
// END

// FILE: Cls.kt
@JvmInline
value class MyInlineClass(val value: Int)

class Cls {
val a: Int = 1

fun foo(): String { return "1" }

fun f(): MyInlineClass = 1
}

// FILE: JavaIntefaceWithVoid.java
Expand Down
6 changes: 6 additions & 0 deletions test-utils/testData/api/signatureMapper.kt
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@
// LCls;
// a: I
// foo: ()Ljava/lang/String;
// f: ()I
// <init>: ()V
// LJavaIntefaceWithVoid;
// getVoid: ()Ljava/lang/Void;
Expand All @@ -38,10 +39,15 @@
// END

// FILE: Cls.kt
@JvmInline
value class MyInlineClass(val value: Int)

class Cls {
val a: Int = 1

fun foo(): String { return "1" }

fun f(): MyInlineClass = 1
}

// FILE: JavaIntefaceWithVoid.java
Expand Down

0 comments on commit b9db1a4

Please sign in to comment.