Fix jvm modifiers
diff --git a/kotlin-analysis-api/src/main/kotlin/com/google/devtools/ksp/impl/ResolverAAImpl.kt b/kotlin-analysis-api/src/main/kotlin/com/google/devtools/ksp/impl/ResolverAAImpl.kt index 5edf178..d0078c1 100644 --- a/kotlin-analysis-api/src/main/kotlin/com/google/devtools/ksp/impl/ResolverAAImpl.kt +++ b/kotlin-analysis-api/src/main/kotlin/com/google/devtools/ksp/impl/ResolverAAImpl.kt
@@ -321,14 +321,22 @@ else -> null } - private fun transientModifierIfApplicableTo(declaration: KSDeclaration): Modifier? = when (declaration) { - is KSPropertyDeclaration if declaration.jvmAccessFlag and Opcodes.ACC_TRANSIENT != 0 -> Modifier.JAVA_TRANSIENT - else -> null + private fun transientModifierIfApplicableTo(declaration: KSDeclaration): Modifier? { + val property = when (declaration) { + is KSBackingField -> declaration.property + is KSPropertyDeclaration if !shouldEnableNewFeatures() -> declaration + else -> return null + } + return if (property.jvmAccessFlag and Opcodes.ACC_TRANSIENT != 0) Modifier.JAVA_TRANSIENT else null } - private fun volatileModifierIfApplicableTo(declaration: KSDeclaration): Modifier? = when (declaration) { - is KSPropertyDeclaration if declaration.jvmAccessFlag and Opcodes.ACC_VOLATILE != 0 -> Modifier.JAVA_VOLATILE - else -> null + private fun volatileModifierIfApplicableTo(declaration: KSDeclaration): Modifier? { + val property = when (declaration) { + is KSBackingField -> declaration.property + is KSPropertyDeclaration if !shouldEnableNewFeatures() -> declaration + else -> return null + } + return if (property.jvmAccessFlag and Opcodes.ACC_VOLATILE != 0) Modifier.JAVA_VOLATILE else null } private fun strictModifierIfApplicableTo(declaration: KSDeclaration): Modifier? = when (declaration) {
diff --git a/kotlin-analysis-api/src/test/kotlin/com/google/devtools/ksp/test/KSPUnitTestSuite.kt b/kotlin-analysis-api/src/test/kotlin/com/google/devtools/ksp/test/KSPUnitTestSuite.kt index 0689c87..1f5c501 100644 --- a/kotlin-analysis-api/src/test/kotlin/com/google/devtools/ksp/test/KSPUnitTestSuite.kt +++ b/kotlin-analysis-api/src/test/kotlin/com/google/devtools/ksp/test/KSPUnitTestSuite.kt
@@ -519,7 +519,7 @@ @Bug("https://github.com/google/ksp/issues/3123", BugState.OPEN) @Bug("https://github.com/google/ksp/issues/3125", BugState.FIXED) - @Bug("https://github.com/google/ksp/issues/3155", BugState.OPEN) + @Bug("https://github.com/google/ksp/issues/3155", BugState.FIXED) @Bug("https://github.com/google/ksp/issues/3185", BugState.FIXED) @TestMetadata("javaModifiers.kt") @Test
diff --git a/kotlin-analysis-api/testData/javaModifiers.kt b/kotlin-analysis-api/testData/javaModifiers.kt index bfc79e6..acf3d26 100644 --- a/kotlin-analysis-api/testData/javaModifiers.kt +++ b/kotlin-analysis-api/testData/javaModifiers.kt
@@ -48,10 +48,12 @@ // DependencyOuterJavaClass.staticPublicField: FINAL JAVA_STATIC PUBLIC : FINAL JAVA_STATIC PUBLIC // DependencyOuterJavaClass.staticPublicMethod: FINAL JAVA_STATIC PUBLIC : FINAL JAVA_STATIC PUBLIC // DependencyOuterJavaClass.synchronizedFun: OPEN : JAVA_SYNCHRONIZED -// EXPECT NEXT: DependencyOuterJavaClass.transientField.field: FINAL : FINAL -// DependencyOuterJavaClass.transientField: FINAL : FINAL JAVA_TRANSIENT -// EXPECT NEXT: DependencyOuterJavaClass.volatileField.field: FINAL : FINAL -// DependencyOuterJavaClass.volatileField: FINAL : FINAL JAVA_VOLATILE +// EXPECT CURRENT: DependencyOuterJavaClass.transientField: FINAL : FINAL JAVA_TRANSIENT +// EXPECT NEXT: DependencyOuterJavaClass.transientField.field: FINAL : FINAL JAVA_TRANSIENT +// EXPECT NEXT: DependencyOuterJavaClass.transientField: FINAL : FINAL +// EXPECT CURRENT: DependencyOuterJavaClass.volatileField: FINAL : FINAL JAVA_VOLATILE +// EXPECT NEXT: DependencyOuterJavaClass.volatileField.field: FINAL : FINAL JAVA_VOLATILE +// EXPECT NEXT: DependencyOuterJavaClass.volatileField: FINAL : FINAL // DependencyOuterJavaClass: OPEN PUBLIC : PUBLIC // DependencyOuterKotlinClass.<init>: FINAL PUBLIC : FINAL PUBLIC // DependencyOuterKotlinClass.Companion.<init>: FINAL PRIVATE : FINAL PRIVATE @@ -73,10 +75,12 @@ // DependencyOuterKotlinClass.DependencyNestedKotlinClass.<init>: FINAL PUBLIC : FINAL PUBLIC // DependencyOuterKotlinClass.DependencyNestedKotlinClass: OPEN PUBLIC : PUBLIC // DependencyOuterKotlinClass.synchronizedFun: FINAL PUBLIC : FINAL JAVA_SYNCHRONIZED PUBLIC -// EXPECT NEXT: DependencyOuterKotlinClass.transientProperty.field: FINAL PRIVATE : FINAL PRIVATE -// DependencyOuterKotlinClass.transientProperty: FINAL PUBLIC : FINAL JAVA_TRANSIENT PUBLIC -// EXPECT NEXT: DependencyOuterKotlinClass.volatileProperty.field: FINAL PRIVATE : FINAL PRIVATE -// DependencyOuterKotlinClass.volatileProperty: FINAL PUBLIC : FINAL JAVA_VOLATILE PUBLIC +// EXPECT CURRENT: DependencyOuterKotlinClass.transientProperty: FINAL PUBLIC : FINAL JAVA_TRANSIENT PUBLIC +// EXPECT NEXT: DependencyOuterKotlinClass.transientProperty.field: FINAL PRIVATE : FINAL JAVA_TRANSIENT PRIVATE +// EXPECT NEXT: DependencyOuterKotlinClass.transientProperty: FINAL PUBLIC : FINAL PUBLIC +// EXPECT CURRENT: DependencyOuterKotlinClass.volatileProperty: FINAL PUBLIC : FINAL JAVA_VOLATILE PUBLIC +// EXPECT NEXT: DependencyOuterKotlinClass.volatileProperty.field: FINAL PRIVATE : FINAL JAVA_VOLATILE PRIVATE +// EXPECT NEXT: DependencyOuterKotlinClass.volatileProperty: FINAL PUBLIC : FINAL PUBLIC // DependencyOuterKotlinClass: OPEN PUBLIC : PUBLIC // HasTypeAliasFuns: Modifiers: [] // HasTypeAliasFuns: Visibility: PUBLIC