diff --git a/compiler-plugin/src/main/kotlin/com/google/devtools/ksp/symbol/impl/binary/KSClassDeclarationDescriptorImpl.kt b/compiler-plugin/src/main/kotlin/com/google/devtools/ksp/symbol/impl/binary/KSClassDeclarationDescriptorImpl.kt index 94f788fb0a..b6b037f0d1 100644 --- a/compiler-plugin/src/main/kotlin/com/google/devtools/ksp/symbol/impl/binary/KSClassDeclarationDescriptorImpl.kt +++ b/compiler-plugin/src/main/kotlin/com/google/devtools/ksp/symbol/impl/binary/KSClassDeclarationDescriptorImpl.kt @@ -49,6 +49,8 @@ class KSClassDeclarationDescriptorImpl private constructor(val descriptor: Class } } + override fun asKSDeclaration(): KSDeclaration = this + override val classKind: ClassKind by lazy { when (descriptor.kind) { KtClassKind.INTERFACE -> ClassKind.INTERFACE diff --git a/compiler-plugin/src/main/kotlin/com/google/devtools/ksp/symbol/impl/binary/KSDeclarationDescriptorImpl.kt b/compiler-plugin/src/main/kotlin/com/google/devtools/ksp/symbol/impl/binary/KSDeclarationDescriptorImpl.kt index 364c26b573..c9973c744e 100644 --- a/compiler-plugin/src/main/kotlin/com/google/devtools/ksp/symbol/impl/binary/KSDeclarationDescriptorImpl.kt +++ b/compiler-plugin/src/main/kotlin/com/google/devtools/ksp/symbol/impl/binary/KSDeclarationDescriptorImpl.kt @@ -31,6 +31,7 @@ import org.jetbrains.kotlin.resolve.descriptorUtil.parentsWithSelf import org.jetbrains.kotlin.utils.addToStdlib.firstIsInstanceOrNull abstract class KSDeclarationDescriptorImpl(private val descriptor: DeclarationDescriptor) /*: KSDeclaration*/ { + abstract fun asKSDeclaration(): KSDeclaration open /*override*/ val origin by lazy { descriptor.origin @@ -41,7 +42,7 @@ abstract class KSDeclarationDescriptorImpl(private val descriptor: DeclarationDe open /*override*/ val location: Location = NonExistLocation open /*override*/ val annotations: Sequence by lazy { - descriptor.annotations.asSequence().map { KSAnnotationDescriptorImpl.getCached(it, this as KSDeclaration) } + descriptor.annotations.asSequence().map { KSAnnotationDescriptorImpl.getCached(it, this.asKSDeclaration()) } .memoized() } diff --git a/compiler-plugin/src/main/kotlin/com/google/devtools/ksp/symbol/impl/binary/KSFunctionDeclarationDescriptorImpl.kt b/compiler-plugin/src/main/kotlin/com/google/devtools/ksp/symbol/impl/binary/KSFunctionDeclarationDescriptorImpl.kt index e9fe9c764e..4b6e467c66 100644 --- a/compiler-plugin/src/main/kotlin/com/google/devtools/ksp/symbol/impl/binary/KSFunctionDeclarationDescriptorImpl.kt +++ b/compiler-plugin/src/main/kotlin/com/google/devtools/ksp/symbol/impl/binary/KSFunctionDeclarationDescriptorImpl.kt @@ -37,6 +37,8 @@ class KSFunctionDeclarationDescriptorImpl private constructor(val descriptor: Fu cache.getOrPut(descriptor) { KSFunctionDeclarationDescriptorImpl(descriptor) } } + override fun asKSDeclaration(): KSDeclaration = this + override fun findOverridee(): KSDeclaration? { return descriptor?.findClosestOverridee()?.toKSDeclaration() } diff --git a/compiler-plugin/src/main/kotlin/com/google/devtools/ksp/symbol/impl/binary/KSPropertyAccessorDescriptorImpl.kt b/compiler-plugin/src/main/kotlin/com/google/devtools/ksp/symbol/impl/binary/KSPropertyAccessorDescriptorImpl.kt index 63362b0b8d..cfaa12ae9f 100644 --- a/compiler-plugin/src/main/kotlin/com/google/devtools/ksp/symbol/impl/binary/KSPropertyAccessorDescriptorImpl.kt +++ b/compiler-plugin/src/main/kotlin/com/google/devtools/ksp/symbol/impl/binary/KSPropertyAccessorDescriptorImpl.kt @@ -22,9 +22,12 @@ import com.google.devtools.ksp.symbol.* import com.google.devtools.ksp.symbol.impl.toFunctionKSModifiers import com.google.devtools.ksp.symbol.impl.toKSModifiers import com.google.devtools.ksp.symbol.impl.toKSPropertyDeclaration +import com.google.devtools.ksp.toKSModifiers import org.jetbrains.kotlin.descriptors.PropertyAccessorDescriptor abstract class KSPropertyAccessorDescriptorImpl(val descriptor: PropertyAccessorDescriptor) /*: KSPropertyAccessor*/ { + protected abstract fun asKSPropertyAccessor(): KSPropertyAccessor + open /*override*/ val origin: Origin by lazy { when (receiver.origin) { // if receiver is kotlin source, that means we are a synthetic where developer @@ -50,7 +53,8 @@ abstract class KSPropertyAccessorDescriptorImpl(val descriptor: PropertyAccessor } open /*override*/ val annotations: Sequence by lazy { - descriptor.annotations.asSequence().map { KSAnnotationDescriptorImpl.getCached(it, this as KSPropertyAccessor) } + descriptor.annotations.asSequence() + .map { KSAnnotationDescriptorImpl.getCached(it, this.asKSPropertyAccessor()) } .memoized() } diff --git a/compiler-plugin/src/main/kotlin/com/google/devtools/ksp/symbol/impl/binary/KSPropertyDeclarationDescriptorImpl.kt b/compiler-plugin/src/main/kotlin/com/google/devtools/ksp/symbol/impl/binary/KSPropertyDeclarationDescriptorImpl.kt index 6107fc90cd..83cb8223e9 100644 --- a/compiler-plugin/src/main/kotlin/com/google/devtools/ksp/symbol/impl/binary/KSPropertyDeclarationDescriptorImpl.kt +++ b/compiler-plugin/src/main/kotlin/com/google/devtools/ksp/symbol/impl/binary/KSPropertyDeclarationDescriptorImpl.kt @@ -36,6 +36,8 @@ class KSPropertyDeclarationDescriptorImpl private constructor(val descriptor: Pr } } + override fun asKSDeclaration(): KSDeclaration = this + override val extensionReceiver: KSTypeReference? by lazy { if (descriptor.extensionReceiverParameter != null) { KSTypeReferenceDescriptorImpl.getCached(descriptor.extensionReceiverParameter!!.type, origin, this) diff --git a/compiler-plugin/src/main/kotlin/com/google/devtools/ksp/symbol/impl/binary/KSPropertyGetterDescriptorImpl.kt b/compiler-plugin/src/main/kotlin/com/google/devtools/ksp/symbol/impl/binary/KSPropertyGetterDescriptorImpl.kt index 078ccfc70e..bf172b94db 100644 --- a/compiler-plugin/src/main/kotlin/com/google/devtools/ksp/symbol/impl/binary/KSPropertyGetterDescriptorImpl.kt +++ b/compiler-plugin/src/main/kotlin/com/google/devtools/ksp/symbol/impl/binary/KSPropertyGetterDescriptorImpl.kt @@ -29,6 +29,8 @@ class KSPropertyGetterDescriptorImpl private constructor(descriptor: PropertyGet } } + override fun asKSPropertyAccessor(): KSPropertyAccessor = this + override val returnType: KSTypeReference? by lazy { if (descriptor.returnType != null) { KSTypeReferenceDescriptorImpl.getCached(descriptor.returnType!!, origin, this) diff --git a/compiler-plugin/src/main/kotlin/com/google/devtools/ksp/symbol/impl/binary/KSPropertySetterDescriptorImpl.kt b/compiler-plugin/src/main/kotlin/com/google/devtools/ksp/symbol/impl/binary/KSPropertySetterDescriptorImpl.kt index 04b71ccca6..88fbfe8805 100644 --- a/compiler-plugin/src/main/kotlin/com/google/devtools/ksp/symbol/impl/binary/KSPropertySetterDescriptorImpl.kt +++ b/compiler-plugin/src/main/kotlin/com/google/devtools/ksp/symbol/impl/binary/KSPropertySetterDescriptorImpl.kt @@ -29,6 +29,8 @@ class KSPropertySetterDescriptorImpl private constructor(descriptor: PropertySet } } + override fun asKSPropertyAccessor(): KSPropertyAccessor = this + override val parameter: KSValueParameter by lazy { descriptor.valueParameters.singleOrNull()?.let { KSValueParameterDescriptorImpl.getCached(it, this) } ?: throw IllegalStateException("Failed to resolve property type") diff --git a/compiler-plugin/src/main/kotlin/com/google/devtools/ksp/symbol/impl/binary/KSTypeAliasDescriptorImpl.kt b/compiler-plugin/src/main/kotlin/com/google/devtools/ksp/symbol/impl/binary/KSTypeAliasDescriptorImpl.kt index fe1ab3493d..0abf34791a 100644 --- a/compiler-plugin/src/main/kotlin/com/google/devtools/ksp/symbol/impl/binary/KSTypeAliasDescriptorImpl.kt +++ b/compiler-plugin/src/main/kotlin/com/google/devtools/ksp/symbol/impl/binary/KSTypeAliasDescriptorImpl.kt @@ -16,6 +16,8 @@ class KSTypeAliasDescriptorImpl(descriptor: TypeAliasDescriptor) : } } + override fun asKSDeclaration(): KSDeclaration = this + override val name: KSName by lazy { KSNameImpl.getCached(descriptor.name.asString()) } diff --git a/compiler-plugin/src/main/kotlin/com/google/devtools/ksp/symbol/impl/binary/KSTypeParameterDescriptorImpl.kt b/compiler-plugin/src/main/kotlin/com/google/devtools/ksp/symbol/impl/binary/KSTypeParameterDescriptorImpl.kt index 7dc8241b54..faa20d272f 100644 --- a/compiler-plugin/src/main/kotlin/com/google/devtools/ksp/symbol/impl/binary/KSTypeParameterDescriptorImpl.kt +++ b/compiler-plugin/src/main/kotlin/com/google/devtools/ksp/symbol/impl/binary/KSTypeParameterDescriptorImpl.kt @@ -39,6 +39,8 @@ class KSTypeParameterDescriptorImpl private constructor(val descriptor: TypePara } } + override fun asKSDeclaration(): KSDeclaration = this + override val bounds: Sequence by lazy { descriptor.upperBounds.asSequence().map { KSTypeReferenceDescriptorImpl.getCached(it, origin, this) } } diff --git a/compiler-plugin/src/main/kotlin/com/google/devtools/ksp/symbol/impl/java/KSClassDeclarationJavaEnumEntryImpl.kt b/compiler-plugin/src/main/kotlin/com/google/devtools/ksp/symbol/impl/java/KSClassDeclarationJavaEnumEntryImpl.kt index 05f017be10..be9025a106 100644 --- a/compiler-plugin/src/main/kotlin/com/google/devtools/ksp/symbol/impl/java/KSClassDeclarationJavaEnumEntryImpl.kt +++ b/compiler-plugin/src/main/kotlin/com/google/devtools/ksp/symbol/impl/java/KSClassDeclarationJavaEnumEntryImpl.kt @@ -40,6 +40,8 @@ class KSClassDeclarationJavaEnumEntryImpl private constructor(val psi: PsiEnumCo fun getCached(psi: PsiEnumConstant) = cache.getOrPut(psi) { KSClassDeclarationJavaEnumEntryImpl(psi) } } + override fun asKSDeclaration(): KSDeclaration = this + override val origin = Origin.JAVA override val location: Location by lazy { diff --git a/compiler-plugin/src/main/kotlin/com/google/devtools/ksp/symbol/impl/java/KSClassDeclarationJavaImpl.kt b/compiler-plugin/src/main/kotlin/com/google/devtools/ksp/symbol/impl/java/KSClassDeclarationJavaImpl.kt index bc6c01c6af..e9e5323e7f 100644 --- a/compiler-plugin/src/main/kotlin/com/google/devtools/ksp/symbol/impl/java/KSClassDeclarationJavaImpl.kt +++ b/compiler-plugin/src/main/kotlin/com/google/devtools/ksp/symbol/impl/java/KSClassDeclarationJavaImpl.kt @@ -47,6 +47,8 @@ class KSClassDeclarationJavaImpl private constructor(val psi: PsiClass) : fun getCached(psi: PsiClass) = cache.getOrPut(psi) { KSClassDeclarationJavaImpl(psi) } } + override fun asKSDeclaration(): KSDeclaration = this + override val origin = Origin.JAVA override val location: Location by lazy { diff --git a/compiler-plugin/src/main/kotlin/com/google/devtools/ksp/symbol/impl/java/KSDeclarationJavaImpl.kt b/compiler-plugin/src/main/kotlin/com/google/devtools/ksp/symbol/impl/java/KSDeclarationJavaImpl.kt index dd23e85afb..3045349694 100644 --- a/compiler-plugin/src/main/kotlin/com/google/devtools/ksp/symbol/impl/java/KSDeclarationJavaImpl.kt +++ b/compiler-plugin/src/main/kotlin/com/google/devtools/ksp/symbol/impl/java/KSDeclarationJavaImpl.kt @@ -26,12 +26,14 @@ import com.google.devtools.ksp.symbol.impl.getDocString import com.intellij.psi.PsiElement abstract class KSDeclarationJavaImpl(private val psi: PsiElement) /*: KSDeclaration*/ { + protected abstract fun asKSDeclaration(): KSDeclaration + open /*override*/ val packageName: KSName by lazy { - (this as KSDeclaration).containingFile!!.packageName + this.asKSDeclaration().containingFile!!.packageName } override fun toString(): String { - return (this as KSDeclaration).simpleName.asString() + return this.asKSDeclaration().simpleName.asString() } open /*override*/ val docString by lazy { diff --git a/compiler-plugin/src/main/kotlin/com/google/devtools/ksp/symbol/impl/java/KSFunctionDeclarationJavaImpl.kt b/compiler-plugin/src/main/kotlin/com/google/devtools/ksp/symbol/impl/java/KSFunctionDeclarationJavaImpl.kt index a1d60e1cb4..769222f05f 100644 --- a/compiler-plugin/src/main/kotlin/com/google/devtools/ksp/symbol/impl/java/KSFunctionDeclarationJavaImpl.kt +++ b/compiler-plugin/src/main/kotlin/com/google/devtools/ksp/symbol/impl/java/KSFunctionDeclarationJavaImpl.kt @@ -38,6 +38,8 @@ class KSFunctionDeclarationJavaImpl private constructor(val psi: PsiMethod) : fun getCached(psi: PsiMethod) = cache.getOrPut(psi) { KSFunctionDeclarationJavaImpl(psi) } } + override fun asKSDeclaration(): KSDeclaration = this + override val origin = Origin.JAVA override val location: Location by lazy { diff --git a/compiler-plugin/src/main/kotlin/com/google/devtools/ksp/symbol/impl/java/KSPropertyDeclarationJavaImpl.kt b/compiler-plugin/src/main/kotlin/com/google/devtools/ksp/symbol/impl/java/KSPropertyDeclarationJavaImpl.kt index 57ff59416e..82eb8a69d7 100644 --- a/compiler-plugin/src/main/kotlin/com/google/devtools/ksp/symbol/impl/java/KSPropertyDeclarationJavaImpl.kt +++ b/compiler-plugin/src/main/kotlin/com/google/devtools/ksp/symbol/impl/java/KSPropertyDeclarationJavaImpl.kt @@ -36,6 +36,8 @@ class KSPropertyDeclarationJavaImpl private constructor(val psi: PsiField) : fun getCached(psi: PsiField) = cache.getOrPut(psi) { KSPropertyDeclarationJavaImpl(psi) } } + override fun asKSDeclaration(): KSDeclaration = this + override val origin = Origin.JAVA override val location: Location by lazy { diff --git a/compiler-plugin/src/main/kotlin/com/google/devtools/ksp/symbol/impl/java/KSTypeParameterJavaImpl.kt b/compiler-plugin/src/main/kotlin/com/google/devtools/ksp/symbol/impl/java/KSTypeParameterJavaImpl.kt index e3c41286bd..a9935a8a12 100644 --- a/compiler-plugin/src/main/kotlin/com/google/devtools/ksp/symbol/impl/java/KSTypeParameterJavaImpl.kt +++ b/compiler-plugin/src/main/kotlin/com/google/devtools/ksp/symbol/impl/java/KSTypeParameterJavaImpl.kt @@ -35,6 +35,8 @@ class KSTypeParameterJavaImpl private constructor(val psi: PsiTypeParameter) : fun getCached(psi: PsiTypeParameter) = cache.getOrPut(psi) { KSTypeParameterJavaImpl(psi) } } + override fun asKSDeclaration(): KSDeclaration = this + override val origin = Origin.JAVA override val location: Location by lazy { diff --git a/compiler-plugin/src/main/kotlin/com/google/devtools/ksp/symbol/impl/kotlin/KSPropertyAccessorImpl.kt b/compiler-plugin/src/main/kotlin/com/google/devtools/ksp/symbol/impl/kotlin/KSPropertyAccessorImpl.kt index 79a12a6d0f..1adde9c22e 100644 --- a/compiler-plugin/src/main/kotlin/com/google/devtools/ksp/symbol/impl/kotlin/KSPropertyAccessorImpl.kt +++ b/compiler-plugin/src/main/kotlin/com/google/devtools/ksp/symbol/impl/kotlin/KSPropertyAccessorImpl.kt @@ -36,12 +36,15 @@ abstract class KSPropertyAccessorImpl(val ktPropertyAccessor: KtPropertyAccessor } } } + + protected abstract fun asKSPropertyAccessor(): KSPropertyAccessor + open /*override*/ val receiver: KSPropertyDeclaration by lazy { KSPropertyDeclarationImpl.getCached(ktPropertyAccessor.property as KtProperty) } open /*override*/ val annotations: Sequence by lazy { ktPropertyAccessor.filterUseSiteTargetAnnotations().map { KSAnnotationImpl.getCached(it) } - .plus((this as KSPropertyAccessor).findAnnotationFromUseSiteTarget()) + .plus(this.asKSPropertyAccessor().findAnnotationFromUseSiteTarget()) } open /*override*/ val parent: KSNode? by lazy { @@ -68,7 +71,7 @@ abstract class KSPropertyAccessorImpl(val ktPropertyAccessor: KtPropertyAccessor open /*override*/ val origin: Origin = Origin.KOTLIN open /*override*/ fun accept(visitor: KSVisitor, data: D): R { - return visitor.visitPropertyAccessor(this as KSPropertyAccessor, data) + return visitor.visitPropertyAccessor(this.asKSPropertyAccessor(), data) } internal val originalAnnotations: List by lazy { diff --git a/compiler-plugin/src/main/kotlin/com/google/devtools/ksp/symbol/impl/kotlin/KSPropertyGetterImpl.kt b/compiler-plugin/src/main/kotlin/com/google/devtools/ksp/symbol/impl/kotlin/KSPropertyGetterImpl.kt index bf328c29f1..bf90f6a799 100644 --- a/compiler-plugin/src/main/kotlin/com/google/devtools/ksp/symbol/impl/kotlin/KSPropertyGetterImpl.kt +++ b/compiler-plugin/src/main/kotlin/com/google/devtools/ksp/symbol/impl/kotlin/KSPropertyGetterImpl.kt @@ -33,6 +33,8 @@ class KSPropertyGetterImpl private constructor(ktPropertyGetter: KtPropertyAcces } } + override fun asKSPropertyAccessor(): KSPropertyAccessor = this + override val returnType: KSTypeReference? by lazy { val property = ktPropertyGetter.property if (property.typeReference != null) { diff --git a/compiler-plugin/src/main/kotlin/com/google/devtools/ksp/symbol/impl/kotlin/KSPropertySetterImpl.kt b/compiler-plugin/src/main/kotlin/com/google/devtools/ksp/symbol/impl/kotlin/KSPropertySetterImpl.kt index 177567b049..f986ac19be 100644 --- a/compiler-plugin/src/main/kotlin/com/google/devtools/ksp/symbol/impl/kotlin/KSPropertySetterImpl.kt +++ b/compiler-plugin/src/main/kotlin/com/google/devtools/ksp/symbol/impl/kotlin/KSPropertySetterImpl.kt @@ -32,6 +32,8 @@ class KSPropertySetterImpl private constructor(ktPropertySetter: KtPropertyAcces } } + override fun asKSPropertyAccessor(): KSPropertyAccessor = this + override val parameter: KSValueParameter by lazy { ktPropertySetter.parameterList?.parameters?.singleOrNull()?.let { KSValueParameterImpl.getCached(it) } ?: KSValueParameterSyntheticImpl.getCached(this) { diff --git a/compiler-plugin/src/main/kotlin/com/google/devtools/ksp/symbol/impl/synthetic/KSPropertyAccessorSyntheticImpl.kt b/compiler-plugin/src/main/kotlin/com/google/devtools/ksp/symbol/impl/synthetic/KSPropertyAccessorSyntheticImpl.kt index 98d5fe5f4a..e1da32a1ee 100644 --- a/compiler-plugin/src/main/kotlin/com/google/devtools/ksp/symbol/impl/synthetic/KSPropertyAccessorSyntheticImpl.kt +++ b/compiler-plugin/src/main/kotlin/com/google/devtools/ksp/symbol/impl/synthetic/KSPropertyAccessorSyntheticImpl.kt @@ -21,8 +21,10 @@ import com.google.devtools.ksp.processing.impl.findAnnotationFromUseSiteTarget import com.google.devtools.ksp.symbol.* abstract class KSPropertyAccessorSyntheticImpl(ksPropertyDeclaration: KSPropertyDeclaration) /*: KSPropertyAccessor*/ { + protected abstract fun asKSPropertyAccessor(): KSPropertyAccessor + open /*override*/ val annotations: Sequence by lazy { - (this as KSPropertyAccessor).findAnnotationFromUseSiteTarget() + this.asKSPropertyAccessor().findAnnotationFromUseSiteTarget() } open /*override*/ val location: Location by lazy { @@ -36,6 +38,6 @@ abstract class KSPropertyAccessorSyntheticImpl(ksPropertyDeclaration: KSProperty open /*override*/ val receiver: KSPropertyDeclaration = ksPropertyDeclaration open /*override*/ fun accept(visitor: KSVisitor, data: D): R { - return visitor.visitPropertyAccessor(this as KSPropertyAccessor, data) + return visitor.visitPropertyAccessor(this.asKSPropertyAccessor(), data) } } diff --git a/compiler-plugin/src/main/kotlin/com/google/devtools/ksp/symbol/impl/synthetic/KSPropertyGetterSyntheticImpl.kt b/compiler-plugin/src/main/kotlin/com/google/devtools/ksp/symbol/impl/synthetic/KSPropertyGetterSyntheticImpl.kt index 104eca58b7..5875f6d522 100644 --- a/compiler-plugin/src/main/kotlin/com/google/devtools/ksp/symbol/impl/synthetic/KSPropertyGetterSyntheticImpl.kt +++ b/compiler-plugin/src/main/kotlin/com/google/devtools/ksp/symbol/impl/synthetic/KSPropertyGetterSyntheticImpl.kt @@ -32,6 +32,8 @@ class KSPropertyGetterSyntheticImpl(val ksPropertyDeclaration: KSPropertyDeclara } } + override fun asKSPropertyAccessor(): KSPropertyAccessor = this + private val descriptor: PropertyAccessorDescriptor by lazy { ResolverImpl.instance!!.resolvePropertyDeclaration(ksPropertyDeclaration)!!.getter!! } diff --git a/compiler-plugin/src/main/kotlin/com/google/devtools/ksp/symbol/impl/synthetic/KSPropertySetterSyntheticImpl.kt b/compiler-plugin/src/main/kotlin/com/google/devtools/ksp/symbol/impl/synthetic/KSPropertySetterSyntheticImpl.kt index 8b27bc2f53..34502c64f9 100644 --- a/compiler-plugin/src/main/kotlin/com/google/devtools/ksp/symbol/impl/synthetic/KSPropertySetterSyntheticImpl.kt +++ b/compiler-plugin/src/main/kotlin/com/google/devtools/ksp/symbol/impl/synthetic/KSPropertySetterSyntheticImpl.kt @@ -32,6 +32,8 @@ class KSPropertySetterSyntheticImpl(val ksPropertyDeclaration: KSPropertyDeclara } } + override fun asKSPropertyAccessor(): KSPropertyAccessor = this + private val descriptor: PropertyAccessorDescriptor by lazy { ResolverImpl.instance!!.resolvePropertyDeclaration(ksPropertyDeclaration)!!.setter!! } diff --git a/compiler-plugin/src/main/kotlin/com/google/devtools/ksp/symbol/impl/utils.kt b/compiler-plugin/src/main/kotlin/com/google/devtools/ksp/symbol/impl/utils.kt index 2ece006655..ffc8faa770 100644 --- a/compiler-plugin/src/main/kotlin/com/google/devtools/ksp/symbol/impl/utils.kt +++ b/compiler-plugin/src/main/kotlin/com/google/devtools/ksp/symbol/impl/utils.kt @@ -319,7 +319,7 @@ internal class DeclarationOrdering( } private fun getOrder(decl: KSDeclarationDescriptorImpl): Int { - return declOrdering.getOrPut(decl as KSDeclaration) { + return declOrdering.getOrPut(decl.asKSDeclaration()) { when (decl) { is KSPropertyDeclarationDescriptorImpl -> { fieldOrdering[decl.simpleName.asString()]?.let { 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 1b5bfb8b92..333dd9e227 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 @@ -39,6 +39,8 @@ import org.jetbrains.kotlin.psi.KtElement import org.jetbrains.kotlin.psi.KtModifierListOwner abstract class AbstractKSDeclarationImpl(val ktDeclarationSymbol: KtDeclarationSymbol) : /*KSDeclaration,*/ Deferrable { + abstract fun asKSDeclaration(): KSDeclaration + open /*override*/ val origin: Origin by lazy { mapAAOrigin(ktDeclarationSymbol) } @@ -108,9 +110,9 @@ abstract class AbstractKSDeclarationImpl(val ktDeclarationSymbol: KtDeclarationS get() = ktDeclarationSymbol.toDocString() internal val originalAnnotations = if (ktDeclarationSymbol.psi is KtElement || ktDeclarationSymbol.psi == null) { - ktDeclarationSymbol.annotations(this as KSDeclaration) + ktDeclarationSymbol.annotations(this.asKSDeclaration()) } else { (ktDeclarationSymbol.psi as PsiJvmModifiersOwner) - .annotations.map { KSAnnotationJavaImpl.getCached(it, this as KSDeclaration) }.asSequence() + .annotations.map { KSAnnotationJavaImpl.getCached(it, this.asKSDeclaration()) }.asSequence() } } 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 index eb946ad793..29017190cd 100644 --- 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 @@ -30,6 +30,8 @@ class KSClassDeclarationEnumEntryImpl private constructor(private val ktEnumEntr cache.getOrPut(ktEnumEntrySymbol) { KSClassDeclarationEnumEntryImpl(ktEnumEntrySymbol) } } + override fun asKSDeclaration(): KSDeclaration = this + override val qualifiedName: KSName? by lazy { KSNameImpl.getCached("${this.parentDeclaration!!.qualifiedName!!.asString()}.${simpleName.asString()}") } 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 c02aaa44ee..f6399c40fe 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 @@ -39,6 +39,8 @@ class KSClassDeclarationImpl private constructor(internal val ktClassOrObjectSym cache.getOrPut(ktClassOrObjectSymbol) { KSClassDeclarationImpl(ktClassOrObjectSymbol) } } + override fun asKSDeclaration(): KSDeclaration = this + override val qualifiedName: KSName? by lazy { ktClassOrObjectSymbol.classIdIfNonLocal?.asFqNameString()?.let { KSNameImpl.getCached(it) } } diff --git a/kotlin-analysis-api/src/main/kotlin/com/google/devtools/ksp/impl/symbol/kotlin/KSFunctionDeclarationImpl.kt b/kotlin-analysis-api/src/main/kotlin/com/google/devtools/ksp/impl/symbol/kotlin/KSFunctionDeclarationImpl.kt index 55137c6ef7..876655c943 100644 --- a/kotlin-analysis-api/src/main/kotlin/com/google/devtools/ksp/impl/symbol/kotlin/KSFunctionDeclarationImpl.kt +++ b/kotlin-analysis-api/src/main/kotlin/com/google/devtools/ksp/impl/symbol/kotlin/KSFunctionDeclarationImpl.kt @@ -41,6 +41,8 @@ class KSFunctionDeclarationImpl private constructor(internal val ktFunctionSymbo cache.getOrPut(ktFunctionSymbol) { KSFunctionDeclarationImpl(ktFunctionSymbol) } } + override fun asKSDeclaration(): KSDeclaration = this + override val functionKind: FunctionKind by lazy { when (ktFunctionSymbol.symbolKind) { KtSymbolKind.CLASS_MEMBER -> FunctionKind.MEMBER diff --git a/kotlin-analysis-api/src/main/kotlin/com/google/devtools/ksp/impl/symbol/kotlin/KSPropertyAccessorImpl.kt b/kotlin-analysis-api/src/main/kotlin/com/google/devtools/ksp/impl/symbol/kotlin/KSPropertyAccessorImpl.kt index 0752e71681..d23654a1b9 100644 --- a/kotlin-analysis-api/src/main/kotlin/com/google/devtools/ksp/impl/symbol/kotlin/KSPropertyAccessorImpl.kt +++ b/kotlin-analysis-api/src/main/kotlin/com/google/devtools/ksp/impl/symbol/kotlin/KSPropertyAccessorImpl.kt @@ -35,15 +35,16 @@ abstract class KSPropertyAccessorImpl( internal val ktPropertyAccessorSymbol: KtPropertyAccessorSymbol, open /*override*/ val receiver: KSPropertyDeclaration ) : /*KSPropertyAccessor,*/ Deferrable { + protected abstract fun asKSPropertyAccessor(): KSPropertyAccessor open /*override*/ val annotations: Sequence by lazy { ktPropertyAccessorSymbol.annotations.asSequence() .filter { it.useSiteTarget != AnnotationUseSiteTarget.SETTER_PARAMETER } - .map { KSAnnotationImpl.getCached(it, this as KSPropertyAccessor) } - .plus((this as KSPropertyAccessor).findAnnotationFromUseSiteTarget()) + .map { KSAnnotationImpl.getCached(it, this.asKSPropertyAccessor()) } + .plus(this.asKSPropertyAccessor().findAnnotationFromUseSiteTarget()) } - internal val originalAnnotations = ktPropertyAccessorSymbol.annotations(this as KSPropertyAccessor) + internal val originalAnnotations = ktPropertyAccessorSymbol.annotations(this.asKSPropertyAccessor()) open /*override*/ val location: Location by lazy { ktPropertyAccessorSymbol.psi?.toLocation() ?: NonExistLocation @@ -96,6 +97,8 @@ class KSPropertySetterImpl private constructor( cache.getOrPut(Pair(owner, setter)) { KSPropertySetterImpl(owner, setter) } } + override fun asKSPropertyAccessor(): KSPropertyAccessor = this + override val parameter: KSValueParameter by lazy { KSValueParameterImpl.getCached(setter.parameter, this) } @@ -126,6 +129,8 @@ class KSPropertyGetterImpl private constructor( cache.getOrPut(Pair(owner, getter)) { KSPropertyGetterImpl(owner, getter) } } + override fun asKSPropertyAccessor(): KSPropertyAccessor = this + override val returnType: KSTypeReference? by lazy { ((owner as? KSPropertyDeclarationImpl)?.ktPropertySymbol?.psiIfSource() as? KtProperty)?.typeReference ?.let { KSTypeReferenceImpl.getCached(it, this) } diff --git a/kotlin-analysis-api/src/main/kotlin/com/google/devtools/ksp/impl/symbol/kotlin/KSPropertyDeclarationImpl.kt b/kotlin-analysis-api/src/main/kotlin/com/google/devtools/ksp/impl/symbol/kotlin/KSPropertyDeclarationImpl.kt index 88e6f5e0d8..74a62af66b 100644 --- a/kotlin-analysis-api/src/main/kotlin/com/google/devtools/ksp/impl/symbol/kotlin/KSPropertyDeclarationImpl.kt +++ b/kotlin-analysis-api/src/main/kotlin/com/google/devtools/ksp/impl/symbol/kotlin/KSPropertyDeclarationImpl.kt @@ -44,6 +44,8 @@ class KSPropertyDeclarationImpl private constructor(internal val ktPropertySymbo cache.getOrPut(ktPropertySymbol) { KSPropertyDeclarationImpl(ktPropertySymbol) } } + override fun asKSDeclaration(): KSDeclaration = this + override val annotations: Sequence by lazy { ktPropertySymbol.annotations.asSequence() .filter { !it.isUseSiteTargetAnnotation() } diff --git a/kotlin-analysis-api/src/main/kotlin/com/google/devtools/ksp/impl/symbol/kotlin/KSPropertyDeclarationJavaImpl.kt b/kotlin-analysis-api/src/main/kotlin/com/google/devtools/ksp/impl/symbol/kotlin/KSPropertyDeclarationJavaImpl.kt index b4ac9a4f1a..7f01f611cb 100644 --- a/kotlin-analysis-api/src/main/kotlin/com/google/devtools/ksp/impl/symbol/kotlin/KSPropertyDeclarationJavaImpl.kt +++ b/kotlin-analysis-api/src/main/kotlin/com/google/devtools/ksp/impl/symbol/kotlin/KSPropertyDeclarationJavaImpl.kt @@ -18,6 +18,9 @@ class KSPropertyDeclarationJavaImpl private constructor(private val ktJavaFieldS fun getCached(ktJavaFieldSymbol: KtJavaFieldSymbol): KSPropertyDeclaration = cache.getOrPut(ktJavaFieldSymbol) { KSPropertyDeclarationJavaImpl(ktJavaFieldSymbol) } } + + override fun asKSDeclaration(): KSDeclaration = this + override val getter: KSPropertyGetter? get() = null diff --git a/kotlin-analysis-api/src/main/kotlin/com/google/devtools/ksp/impl/symbol/kotlin/KSPropertyDeclarationLocalVariableImpl.kt b/kotlin-analysis-api/src/main/kotlin/com/google/devtools/ksp/impl/symbol/kotlin/KSPropertyDeclarationLocalVariableImpl.kt index d06358caf4..f04aa2bef4 100644 --- a/kotlin-analysis-api/src/main/kotlin/com/google/devtools/ksp/impl/symbol/kotlin/KSPropertyDeclarationLocalVariableImpl.kt +++ b/kotlin-analysis-api/src/main/kotlin/com/google/devtools/ksp/impl/symbol/kotlin/KSPropertyDeclarationLocalVariableImpl.kt @@ -2,6 +2,7 @@ package com.google.devtools.ksp.impl.symbol.kotlin import com.google.devtools.ksp.KSObjectCache import com.google.devtools.ksp.impl.symbol.kotlin.resolved.KSTypeReferenceResolvedImpl +import com.google.devtools.ksp.symbol.KSDeclaration import com.google.devtools.ksp.symbol.KSExpectActual import com.google.devtools.ksp.symbol.KSName import com.google.devtools.ksp.symbol.KSPropertyDeclaration @@ -23,6 +24,8 @@ class KSPropertyDeclarationLocalVariableImpl private constructor( cache.getOrPut(ktLocalVariableSymbol) { KSPropertyDeclarationLocalVariableImpl(ktLocalVariableSymbol) } } + override fun asKSDeclaration(): KSDeclaration = this + override val getter: KSPropertyGetter? = null override val setter: KSPropertySetter? = null 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 1b1d8a2cb9..28f0ca4829 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,6 +19,7 @@ package com.google.devtools.ksp.impl.symbol.kotlin import com.google.devtools.ksp.KSObjectCache import com.google.devtools.ksp.impl.symbol.kotlin.resolved.KSTypeReferenceResolvedImpl import com.google.devtools.ksp.processing.impl.KSNameImpl +import com.google.devtools.ksp.symbol.KSDeclaration import com.google.devtools.ksp.symbol.KSExpectActual import com.google.devtools.ksp.symbol.KSName import com.google.devtools.ksp.symbol.KSTypeAlias @@ -36,6 +37,8 @@ class KSTypeAliasImpl private constructor(private val ktTypeAliasSymbol: KtTypeA cache.getOrPut(ktTypeAliasSymbol) { KSTypeAliasImpl(ktTypeAliasSymbol) } } + override fun asKSDeclaration(): KSDeclaration = this + override val name: KSName by lazy { KSNameImpl.getCached(ktTypeAliasSymbol.nameOrAnonymous.asString()) } diff --git a/kotlin-analysis-api/src/main/kotlin/com/google/devtools/ksp/impl/symbol/kotlin/KSTypeParameterImpl.kt b/kotlin-analysis-api/src/main/kotlin/com/google/devtools/ksp/impl/symbol/kotlin/KSTypeParameterImpl.kt index aea56696d5..05db571ad4 100644 --- a/kotlin-analysis-api/src/main/kotlin/com/google/devtools/ksp/impl/symbol/kotlin/KSTypeParameterImpl.kt +++ b/kotlin-analysis-api/src/main/kotlin/com/google/devtools/ksp/impl/symbol/kotlin/KSTypeParameterImpl.kt @@ -36,6 +36,8 @@ class KSTypeParameterImpl private constructor(internal val ktTypeParameterSymbol cache.getOrPut(ktTypeParameterSymbol) { KSTypeParameterImpl(ktTypeParameterSymbol) } } + override fun asKSDeclaration(): KSDeclaration = this + override val name: KSName by lazy { KSNameImpl.getCached(ktTypeParameterSymbol.name.asString()) } diff --git a/kotlin-analysis-api/src/main/kotlin/com/google/devtools/ksp/impl/symbol/util/BinaryUtils.kt b/kotlin-analysis-api/src/main/kotlin/com/google/devtools/ksp/impl/symbol/util/BinaryUtils.kt index 694843f77f..1a9f4aa9d9 100644 --- a/kotlin-analysis-api/src/main/kotlin/com/google/devtools/ksp/impl/symbol/util/BinaryUtils.kt +++ b/kotlin-analysis-api/src/main/kotlin/com/google/devtools/ksp/impl/symbol/util/BinaryUtils.kt @@ -154,7 +154,7 @@ internal class DeclarationOrdering( } private fun getOrder(decl: AbstractKSDeclarationImpl): Int { - return declOrdering.getOrPut(decl as KSDeclaration) { + return declOrdering.getOrPut(decl.asKSDeclaration()) { when (decl) { is KSPropertyDeclarationImpl -> { fieldOrdering[decl.simpleName.asString()]?.let {