Skip to content

Commit

Permalink
check light accessors for data class jvm name
Browse files Browse the repository at this point in the history
  • Loading branch information
neetopia committed Jun 13, 2024
1 parent ee4ff8b commit d5416a8
Show file tree
Hide file tree
Showing 4 changed files with 53 additions and 2 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,7 @@ import org.jetbrains.kotlin.builtins.jvm.JavaToKotlinClassMap
import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCliJavaFileManagerImpl
import org.jetbrains.kotlin.fir.types.isRaw
import org.jetbrains.kotlin.fir.types.typeContext
import org.jetbrains.kotlin.light.classes.symbol.methods.SymbolLightAccessorMethod
import org.jetbrains.kotlin.light.classes.symbol.methods.SymbolLightSimpleMethod
import org.jetbrains.kotlin.load.java.structure.impl.JavaClassImpl
import org.jetbrains.kotlin.load.kotlin.TypeMappingMode
Expand Down Expand Up @@ -488,8 +489,13 @@ class ResolverAAImpl(
(
(accessor.receiver.closestClassDeclaration() as? KSClassDeclarationImpl)
?.ktClassOrObjectSymbol?.psi as? KtClassOrObject
)?.toLightClass()?.allMethods?.filterIsInstance<SymbolLightSimpleMethod>()
?.singleOrNull {
)?.toLightClass()?.allMethods
?.let {
// If there are light accessors, information in light accessors are more accurate.
// check light accessor first, if not found then default to light simple method.
it.filterIsInstance<SymbolLightAccessorMethod>() + it.filterIsInstance<SymbolLightSimpleMethod>()
}
?.firstOrNull {
(it.parameters.isNotEmpty() xor (accessor is KSPropertyGetter)) &&
it.kotlinOrigin == (accessor.receiver as? KSPropertyDeclarationImpl)?.ktPropertySymbol?.psi
}?.let {
Expand Down
11 changes: 11 additions & 0 deletions kotlin-analysis-api/testData/jvmName.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
// TEST PROCESSOR: JvmNameProcessor
// EXPECTED:
// (getX, setX), (getY, null)
// (getX, setX), (getY, null)
// END
// MODULE: lib
// FILE: Lib.kt
data class TestLibDataClass(var x: Int, val y: String)
// MODULE: main(lib)
// FILE: K.kt
data class TestDataClass(var x: Int, val y: String)
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
package com.google.devtools.ksp.processor

import com.google.devtools.ksp.KspExperimental
import com.google.devtools.ksp.getClassDeclarationByName
import com.google.devtools.ksp.processing.Resolver
import com.google.devtools.ksp.symbol.KSAnnotated

class JvmNameProcessor : AbstractTestProcessor() {
val results = mutableListOf<String>()
override fun toResult(): List<String> {
return results
}

@OptIn(KspExperimental::class)
override fun process(resolver: Resolver): List<KSAnnotated> {
listOf("TestDataClass", "TestLibDataClass").forEach { clsName ->
resolver.getClassDeclarationByName(clsName)?.let { cls ->
results.add(
cls.getAllProperties().map {
"(${it.getter?.let { resolver.getJvmName(it) }}, " +
"${it.setter?.let { resolver.getJvmName(it) }})"
}.toList().joinToString()
)
}
}
return emptyList()
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -359,6 +359,12 @@ class KSPAATest : AbstractKSPAATest() {
runTest("../kotlin-analysis-api/testData/javaWildcards2.kt")
}

@TestMetadata("jvmName.kt")
@Test
fun testJvmName() {
runTest("../kotlin-analysis-api/testData/jvmName.kt")
}

@TestMetadata("lateinitProperties.kt")
@Test
fun testLateinitProperties() {
Expand Down

0 comments on commit d5416a8

Please sign in to comment.