aboutsummaryrefslogtreecommitdiff
path: root/kotlin-analysis-api
diff options
context:
space:
mode:
authorJiaxiang Chen <jiaxiang@google.com>2022-04-15 11:12:56 -0700
committerJiaxiang Chen <roaringacw@gmail.com>2022-04-22 15:42:17 -0700
commitb8bcec111323fbaf2114dd38e15df9d85c94432d (patch)
treebd651cf101959918115e11e6a776db18f8f2d2b3 /kotlin-analysis-api
parent744122550994b2d60523215cb1ba1368c368630f (diff)
downloadksp-b8bcec111323fbaf2114dd38e15df9d85c94432d.tar.gz
implement KSClassDeclaration for KtEnumEntrySymbol
Diffstat (limited to 'kotlin-analysis-api')
-rw-r--r--kotlin-analysis-api/src/main/kotlin/com/google/devtools/ksp/impl/symbol/kotlin/KSClassDeclarationEnumEntryImpl.kt127
1 files changed, 127 insertions, 0 deletions
diff --git a/kotlin-analysis-api/src/main/kotlin/com/google/devtools/ksp/impl/symbol/kotlin/KSClassDeclarationEnumEntryImpl.kt b/kotlin-analysis-api/src/main/kotlin/com/google/devtools/ksp/impl/symbol/kotlin/KSClassDeclarationEnumEntryImpl.kt
new file mode 100644
index 00000000..48d95970
--- /dev/null
+++ b/kotlin-analysis-api/src/main/kotlin/com/google/devtools/ksp/impl/symbol/kotlin/KSClassDeclarationEnumEntryImpl.kt
@@ -0,0 +1,127 @@
+package com.google.devtools.ksp.impl.symbol.kotlin
+
+import com.google.devtools.ksp.symbol.ClassKind
+import com.google.devtools.ksp.symbol.KSAnnotation
+import com.google.devtools.ksp.symbol.KSClassDeclaration
+import com.google.devtools.ksp.symbol.KSDeclaration
+import com.google.devtools.ksp.symbol.KSFile
+import com.google.devtools.ksp.symbol.KSFunctionDeclaration
+import com.google.devtools.ksp.symbol.KSName
+import com.google.devtools.ksp.symbol.KSNode
+import com.google.devtools.ksp.symbol.KSPropertyDeclaration
+import com.google.devtools.ksp.symbol.KSType
+import com.google.devtools.ksp.symbol.KSTypeArgument
+import com.google.devtools.ksp.symbol.KSTypeParameter
+import com.google.devtools.ksp.symbol.KSTypeReference
+import com.google.devtools.ksp.symbol.KSVisitor
+import com.google.devtools.ksp.symbol.Location
+import com.google.devtools.ksp.symbol.Modifier
+import com.google.devtools.ksp.symbol.Origin
+import org.jetbrains.kotlin.analysis.api.symbols.KtEnumEntrySymbol
+import org.jetbrains.kotlin.analysis.api.symbols.KtFunctionLikeSymbol
+import org.jetbrains.kotlin.analysis.api.symbols.KtNamedClassOrObjectSymbol
+import org.jetbrains.kotlin.utils.addToStdlib.safeAs
+
+class KSClassDeclarationEnumEntryImpl(private val ktEnumEntrySymbol: KtEnumEntrySymbol) : KSClassDeclaration {
+ override val classKind: ClassKind = ClassKind.ENUM_ENTRY
+
+ override val primaryConstructor: KSFunctionDeclaration? = null
+
+ // TODO: Fix when type information is available in upstream.
+ override val superTypes: Sequence<KSTypeReference> = emptySequence()
+
+ override val isCompanionObject: Boolean = false
+
+ override fun getSealedSubclasses(): Sequence<KSClassDeclaration> {
+ TODO("Not yet implemented")
+ }
+
+ override fun getAllFunctions(): Sequence<KSFunctionDeclaration> {
+ return analyzeWithSymbolAsContext(ktEnumEntrySymbol) {
+ ktEnumEntrySymbol.getMemberScope().getCallableSymbols().filterIsInstance<KtFunctionLikeSymbol>()
+ .map { KSFunctionDeclarationImpl(it) }
+ }
+ }
+
+ override fun getAllProperties(): Sequence<KSPropertyDeclaration> {
+ TODO("Not yet implemented")
+ }
+
+ override fun asType(typeArguments: List<KSTypeArgument>): KSType {
+ TODO("Not yet implemented")
+ }
+
+ override fun asStarProjectedType(): KSType {
+ TODO("Not yet implemented")
+ }
+
+ override val simpleName: KSName by lazy {
+ KSNameImpl(ktEnumEntrySymbol.name.asString())
+ }
+
+ override val qualifiedName: KSName? by lazy {
+ ktEnumEntrySymbol.containingEnumClassIdIfNonLocal?.let {
+ KSNameImpl("${it.asFqNameString()}.${simpleName.asString()}")
+ }
+ }
+
+ override val typeParameters: List<KSTypeParameter> = emptyList()
+
+ override val packageName: KSName by lazy {
+ ktEnumEntrySymbol.toContainingFile()!!.packageName
+ }
+
+ override val parentDeclaration: KSDeclaration? by lazy {
+ analyzeWithSymbolAsContext(ktEnumEntrySymbol) {
+ ktEnumEntrySymbol.getContainingSymbol()
+ .safeAs<KtNamedClassOrObjectSymbol>()?.let { KSClassDeclarationImpl(it) }
+ }
+ }
+
+ override val containingFile: KSFile? by lazy {
+ ktEnumEntrySymbol.toContainingFile()
+ }
+ override val docString: String?
+ get() = TODO("Not yet implemented")
+
+ override val modifiers: Set<Modifier>
+ get() = TODO("Not yet implemented")
+
+ override val origin: Origin
+ get() = TODO("Not yet implemented")
+
+ override val location: Location by lazy {
+ ktEnumEntrySymbol.psi.toLocation()
+ }
+
+ override val parent: KSNode? by lazy {
+ analyzeWithSymbolAsContext(ktEnumEntrySymbol) {
+ ktEnumEntrySymbol.getContainingSymbol()
+ .safeAs<KtNamedClassOrObjectSymbol>()?.let { KSClassDeclarationImpl(it) }
+ }
+ }
+
+ override fun <D, R> accept(visitor: KSVisitor<D, R>, data: D): R {
+ return visitor.visitClassDeclaration(this, data)
+ }
+
+ override val annotations: Sequence<KSAnnotation> = emptySequence()
+
+ override val isActual: Boolean
+ get() = TODO("Not yet implemented")
+ override val isExpect: Boolean
+ get() = TODO("Not yet implemented")
+
+ override fun findActuals(): Sequence<KSDeclaration> {
+ TODO("Not yet implemented")
+ }
+
+ override fun findExpects(): Sequence<KSDeclaration> {
+ TODO("Not yet implemented")
+ }
+
+ override val declarations: Sequence<KSDeclaration> by lazy {
+ // TODO: fix after .getDeclaredMemberScope() works for enum entry with no initializer.
+ emptySequence()
+ }
+}