Skip to content

Commit d87c083

Browse files
committed
fix backing field checking for top level callables, downcast to FIR internal to get file class names
1 parent d73953f commit d87c083

File tree

2 files changed

+28
-7
lines changed

2 files changed

+28
-7
lines changed

kotlin-analysis-api/src/main/kotlin/com/google/devtools/ksp/impl/symbol/kotlin/KSPropertyDeclarationImpl.kt

+28-6
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@
1515
* limitations under the License.
1616
*/
1717

18+
@file:Suppress("INVISIBLE_REFERENCE", "INVISIBLE_MEMBER")
19+
1820
package com.google.devtools.ksp.impl.symbol.kotlin
1921

2022
import com.google.devtools.ksp.closestClassDeclaration
@@ -27,15 +29,19 @@ import com.google.devtools.ksp.impl.symbol.kotlin.resolved.KSTypeReferenceResolv
2729
import com.google.devtools.ksp.impl.symbol.util.BinaryClassInfoCache
2830
import com.google.devtools.ksp.symbol.*
2931
import com.intellij.psi.PsiClass
32+
import org.jetbrains.kotlin.analysis.api.KtConstantInitializerValue
3033
import org.jetbrains.kotlin.analysis.api.annotations.KtAnnotationApplication
3134
import org.jetbrains.kotlin.analysis.api.annotations.annotations
35+
import org.jetbrains.kotlin.analysis.api.fir.symbols.KtFirKotlinPropertySymbol
3236
import org.jetbrains.kotlin.analysis.api.symbols.KtKotlinPropertySymbol
3337
import org.jetbrains.kotlin.analysis.api.symbols.KtPropertySymbol
3438
import org.jetbrains.kotlin.analysis.api.symbols.receiverType
3539
import org.jetbrains.kotlin.descriptors.Modality
3640
import org.jetbrains.kotlin.descriptors.annotations.AnnotationUseSiteTarget
3741
import org.jetbrains.kotlin.descriptors.java.JavaVisibilities
3842
import org.jetbrains.kotlin.load.java.structure.impl.JavaClassImpl
43+
import org.jetbrains.kotlin.load.kotlin.JvmPackagePartSource
44+
import org.jetbrains.kotlin.load.kotlin.KotlinJvmBinarySourceElement
3945
import org.jetbrains.kotlin.psi.KtProperty
4046

4147
class KSPropertyDeclarationImpl private constructor(internal val ktPropertySymbol: KtPropertySymbol) :
@@ -107,13 +113,29 @@ class KSPropertyDeclarationImpl private constructor(internal val ktPropertySymbo
107113

108114
override val hasBackingField: Boolean by lazy {
109115
if (origin == Origin.KOTLIN_LIB || origin == Origin.JAVA_LIB) {
110-
val fileManager = ResolverAAImpl.instance.javaFileManager
111-
val parentClass = this.findParentOfType<KSClassDeclaration>()
112-
val classId = (parentClass as KSClassDeclarationImpl).ktClassOrObjectSymbol.classIdIfNonLocal!!
113-
val virtualFileContent = analyze {
114-
(fileManager.findClass(classId, analysisScope) as JavaClassImpl).virtualFile!!.contentsToByteArray()
116+
when {
117+
ktPropertySymbol.receiverParameter != null -> false
118+
ktPropertySymbol.initializer is KtConstantInitializerValue -> true
119+
(ktPropertySymbol as? KtKotlinPropertySymbol)?.isLateInit == true -> true
120+
ktPropertySymbol.modality == Modality.ABSTRACT -> false
121+
else -> {
122+
val classId = when (
123+
val containerSource =
124+
(ktPropertySymbol as? KtFirKotlinPropertySymbol)?.firSymbol?.containerSource
125+
) {
126+
is JvmPackagePartSource -> containerSource.classId
127+
is KotlinJvmBinarySourceElement -> containerSource.binaryClass.classId
128+
else -> null
129+
} ?: return@lazy ktPropertySymbol.hasBackingField
130+
val fileManager = ResolverAAImpl.instance.javaFileManager
131+
val virtualFileContent = analyze {
132+
(fileManager.findClass(classId, analysisScope) as JavaClassImpl)
133+
.virtualFile!!.contentsToByteArray()
134+
}
135+
BinaryClassInfoCache.getCached(classId, virtualFileContent)
136+
.fieldAccFlags.containsKey(simpleName.asString())
137+
}
115138
}
116-
BinaryClassInfoCache.getCached(classId, virtualFileContent).fieldAccFlags.containsKey(simpleName.asString())
117139
} else {
118140
ktPropertySymbol.hasBackingField
119141
}

test-utils/src/test/kotlin/com/google/devtools/ksp/test/KSPAATest.kt

-1
Original file line numberDiff line numberDiff line change
@@ -130,7 +130,6 @@ class KSPAATest : AbstractKSPAATest() {
130130
runTest("../test-utils/testData/api/asMemberOf.kt")
131131
}
132132

133-
@Disabled
134133
@TestMetadata("backingFields.kt")
135134
@Test
136135
fun testBackingFields() {

0 commit comments

Comments
 (0)