From 3a4d88568028f71782e4b8be3cd1d38bf442adac Mon Sep 17 00:00:00 2001 From: Kuan-Ying Chou Date: Wed, 24 Apr 2024 17:43:32 +0100 Subject: [PATCH 1/2] Test functional interface (cherry picked from commit 67afc258feefb2d16e67122ea63d8dde46ac134f) --- kotlin-analysis-api/testData/javaModifiers.kt | 8 ++++++++ .../devtools/ksp/processor/JavaModifierProcessor.kt | 7 +++++++ 2 files changed, 15 insertions(+) diff --git a/kotlin-analysis-api/testData/javaModifiers.kt b/kotlin-analysis-api/testData/javaModifiers.kt index bd59392548..de0cd0b0bb 100644 --- a/kotlin-analysis-api/testData/javaModifiers.kt +++ b/kotlin-analysis-api/testData/javaModifiers.kt @@ -102,6 +102,10 @@ // OuterKotlinClass: OPEN : PUBLIC // END // MODULE: module1 +// FILE: ALib.kt +fun interface ALib { + fun test(): Boolean +} // FILE: DependencyOuterJavaClass.java public class DependencyOuterJavaClass { public class DependencyInnerJavaClass {} @@ -152,6 +156,10 @@ open class DependencyOuterKotlinClass { fun synchronizedFun(): String = "" } // MODULE: main(module1) +// FILE: ASrc.kt +fun interface ASrc { + fun test(): Boolean +} // FILE: a.kt annotation class Test diff --git a/test-utils/src/main/kotlin/com/google/devtools/ksp/processor/JavaModifierProcessor.kt b/test-utils/src/main/kotlin/com/google/devtools/ksp/processor/JavaModifierProcessor.kt index 4b03742721..8ac070fe5e 100644 --- a/test-utils/src/main/kotlin/com/google/devtools/ksp/processor/JavaModifierProcessor.kt +++ b/test-utils/src/main/kotlin/com/google/devtools/ksp/processor/JavaModifierProcessor.kt @@ -18,6 +18,7 @@ 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.* import com.google.devtools.ksp.symbol.KSPropertyDeclaration @@ -31,6 +32,12 @@ class JavaModifierProcessor : AbstractTestProcessor() { } override fun process(resolver: Resolver): List { + listOf("ALib", "ASrc").forEach { clsName -> + resolver.getClassDeclarationByName(clsName)!!.let { cls -> + println(cls.modifiers.contains(Modifier.FUN)) + } + } + resolver.getSymbolsWithAnnotation("Test") .map { it as KSClassDeclaration From 5ca519116ee3105ef3ef88e415fb0cd3a82cd7a3 Mon Sep 17 00:00:00 2001 From: Jiaxiang Chen Date: Mon, 6 May 2024 14:36:41 -0700 Subject: [PATCH 2/2] check functional interface for modifiers --- .../ksp/impl/symbol/kotlin/KSClassDeclarationImpl.kt | 3 +++ .../devtools/ksp/processor/JavaModifierProcessor.kt | 2 +- test-utils/testData/api/javaModifiers.kt | 8 ++++++++ 3 files changed, 12 insertions(+), 1 deletion(-) diff --git a/kotlin-analysis-api/src/main/kotlin/com/google/devtools/ksp/impl/symbol/kotlin/KSClassDeclarationImpl.kt b/kotlin-analysis-api/src/main/kotlin/com/google/devtools/ksp/impl/symbol/kotlin/KSClassDeclarationImpl.kt index e5161bb546..06fef7653d 100644 --- a/kotlin-analysis-api/src/main/kotlin/com/google/devtools/ksp/impl/symbol/kotlin/KSClassDeclarationImpl.kt +++ b/kotlin-analysis-api/src/main/kotlin/com/google/devtools/ksp/impl/symbol/kotlin/KSClassDeclarationImpl.kt @@ -211,6 +211,9 @@ internal fun KtClassOrObjectSymbol.toModifiers(): Set { if (visibility != JavaVisibilities.PackageVisibility) { result.add(visibility.toModifier()) } + if (isFun) { + result.add(Modifier.FUN) + } if (isInline) { result.add(Modifier.INLINE) } diff --git a/test-utils/src/main/kotlin/com/google/devtools/ksp/processor/JavaModifierProcessor.kt b/test-utils/src/main/kotlin/com/google/devtools/ksp/processor/JavaModifierProcessor.kt index 8ac070fe5e..97442d7641 100644 --- a/test-utils/src/main/kotlin/com/google/devtools/ksp/processor/JavaModifierProcessor.kt +++ b/test-utils/src/main/kotlin/com/google/devtools/ksp/processor/JavaModifierProcessor.kt @@ -34,7 +34,7 @@ class JavaModifierProcessor : AbstractTestProcessor() { override fun process(resolver: Resolver): List { listOf("ALib", "ASrc").forEach { clsName -> resolver.getClassDeclarationByName(clsName)!!.let { cls -> - println(cls.modifiers.contains(Modifier.FUN)) + assert(cls.modifiers.contains(Modifier.FUN)) } } diff --git a/test-utils/testData/api/javaModifiers.kt b/test-utils/testData/api/javaModifiers.kt index 7254b7629f..cd458f23dc 100644 --- a/test-utils/testData/api/javaModifiers.kt +++ b/test-utils/testData/api/javaModifiers.kt @@ -102,6 +102,10 @@ // OuterKotlinClass: OPEN : PUBLIC // END // MODULE: module1 +// FILE: ALib.kt +fun interface ALib { + fun test(): Boolean +} // FILE: DependencyOuterJavaClass.java public class DependencyOuterJavaClass { public class DependencyInnerJavaClass {} @@ -152,6 +156,10 @@ open class DependencyOuterKotlinClass { fun synchronizedFun(): String = "" } // MODULE: main(module1) +// FILE: ASrc.kt +fun interface ASrc { + fun test(): Boolean +} // FILE: a.kt annotation class Test