diff --git a/api/api.base b/api/api.base index 378fc6a51b..b990727188 100644 --- a/api/api.base +++ b/api/api.base @@ -141,7 +141,7 @@ package com.google.devtools.ksp.processing { property @NonNull public abstract String targetName; } - public interface PlatformInfo { + public sealed interface PlatformInfo { method @NonNull public String getPlatformName(); property @NonNull public abstract String platformName; } @@ -262,7 +262,7 @@ package com.google.devtools.ksp.symbol { enum_constant public static final com.google.devtools.ksp.symbol.FunctionKind TOP_LEVEL; } - public interface KSAnnotated extends com.google.devtools.ksp.symbol.KSNode { + public sealed interface KSAnnotated extends com.google.devtools.ksp.symbol.KSNode { method @NonNull public kotlin.sequences.Sequence getAnnotations(); property @NonNull public abstract kotlin.sequences.Sequence annotations; } @@ -313,7 +313,7 @@ package com.google.devtools.ksp.symbol { property @Nullable public abstract com.google.devtools.ksp.symbol.KSClassifierReference qualifier; } - public interface KSDeclaration extends com.google.devtools.ksp.symbol.KSModifierListOwner com.google.devtools.ksp.symbol.KSAnnotated com.google.devtools.ksp.symbol.KSExpectActual { + public sealed interface KSDeclaration extends com.google.devtools.ksp.symbol.KSModifierListOwner com.google.devtools.ksp.symbol.KSAnnotated com.google.devtools.ksp.symbol.KSExpectActual { method @Nullable public com.google.devtools.ksp.symbol.KSFile getContainingFile(); method @Nullable public String getDocString(); method @NonNull public com.google.devtools.ksp.symbol.KSName getPackageName(); @@ -330,7 +330,7 @@ package com.google.devtools.ksp.symbol { property @NonNull public abstract java.util.List typeParameters; } - public interface KSDeclarationContainer extends com.google.devtools.ksp.symbol.KSNode { + public sealed interface KSDeclarationContainer extends com.google.devtools.ksp.symbol.KSNode { method @NonNull public kotlin.sequences.Sequence getDeclarations(); property @NonNull public abstract kotlin.sequences.Sequence declarations; } @@ -390,7 +390,7 @@ package com.google.devtools.ksp.symbol { property @Nullable public abstract com.google.devtools.ksp.symbol.KSTypeReference returnType; } - public interface KSModifierListOwner extends com.google.devtools.ksp.symbol.KSNode { + public sealed interface KSModifierListOwner extends com.google.devtools.ksp.symbol.KSNode { method @NonNull public java.util.Set getModifiers(); property @NonNull public abstract java.util.Set modifiers; } @@ -401,7 +401,7 @@ package com.google.devtools.ksp.symbol { method @NonNull public String getShortName(); } - public interface KSNode { + public sealed interface KSNode { method public R accept(@NonNull com.google.devtools.ksp.symbol.KSVisitor visitor, D data); method @NonNull public com.google.devtools.ksp.symbol.Location getLocation(); method @NonNull public com.google.devtools.ksp.symbol.Origin getOrigin(); @@ -416,7 +416,7 @@ package com.google.devtools.ksp.symbol { property @NonNull public abstract com.google.devtools.ksp.symbol.KSReferenceElement element; } - public interface KSPropertyAccessor extends com.google.devtools.ksp.symbol.KSDeclarationContainer com.google.devtools.ksp.symbol.KSAnnotated com.google.devtools.ksp.symbol.KSModifierListOwner { + public sealed interface KSPropertyAccessor extends com.google.devtools.ksp.symbol.KSDeclarationContainer com.google.devtools.ksp.symbol.KSAnnotated com.google.devtools.ksp.symbol.KSModifierListOwner { method @NonNull public com.google.devtools.ksp.symbol.KSPropertyDeclaration getReceiver(); property @NonNull public abstract com.google.devtools.ksp.symbol.KSPropertyDeclaration receiver; } @@ -449,7 +449,7 @@ package com.google.devtools.ksp.symbol { property @NonNull public abstract com.google.devtools.ksp.symbol.KSValueParameter parameter; } - public interface KSReferenceElement extends com.google.devtools.ksp.symbol.KSNode { + public sealed interface KSReferenceElement extends com.google.devtools.ksp.symbol.KSNode { method @NonNull public java.util.List getTypeArguments(); property @NonNull public abstract java.util.List typeArguments; } diff --git a/api/src/main/kotlin/com/google/devtools/ksp/processing/PlatformInfo.kt b/api/src/main/kotlin/com/google/devtools/ksp/processing/PlatformInfo.kt index fcefe55fd7..6f05680d0e 100644 --- a/api/src/main/kotlin/com/google/devtools/ksp/processing/PlatformInfo.kt +++ b/api/src/main/kotlin/com/google/devtools/ksp/processing/PlatformInfo.kt @@ -20,7 +20,7 @@ package com.google.devtools.ksp.processing /** * Platform specific information */ -interface PlatformInfo { +sealed interface PlatformInfo { val platformName: String } diff --git a/api/src/main/kotlin/com/google/devtools/ksp/symbol/KSAnnotated.kt b/api/src/main/kotlin/com/google/devtools/ksp/symbol/KSAnnotated.kt index 3cfd551f8a..a06aee8951 100644 --- a/api/src/main/kotlin/com/google/devtools/ksp/symbol/KSAnnotated.kt +++ b/api/src/main/kotlin/com/google/devtools/ksp/symbol/KSAnnotated.kt @@ -19,7 +19,7 @@ package com.google.devtools.ksp.symbol /** * A symbol that can be annotated with annotations. */ -interface KSAnnotated : KSNode { +sealed interface KSAnnotated : KSNode { /** * All annotations on this symbol. diff --git a/api/src/main/kotlin/com/google/devtools/ksp/symbol/KSDeclaration.kt b/api/src/main/kotlin/com/google/devtools/ksp/symbol/KSDeclaration.kt index 6d71e13266..7c6322b726 100644 --- a/api/src/main/kotlin/com/google/devtools/ksp/symbol/KSDeclaration.kt +++ b/api/src/main/kotlin/com/google/devtools/ksp/symbol/KSDeclaration.kt @@ -19,7 +19,7 @@ package com.google.devtools.ksp.symbol /** * A declaration, can be function declaration, class declaration and property declaration, or a type alias. */ -interface KSDeclaration : KSModifierListOwner, KSAnnotated, KSExpectActual { +sealed interface KSDeclaration : KSModifierListOwner, KSAnnotated, KSExpectActual { /** * Simple name of this declaration, usually the name identifier at the declaration site. */ diff --git a/api/src/main/kotlin/com/google/devtools/ksp/symbol/KSDeclarationContainer.kt b/api/src/main/kotlin/com/google/devtools/ksp/symbol/KSDeclarationContainer.kt index e9844df31b..3e7edb9e7b 100644 --- a/api/src/main/kotlin/com/google/devtools/ksp/symbol/KSDeclarationContainer.kt +++ b/api/src/main/kotlin/com/google/devtools/ksp/symbol/KSDeclarationContainer.kt @@ -19,7 +19,7 @@ package com.google.devtools.ksp.symbol /** * A declaration container can have a list of declarations declared in it. */ -interface KSDeclarationContainer : KSNode { +sealed interface KSDeclarationContainer : KSNode { /** * Declarations that are lexically declared inside the current container. */ diff --git a/api/src/main/kotlin/com/google/devtools/ksp/symbol/KSModifierListOwner.kt b/api/src/main/kotlin/com/google/devtools/ksp/symbol/KSModifierListOwner.kt index 8d8b20134b..ac9d2e9c8f 100644 --- a/api/src/main/kotlin/com/google/devtools/ksp/symbol/KSModifierListOwner.kt +++ b/api/src/main/kotlin/com/google/devtools/ksp/symbol/KSModifierListOwner.kt @@ -19,7 +19,7 @@ package com.google.devtools.ksp.symbol /** * A [KSModifierListOwner] can have zero or more modifiers. */ -interface KSModifierListOwner : KSNode { +sealed interface KSModifierListOwner : KSNode { /** * The set of modifiers on this element. */ diff --git a/api/src/main/kotlin/com/google/devtools/ksp/symbol/KSNode.kt b/api/src/main/kotlin/com/google/devtools/ksp/symbol/KSNode.kt index 08e2d7df2e..89e7b56ed7 100644 --- a/api/src/main/kotlin/com/google/devtools/ksp/symbol/KSNode.kt +++ b/api/src/main/kotlin/com/google/devtools/ksp/symbol/KSNode.kt @@ -19,7 +19,7 @@ package com.google.devtools.ksp.symbol /** * Base class of every visitable program elements. */ -interface KSNode { +sealed interface KSNode { val origin: Origin val location: Location val parent: KSNode? diff --git a/api/src/main/kotlin/com/google/devtools/ksp/symbol/KSPropertyAccessor.kt b/api/src/main/kotlin/com/google/devtools/ksp/symbol/KSPropertyAccessor.kt index 3a2405d6f8..0f2af96563 100644 --- a/api/src/main/kotlin/com/google/devtools/ksp/symbol/KSPropertyAccessor.kt +++ b/api/src/main/kotlin/com/google/devtools/ksp/symbol/KSPropertyAccessor.kt @@ -21,7 +21,7 @@ package com.google.devtools.ksp.symbol * Note that annotation use-site targets such as @get: @set: is not copied to accessor's annotations attribute. * Use KSAnnotated.findAnnotationFromUseSiteTarget() to ensure annotations from parent is obtained. */ -interface KSPropertyAccessor : KSDeclarationContainer, KSAnnotated, KSModifierListOwner { +sealed interface KSPropertyAccessor : KSDeclarationContainer, KSAnnotated, KSModifierListOwner { /** * The owner of the property accessor. */ diff --git a/api/src/main/kotlin/com/google/devtools/ksp/symbol/KSReferenceElement.kt b/api/src/main/kotlin/com/google/devtools/ksp/symbol/KSReferenceElement.kt index 425036dcba..2ef24569e9 100644 --- a/api/src/main/kotlin/com/google/devtools/ksp/symbol/KSReferenceElement.kt +++ b/api/src/main/kotlin/com/google/devtools/ksp/symbol/KSReferenceElement.kt @@ -21,7 +21,7 @@ package com.google.devtools.ksp.symbol * * KSReferenceElement can specify, for example, a class, interface, or function, etc. */ -interface KSReferenceElement : KSNode { +sealed interface KSReferenceElement : KSNode { /** * Type arguments in the type reference. */ diff --git a/compiler-plugin/src/main/kotlin/com/google/devtools/ksp/Incremental.kt b/compiler-plugin/src/main/kotlin/com/google/devtools/ksp/Incremental.kt index fc184e199c..b78003a426 100644 --- a/compiler-plugin/src/main/kotlin/com/google/devtools/ksp/Incremental.kt +++ b/compiler-plugin/src/main/kotlin/com/google/devtools/ksp/Incremental.kt @@ -657,6 +657,8 @@ class IncrementalContext( when (declaration) { is KSPropertyDeclarationJavaImpl -> recordLookupForJavaField(declaration.psi) is KSFunctionDeclarationJavaImpl -> recordLookupForJavaMethod(declaration.psi) + is KSClassDeclaration, is KSFunctionDeclaration, is KSPropertyDeclaration, is KSTypeAlias, + is KSTypeParameter -> Unit } } diff --git a/compiler-plugin/src/main/kotlin/com/google/devtools/ksp/processing/impl/ResolverImpl.kt b/compiler-plugin/src/main/kotlin/com/google/devtools/ksp/processing/impl/ResolverImpl.kt index f07b68e633..9d8c24a28f 100644 --- a/compiler-plugin/src/main/kotlin/com/google/devtools/ksp/processing/impl/ResolverImpl.kt +++ b/compiler-plugin/src/main/kotlin/com/google/devtools/ksp/processing/impl/ResolverImpl.kt @@ -627,6 +627,11 @@ class ResolverImpl( resolverContext = resolverContext .childForClassOrPackage(resolveJavaDeclaration(e.psi) as ClassDescriptor, JavaClassImpl(e.psi)) } + is KSClassDeclaration, is KSFunctionDeclaration, is KSPropertyDeclaration, is KSTypeAlias, + is KSTypeParameter, is KSFile, is KSPropertyGetter, is KSPropertySetter, is KSTypeArgument, + is KSTypeReference, is KSValueArgument, is KSValueParameter, is KSAnnotation, is KSCallableReference, + is KSClassifierReference, is KSDefNonNullReference, is KSDynamicReference, is KSParenthesizedReference, + -> Unit } } return if (javaType is JavaArrayTypeImpl) @@ -1192,6 +1197,7 @@ class ResolverImpl( if (declaration.isAbstract) modifiers.add(Modifier.ABSTRACT) } + is KSTypeAlias, is KSTypeParameter -> Unit } } Origin.KOTLIN_LIB, Origin.JAVA_LIB -> { @@ -1208,6 +1214,7 @@ class ResolverImpl( if (declaration.jvmAccessFlag and Opcodes.ACC_SYNCHRONIZED != 0) modifiers.add(Modifier.JAVA_SYNCHRONIZED) } + is KSClassDeclaration, is KSTypeAlias, is KSTypeParameter -> Unit } } else -> Unit 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 db041b2668..e0e5d6ee17 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 @@ -30,21 +30,22 @@ import org.jetbrains.kotlin.resolve.descriptorUtil.parents import org.jetbrains.kotlin.resolve.descriptorUtil.parentsWithSelf import org.jetbrains.kotlin.utils.addToStdlib.firstIsInstanceOrNull -abstract class KSDeclarationDescriptorImpl(private val descriptor: DeclarationDescriptor) : KSDeclaration { +abstract class KSDeclarationDescriptorImpl(private val descriptor: DeclarationDescriptor) /*: KSDeclaration*/ { - override val origin by lazy { + open /*override*/ val origin by lazy { descriptor.origin } - override val containingFile: KSFile? = null + open /*override*/ val containingFile: KSFile? = null - override val location: Location = NonExistLocation + open /*override*/ val location: Location = NonExistLocation - override val annotations: Sequence by lazy { - descriptor.annotations.asSequence().map { KSAnnotationDescriptorImpl.getCached(it, this) }.memoized() + open /*override*/ val annotations: Sequence by lazy { + descriptor.annotations.asSequence().map { KSAnnotationDescriptorImpl.getCached(it, this as KSDeclaration) } + .memoized() } - override val parentDeclaration: KSDeclaration? by lazy { + open /*override*/ val parentDeclaration: KSDeclaration? by lazy { val containingDescriptor = descriptor.parents.first() when (containingDescriptor) { is ClassDescriptor -> KSClassDeclarationDescriptorImpl.getCached(containingDescriptor) @@ -53,19 +54,19 @@ abstract class KSDeclarationDescriptorImpl(private val descriptor: DeclarationDe } as KSDeclaration? } - override val parent: KSNode? by lazy { + open /*override*/ val parent: KSNode? by lazy { parentDeclaration } - override val packageName: KSName by lazy { + open /*override*/ val packageName: KSName by lazy { KSNameImpl.getCached(descriptor.findPackage().fqName.asString()) } - override val qualifiedName: KSName by lazy { + open /*override*/ val qualifiedName: KSName by lazy { KSNameImpl.getCached(descriptor.fqNameSafe.asString()) } - override val simpleName: KSName by lazy { + open /*override*/ val simpleName: KSName by lazy { KSNameImpl.getCached(descriptor.name.asString()) } @@ -73,7 +74,7 @@ abstract class KSDeclarationDescriptorImpl(private val descriptor: DeclarationDe return this.simpleName.asString() } - override val docString = null + open /*override*/ val docString: String? = null } val DeclarationDescriptor.origin: Origin diff --git a/compiler-plugin/src/main/kotlin/com/google/devtools/ksp/symbol/impl/binary/KSNodeDescriptorImpl.kt b/compiler-plugin/src/main/kotlin/com/google/devtools/ksp/symbol/impl/binary/KSNodeDescriptorImpl.kt deleted file mode 100644 index 0c82f750fd..0000000000 --- a/compiler-plugin/src/main/kotlin/com/google/devtools/ksp/symbol/impl/binary/KSNodeDescriptorImpl.kt +++ /dev/null @@ -1,9 +0,0 @@ -package com.google.devtools.ksp.symbol.impl.binary - -import com.google.devtools.ksp.symbol.KSNode -import com.google.devtools.ksp.symbol.Location -import com.google.devtools.ksp.symbol.NonExistLocation - -abstract class KSNodeDescriptorImpl(override val parent: KSNode?) : KSNode { - override val location: Location = NonExistLocation -} 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 99ad99dc06..e51a5d541b 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 @@ -25,8 +25,8 @@ 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 { - override val origin: Origin by lazy { +abstract class KSPropertyAccessorDescriptorImpl(val descriptor: PropertyAccessorDescriptor) /*: KSPropertyAccessor*/ { + open /*override*/ val origin: Origin by lazy { when (receiver.origin) { // if receiver is kotlin source, that means we are a synthetic where developer // didn't declare an explicit accessor so we used the descriptor instead @@ -35,26 +35,27 @@ abstract class KSPropertyAccessorDescriptorImpl(val descriptor: PropertyAccessor } } - override val receiver: KSPropertyDeclaration by lazy { + open /*override*/ val receiver: KSPropertyDeclaration by lazy { descriptor.correspondingProperty.toKSPropertyDeclaration() } - override val parent: KSNode? by lazy { + open /*override*/ val parent: KSNode? by lazy { receiver } - override val location: Location + open /*override*/ val location: Location get() { // if receiver is kotlin source, that means `this` is synthetic hence we want the property's location // Otherwise, receiver is also from a .class file where the location will be NoLocation return receiver.location } - override val annotations: Sequence by lazy { - descriptor.annotations.asSequence().map { KSAnnotationDescriptorImpl.getCached(it, this) }.memoized() + open /*override*/ val annotations: Sequence by lazy { + descriptor.annotations.asSequence().map { KSAnnotationDescriptorImpl.getCached(it, this as KSPropertyAccessor) } + .memoized() } - override val modifiers: Set by lazy { + open /*override*/ val modifiers: Set by lazy { val modifiers = mutableSetOf() modifiers.addAll(descriptor.toKSModifiers()) modifiers.addAll(descriptor.toFunctionKSModifiers()) 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 ebdffaccd7..dd23e85afb 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 @@ -25,24 +25,24 @@ import com.google.devtools.ksp.symbol.impl.findParentDeclaration import com.google.devtools.ksp.symbol.impl.getDocString import com.intellij.psi.PsiElement -abstract class KSDeclarationJavaImpl(private val psi: PsiElement) : KSDeclaration { - override val packageName: KSName by lazy { - this.containingFile!!.packageName +abstract class KSDeclarationJavaImpl(private val psi: PsiElement) /*: KSDeclaration*/ { + open /*override*/ val packageName: KSName by lazy { + (this as KSDeclaration).containingFile!!.packageName } override fun toString(): String { - return this.simpleName.asString() + return (this as KSDeclaration).simpleName.asString() } - override val docString by lazy { + open /*override*/ val docString by lazy { psi.getDocString() } - override val parentDeclaration: KSDeclaration? by lazy { + open /*override*/ val parentDeclaration: KSDeclaration? by lazy { psi.findParentDeclaration() } - override val parent: KSNode? by lazy { + open /*override*/ val parent: KSNode? by lazy { psi.findParentAnnotated() } } diff --git a/compiler-plugin/src/main/kotlin/com/google/devtools/ksp/symbol/impl/java/KSNodeJavaImpl.kt b/compiler-plugin/src/main/kotlin/com/google/devtools/ksp/symbol/impl/java/KSNodeJavaImpl.kt deleted file mode 100644 index 860fb5fa04..0000000000 --- a/compiler-plugin/src/main/kotlin/com/google/devtools/ksp/symbol/impl/java/KSNodeJavaImpl.kt +++ /dev/null @@ -1,12 +0,0 @@ -package com.google.devtools.ksp.symbol.impl.java - -import com.google.devtools.ksp.symbol.KSNode -import com.google.devtools.ksp.symbol.Location -import com.google.devtools.ksp.symbol.impl.toLocation -import com.intellij.psi.PsiElement - -abstract class KSNodeJavaImpl(private val psi: PsiElement, override val parent: KSNode?) : KSNode { - override val location: Location by lazy { - psi.toLocation() - } -} diff --git a/compiler-plugin/src/main/kotlin/com/google/devtools/ksp/symbol/impl/kotlin/KSDeclarationImpl.kt b/compiler-plugin/src/main/kotlin/com/google/devtools/ksp/symbol/impl/kotlin/KSDeclarationImpl.kt index b1f2a8499f..c01defae32 100644 --- a/compiler-plugin/src/main/kotlin/com/google/devtools/ksp/symbol/impl/kotlin/KSDeclarationImpl.kt +++ b/compiler-plugin/src/main/kotlin/com/google/devtools/ksp/symbol/impl/kotlin/KSDeclarationImpl.kt @@ -24,26 +24,26 @@ import com.google.devtools.ksp.symbol.* import com.google.devtools.ksp.symbol.impl.* import org.jetbrains.kotlin.psi.* -abstract class KSDeclarationImpl(val ktDeclaration: KtDeclaration) : KSDeclaration { - override val origin: Origin = Origin.KOTLIN +abstract class KSDeclarationImpl(val ktDeclaration: KtDeclaration) /*: KSDeclaration*/ { + open /*override*/ val origin: Origin = Origin.KOTLIN - override val location: Location by lazy { + open /*override*/ val location: Location by lazy { ktDeclaration.toLocation() } - override val simpleName: KSName by lazy { + open /*override*/ val simpleName: KSName by lazy { KSNameImpl.getCached(ktDeclaration.name!!) } - override val qualifiedName: KSName? by lazy { + open /*override*/ val qualifiedName: KSName? by lazy { (ktDeclaration as? KtNamedDeclaration)?.fqName?.let { KSNameImpl.getCached(it.asString()) } } - override val annotations: Sequence by lazy { + open /*override*/ val annotations: Sequence by lazy { ktDeclaration.annotationEntries.asSequence().map { KSAnnotationImpl.getCached(it) }.memoized() } - override val modifiers: Set by lazy { + open /*override*/ val modifiers: Set by lazy { // we do not check for JVM_STATIC here intentionally as it actually means static in parent class, // not in this class. // see: https://github.com/google/ksp/issues/378 @@ -56,25 +56,25 @@ abstract class KSDeclarationImpl(val ktDeclaration: KtDeclaration) : KSDeclarati } } - override val containingFile: KSFile? by lazy { + open /*override*/ val containingFile: KSFile? by lazy { KSFileImpl.getCached(ktDeclaration.containingKtFile) } - override val packageName: KSName by lazy { + open /*override*/ val packageName: KSName by lazy { this.containingFile!!.packageName } - override val typeParameters: List by lazy { + open /*override*/ val typeParameters: List by lazy { (ktDeclaration as? KtTypeParameterListOwner)?.let { it.typeParameters.map { KSTypeParameterImpl.getCached(it) } } ?: emptyList() } - override val parentDeclaration: KSDeclaration? by lazy { + open /*override*/ val parentDeclaration: KSDeclaration? by lazy { ktDeclaration.findParentDeclaration() } - override val parent: KSNode? by lazy { + open /*override*/ val parent: KSNode? by lazy { ktDeclaration.findParentAnnotated() } @@ -86,7 +86,7 @@ abstract class KSDeclarationImpl(val ktDeclaration: KtDeclaration) : KSDeclarati ktDeclaration.annotationEntries.map { KSAnnotationImpl.getCached(it) } } - override val docString by lazy { + open /*override*/ val docString by lazy { ktDeclaration.getDocString() } } diff --git a/compiler-plugin/src/main/kotlin/com/google/devtools/ksp/symbol/impl/kotlin/KSNodeKtImpl.kt b/compiler-plugin/src/main/kotlin/com/google/devtools/ksp/symbol/impl/kotlin/KSNodeKtImpl.kt deleted file mode 100644 index 8c44b1453f..0000000000 --- a/compiler-plugin/src/main/kotlin/com/google/devtools/ksp/symbol/impl/kotlin/KSNodeKtImpl.kt +++ /dev/null @@ -1,12 +0,0 @@ -package com.google.devtools.ksp.symbol.impl.kotlin - -import com.google.devtools.ksp.symbol.KSNode -import com.google.devtools.ksp.symbol.Location -import com.google.devtools.ksp.symbol.impl.toLocation -import org.jetbrains.kotlin.psi.KtElement - -abstract class KSNodeKtImpl(private val element: KtElement) : KSNode { - override val location: Location by lazy { - element.toLocation() - } -} 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 9d57b25d27..79a12a6d0f 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 @@ -26,7 +26,7 @@ import com.google.devtools.ksp.symbol.impl.toLocation import org.jetbrains.kotlin.psi.KtProperty import org.jetbrains.kotlin.psi.KtPropertyAccessor -abstract class KSPropertyAccessorImpl(val ktPropertyAccessor: KtPropertyAccessor) : KSPropertyAccessor { +abstract class KSPropertyAccessorImpl(val ktPropertyAccessor: KtPropertyAccessor) /*: KSPropertyAccessor*/ { companion object { fun getCached(ktPropertyAccessor: KtPropertyAccessor): KSPropertyAccessor { return if (ktPropertyAccessor.isGetter) { @@ -36,27 +36,27 @@ abstract class KSPropertyAccessorImpl(val ktPropertyAccessor: KtPropertyAccessor } } } - override val receiver: KSPropertyDeclaration by lazy { + open /*override*/ val receiver: KSPropertyDeclaration by lazy { KSPropertyDeclarationImpl.getCached(ktPropertyAccessor.property as KtProperty) } - override val annotations: Sequence by lazy { + open /*override*/ val annotations: Sequence by lazy { ktPropertyAccessor.filterUseSiteTargetAnnotations().map { KSAnnotationImpl.getCached(it) } - .plus(this.findAnnotationFromUseSiteTarget()) + .plus((this as KSPropertyAccessor).findAnnotationFromUseSiteTarget()) } - override val parent: KSNode? by lazy { + open /*override*/ val parent: KSNode? by lazy { receiver } - override val location: Location by lazy { + open /*override*/ val location: Location by lazy { ktPropertyAccessor.toLocation() } - override val modifiers: Set by lazy { + open /*override*/ val modifiers: Set by lazy { ktPropertyAccessor.toKSModifiers() } - override val declarations: Sequence by lazy { + open /*override*/ val declarations: Sequence by lazy { if (!ktPropertyAccessor.hasBlockBody()) { emptySequence() } else { @@ -65,10 +65,10 @@ abstract class KSPropertyAccessorImpl(val ktPropertyAccessor: KtPropertyAccessor } } - override val origin: Origin = Origin.KOTLIN + open /*override*/ val origin: Origin = Origin.KOTLIN - override fun accept(visitor: KSVisitor, data: D): R { - return visitor.visitPropertyAccessor(this, data) + open /*override*/ fun accept(visitor: KSVisitor, data: D): R { + return visitor.visitPropertyAccessor(this as KSPropertyAccessor, data) } internal val originalAnnotations: List by lazy { diff --git a/compiler-plugin/src/main/kotlin/com/google/devtools/ksp/symbol/impl/synthetic/KSConstructorSyntheticImpl.kt b/compiler-plugin/src/main/kotlin/com/google/devtools/ksp/symbol/impl/synthetic/KSConstructorSyntheticImpl.kt index 8f2efd36f7..dc0bd3a47a 100644 --- a/compiler-plugin/src/main/kotlin/com/google/devtools/ksp/symbol/impl/synthetic/KSConstructorSyntheticImpl.kt +++ b/compiler-plugin/src/main/kotlin/com/google/devtools/ksp/symbol/impl/synthetic/KSConstructorSyntheticImpl.kt @@ -25,9 +25,7 @@ import com.google.devtools.ksp.processing.impl.ResolverImpl import com.google.devtools.ksp.symbol.* class KSConstructorSyntheticImpl private constructor(val ksClassDeclaration: KSClassDeclaration) : - KSFunctionDeclaration, - KSDeclaration - by ksClassDeclaration { + KSFunctionDeclaration { companion object : KSObjectCache() { fun getCached(ksClassDeclaration: KSClassDeclaration) = KSConstructorSyntheticImpl.cache.getOrPut(ksClassDeclaration) { @@ -43,6 +41,10 @@ class KSConstructorSyntheticImpl private constructor(val ksClassDeclaration: KSC override val functionKind: FunctionKind = FunctionKind.MEMBER + override val docString: String? get() = ksClassDeclaration.docString + + override val packageName: KSName get() = ksClassDeclaration.packageName + override val qualifiedName: KSName? by lazy { KSNameImpl.getCached(ksClassDeclaration.qualifiedName?.asString()?.plus(".") ?: "") } 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 f6f0ad9fc6..98d5fe5f4a 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 @@ -20,22 +20,22 @@ package com.google.devtools.ksp.symbol.impl.synthetic import com.google.devtools.ksp.processing.impl.findAnnotationFromUseSiteTarget import com.google.devtools.ksp.symbol.* -abstract class KSPropertyAccessorSyntheticImpl(ksPropertyDeclaration: KSPropertyDeclaration) : KSPropertyAccessor { - override val annotations: Sequence by lazy { - this.findAnnotationFromUseSiteTarget() +abstract class KSPropertyAccessorSyntheticImpl(ksPropertyDeclaration: KSPropertyDeclaration) /*: KSPropertyAccessor*/ { + open /*override*/ val annotations: Sequence by lazy { + (this as KSPropertyAccessor).findAnnotationFromUseSiteTarget() } - override val location: Location by lazy { + open /*override*/ val location: Location by lazy { ksPropertyDeclaration.location } - override val modifiers: Set = emptySet() + open /*override*/ val modifiers: Set = emptySet() - override val origin: Origin = Origin.SYNTHETIC + open /*override*/ val origin: Origin = Origin.SYNTHETIC - override val receiver: KSPropertyDeclaration = ksPropertyDeclaration + open /*override*/ val receiver: KSPropertyDeclaration = ksPropertyDeclaration - override fun accept(visitor: KSVisitor, data: D): R { - return visitor.visitPropertyAccessor(this, data) + open /*override*/ fun accept(visitor: KSVisitor, data: D): R { + return visitor.visitPropertyAccessor(this as KSPropertyAccessor, data) } } 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 66de2f9d6a..a926f0fe0c 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) { + return declOrdering.getOrPut(decl as KSDeclaration) { when (decl) { is KSPropertyDeclarationDescriptorImpl -> { fieldOrdering[decl.simpleName.asString()]?.let { @@ -467,7 +467,8 @@ internal val KSDeclarationContainer.declarationsInSourceOrder: Sequence)?.sortedWith(declarationOrdering.comparator) + return (declarations as? Sequence) + ?.sortedWith(declarationOrdering.comparator) as Sequence? ?: declarations } 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 d32aa91d98..31dd70be87 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 @@ -166,6 +166,7 @@ class ResolverAAImpl( if (declaration.isAbstract) modifiers.add(Modifier.ABSTRACT) } + is KSTypeAlias, is KSTypeParameter -> Unit } } Origin.KOTLIN_LIB, Origin.JAVA_LIB -> { @@ -186,6 +187,7 @@ class ResolverAAImpl( if (declaration.jvmAccessFlag and Opcodes.ACC_SYNCHRONIZED != 0) modifiers.add(Modifier.JAVA_SYNCHRONIZED) } + is KSClassDeclaration, is KSTypeAlias, is KSTypeParameter -> Unit } } else -> Unit 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 f96dae191b..72fe8f6f20 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 @@ -38,24 +38,24 @@ import org.jetbrains.kotlin.analysis.utils.printer.parentOfType import org.jetbrains.kotlin.psi.KtElement import org.jetbrains.kotlin.psi.KtModifierListOwner -abstract class AbstractKSDeclarationImpl(val ktDeclarationSymbol: KtDeclarationSymbol) : KSDeclaration, Deferrable { - override val origin: Origin by lazy { +abstract class AbstractKSDeclarationImpl(val ktDeclarationSymbol: KtDeclarationSymbol) : /*KSDeclaration,*/ Deferrable { + open /*override*/ val origin: Origin by lazy { mapAAOrigin(ktDeclarationSymbol) } - override val location: Location by lazy { + open /*override*/ val location: Location by lazy { ktDeclarationSymbol.psi.toLocation() } - override val simpleName: KSName by lazy { + open /*override*/ val simpleName: KSName by lazy { KSNameImpl.getCached((ktDeclarationSymbol as? KtNamedSymbol)?.name?.asString() ?: "") } - override val annotations: Sequence by lazy { + open /*override*/ val annotations: Sequence by lazy { originalAnnotations } - override val modifiers: Set by lazy { + open /*override*/ val modifiers: Set by lazy { if (origin == Origin.JAVA_LIB || origin == Origin.KOTLIN_LIB) { when (ktDeclarationSymbol) { is KtPropertySymbol -> ktDeclarationSymbol.toModifiers() @@ -73,24 +73,24 @@ abstract class AbstractKSDeclarationImpl(val ktDeclarationSymbol: KtDeclarationS } } - override val containingFile: KSFile? by lazy { + open /*override*/ val containingFile: KSFile? by lazy { ktDeclarationSymbol.toContainingFile() } - override val packageName: KSName by lazy { + open /*override*/ val packageName: KSName by lazy { ((containingFile?.packageName ?: ktDeclarationSymbol.getContainingKSSymbol()?.packageName)?.asString() ?: "") .let { KSNameImpl.getCached(it) } } - override val typeParameters: List by lazy { + open /*override*/ val typeParameters: List by lazy { ktDeclarationSymbol.typeParameters.map { KSTypeParameterImpl.getCached(it) } } - override val parentDeclaration: KSDeclaration? by lazy { + open /*override*/ val parentDeclaration: KSDeclaration? by lazy { parent as? KSDeclaration } - override val parent: KSNode? by lazy { + open /*override*/ val parent: KSNode? by lazy { analyze { ktDeclarationSymbol.getContainingSymbol()?.let { ktDeclarationSymbol.getContainingKSSymbol() @@ -104,11 +104,11 @@ abstract class AbstractKSDeclarationImpl(val ktDeclarationSymbol: KtDeclarationS return simpleName.asString() } - override val docString: String? + open /*override*/ val docString: String? get() = ktDeclarationSymbol.toDocString() internal val originalAnnotations = if (ktDeclarationSymbol.psi is KtElement || ktDeclarationSymbol.psi == null) { - ktDeclarationSymbol.annotations(this) + ktDeclarationSymbol.annotations(this as KSDeclaration) } else { (ktDeclarationSymbol.psi as PsiJvmModifiersOwner) .annotations.map { KSAnnotationJavaImpl.getCached(it) }.asSequence() 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 fb5863c85b..443f74bca8 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 @@ -31,23 +31,23 @@ import org.jetbrains.kotlin.psi.KtPropertyAccessor abstract class KSPropertyAccessorImpl( internal val ktPropertyAccessorSymbol: KtPropertyAccessorSymbol, - override val receiver: KSPropertyDeclaration -) : KSPropertyAccessor, Deferrable { + open /*override*/ val receiver: KSPropertyDeclaration +) : /*KSPropertyAccessor,*/ Deferrable { - override val annotations: Sequence by lazy { + open /*override*/ val annotations: Sequence by lazy { ktPropertyAccessorSymbol.annotations.asSequence() .filter { it.useSiteTarget != AnnotationUseSiteTarget.SETTER_PARAMETER } - .map { KSAnnotationImpl.getCached(it, this) } - .plus(findAnnotationFromUseSiteTarget()) + .map { KSAnnotationImpl.getCached(it, this as KSPropertyAccessor) } + .plus((this as KSPropertyAccessor).findAnnotationFromUseSiteTarget()) } - internal val originalAnnotations = ktPropertyAccessorSymbol.annotations(this) + internal val originalAnnotations = ktPropertyAccessorSymbol.annotations(this as KSPropertyAccessor) - override val location: Location by lazy { + open /*override*/ val location: Location by lazy { ktPropertyAccessorSymbol.psi?.toLocation() ?: NonExistLocation } - override val modifiers: Set by lazy { + open /*override*/ val modifiers: Set by lazy { ((ktPropertyAccessorSymbol.psi as? KtModifierListOwner)?.toKSModifiers() ?: emptySet()).let { if (origin == Origin.SYNTHETIC && (receiver.parentDeclaration as? KSClassDeclaration)?.classKind == ClassKind.INTERFACE @@ -59,7 +59,7 @@ abstract class KSPropertyAccessorImpl( } } - override val origin: Origin by lazy { + open /*override*/ val origin: Origin by lazy { val symbolOrigin = mapAAOrigin(ktPropertyAccessorSymbol) if (symbolOrigin == Origin.KOTLIN && ktPropertyAccessorSymbol.psi == null) { Origin.SYNTHETIC @@ -68,10 +68,10 @@ abstract class KSPropertyAccessorImpl( } } - override val parent: KSNode? + open /*override*/ val parent: KSNode? get() = ktPropertyAccessorSymbol.getContainingKSSymbol() - override val declarations: Sequence by lazy { + open /*override*/ val declarations: Sequence by lazy { val psi = ktPropertyAccessorSymbol.psi as? KtPropertyAccessor ?: return@lazy emptySequence() if (!psi.hasBlockBody()) { emptySequence()