diff --git a/kotlin-analysis-api/src/main/kotlin/com/google/devtools/ksp/impl/symbol/kotlin/AbstractKSDeclarationImpl.kt b/kotlin-analysis-api/src/main/kotlin/com/google/devtools/ksp/impl/symbol/kotlin/AbstractKSDeclarationImpl.kt index 1e63841bd0..cbfb6a8e3d 100644 --- a/kotlin-analysis-api/src/main/kotlin/com/google/devtools/ksp/impl/symbol/kotlin/AbstractKSDeclarationImpl.kt +++ b/kotlin-analysis-api/src/main/kotlin/com/google/devtools/ksp/impl/symbol/kotlin/AbstractKSDeclarationImpl.kt @@ -63,6 +63,7 @@ abstract class AbstractKSDeclarationImpl(val ktDeclarationSymbol: KaDeclarationS is KaClassSymbol -> ktDeclarationSymbol.toModifiers() is KaFunctionSymbol -> ktDeclarationSymbol.toModifiers() is KaJavaFieldSymbol -> ktDeclarationSymbol.toModifiers() + is KaTypeAliasSymbol -> ktDeclarationSymbol.toModifiers() else -> throw IllegalStateException("Unexpected symbol type ${ktDeclarationSymbol.javaClass}") } } else { diff --git a/kotlin-analysis-api/src/main/kotlin/com/google/devtools/ksp/impl/symbol/kotlin/KSTypeAliasImpl.kt b/kotlin-analysis-api/src/main/kotlin/com/google/devtools/ksp/impl/symbol/kotlin/KSTypeAliasImpl.kt index 65a21fc0c3..4173895c8e 100644 --- a/kotlin-analysis-api/src/main/kotlin/com/google/devtools/ksp/impl/symbol/kotlin/KSTypeAliasImpl.kt +++ b/kotlin-analysis-api/src/main/kotlin/com/google/devtools/ksp/impl/symbol/kotlin/KSTypeAliasImpl.kt @@ -19,13 +19,8 @@ package com.google.devtools.ksp.impl.symbol.kotlin import com.google.devtools.ksp.common.KSObjectCache import com.google.devtools.ksp.common.impl.KSNameImpl import com.google.devtools.ksp.impl.symbol.kotlin.resolved.KSTypeReferenceResolvedImpl -import com.google.devtools.ksp.symbol.KSExpectActual -import com.google.devtools.ksp.symbol.KSName -import com.google.devtools.ksp.symbol.KSTypeAlias -import com.google.devtools.ksp.symbol.KSTypeReference -import com.google.devtools.ksp.symbol.KSVisitor -import org.jetbrains.kotlin.analysis.api.symbols.KaTypeAliasSymbol -import org.jetbrains.kotlin.analysis.api.symbols.nameOrAnonymous +import com.google.devtools.ksp.symbol.* +import org.jetbrains.kotlin.analysis.api.symbols.* class KSTypeAliasImpl private constructor(private val ktTypeAliasSymbol: KaTypeAliasSymbol) : KSTypeAlias, @@ -62,3 +57,12 @@ class KSTypeAliasImpl private constructor(private val ktTypeAliasSymbol: KaTypeA return ktTypeAliasSymbol.defer(::getCached) } } + +internal fun KaTypeAliasSymbol.toModifiers(): Set { + val result = mutableSetOf() + result.add(modality.toModifier()) + if (visibility != KaSymbolVisibility.PACKAGE_PRIVATE) { + result.add(visibility.toModifier()) + } + return result +} diff --git a/kotlin-analysis-api/testData/javaModifiers.kt b/kotlin-analysis-api/testData/javaModifiers.kt index 6bfa88672c..82373c7978 100644 --- a/kotlin-analysis-api/testData/javaModifiers.kt +++ b/kotlin-analysis-api/testData/javaModifiers.kt @@ -63,6 +63,8 @@ // DependencyOuterKotlinClass.transientProperty: FINAL PUBLIC : FINAL JAVA_TRANSIENT PUBLIC // DependencyOuterKotlinClass.volatileProperty: FINAL PUBLIC : FINAL JAVA_VOLATILE PUBLIC // DependencyOuterKotlinClass: OPEN PUBLIC : PUBLIC +// HasTypeAliasFuns: Modifiers: [] +// HasTypeAliasFuns: Visibility: PUBLIC // OuterJavaClass.: FINAL PUBLIC : FINAL PUBLIC // OuterJavaClass.InnerJavaClass.: FINAL PUBLIC : FINAL PUBLIC // OuterJavaClass.InnerJavaClass: PUBLIC : PUBLIC @@ -96,12 +98,19 @@ // OuterKotlinClass.transientProperty: : FINAL JAVA_TRANSIENT PUBLIC // OuterKotlinClass.volatileProperty: : FINAL JAVA_VOLATILE PUBLIC // OuterKotlinClass: OPEN : PUBLIC +// TypeAliasInKt: Modifiers: [PRIVATE] +// TypeAliasInKt: Visibility: PRIVATE +// TypeAliasInLib: Modifiers: [FINAL, PUBLIC] +// TypeAliasInLib: Visibility: PUBLIC // END // MODULE: module1 // FILE: ALib.kt fun interface ALib { fun test(): Boolean } + +public typealias TypeAliasInLib = Int + // FILE: DependencyOuterJavaClass.java public class DependencyOuterJavaClass { public class DependencyInnerJavaClass {} @@ -149,6 +158,13 @@ open class DependencyOuterKotlinClass { } // MODULE: main(module1) // FILE: ASrc.kt +private typealias TypeAliasInKt = Int + +class HasTypeAliasFuns { + fun FunReturnTA1(): TypeAliasInKt = 0 + fun FunReturnTA2(): TypeAliasInLib = 0 +} + fun interface ASrc { fun test(): Boolean } 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 51740e6ac9..a76c2f5bdd 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 @@ -19,6 +19,8 @@ package com.google.devtools.ksp.processor import com.google.devtools.ksp.KspExperimental import com.google.devtools.ksp.getClassDeclarationByName +import com.google.devtools.ksp.getDeclaredFunctions +import com.google.devtools.ksp.getVisibility import com.google.devtools.ksp.processing.Resolver import com.google.devtools.ksp.symbol.* import com.google.devtools.ksp.symbol.KSPropertyDeclaration @@ -45,6 +47,15 @@ class JavaModifierProcessor : AbstractTestProcessor() { .forEach { it.superTypes.single().resolve().declaration.accept(ModifierVisitor(resolver), Unit) } + + resolver.getClassDeclarationByName("HasTypeAliasFuns")!!.getDeclaredFunctions().forEach { f -> + val decl = f.returnType!!.resolve().declaration + val declName = decl.simpleName.asString().toString() + val visibility = decl.getVisibility().toString() + val modifiers = decl.modifiers.map { it.toString() } + results.add("$declName: Visibility: $visibility") + results.add("$declName: Modifiers: $modifiers") + } return emptyList() } diff --git a/test-utils/testData/api/javaModifiers.kt b/test-utils/testData/api/javaModifiers.kt index 9afb4aa90a..6ef97a4889 100644 --- a/test-utils/testData/api/javaModifiers.kt +++ b/test-utils/testData/api/javaModifiers.kt @@ -63,6 +63,8 @@ // DependencyOuterKotlinClass.transientProperty: FINAL PUBLIC : FINAL JAVA_TRANSIENT PUBLIC // DependencyOuterKotlinClass.volatileProperty: FINAL PUBLIC : FINAL JAVA_VOLATILE PUBLIC // DependencyOuterKotlinClass: OPEN PUBLIC : PUBLIC +// HasTypeAliasFuns: Modifiers: [] +// HasTypeAliasFuns: Visibility: PUBLIC // OuterJavaClass.: FINAL PUBLIC : FINAL PUBLIC // OuterJavaClass.InnerJavaClass.: FINAL PUBLIC : FINAL PUBLIC // OuterJavaClass.InnerJavaClass: PUBLIC : PUBLIC @@ -96,12 +98,19 @@ // OuterKotlinClass.transientProperty: : FINAL JAVA_TRANSIENT PUBLIC // OuterKotlinClass.volatileProperty: : FINAL JAVA_VOLATILE PUBLIC // OuterKotlinClass: OPEN : PUBLIC +// TypeAliasInKt: Modifiers: [PRIVATE] +// TypeAliasInKt: Visibility: PRIVATE +// TypeAliasInLib: Modifiers: [FINAL, PUBLIC] +// TypeAliasInLib: Visibility: PUBLIC // END // MODULE: module1 // FILE: ALib.kt fun interface ALib { fun test(): Boolean } + +public typealias TypeAliasInLib = Int + // FILE: DependencyOuterJavaClass.java public class DependencyOuterJavaClass { public class DependencyInnerJavaClass {} @@ -149,6 +158,13 @@ open class DependencyOuterKotlinClass { } // MODULE: main(module1) // FILE: ASrc.kt +private typealias TypeAliasInKt = Int + +class HasTypeAliasFuns { + fun FunReturnTA1(): TypeAliasInKt = 0 + fun FunReturnTA2(): TypeAliasInLib = 0 +} + fun interface ASrc { fun test(): Boolean }