You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Because KSP requires explicit type resolution, some functionalities in Java can
only be carried out by KSType and the corresponding elements before resolution.
Java
Closest facility in KSP
Notes
ArrayType
KSBuiltIns.arrayType
DeclaredType
KSType / KSClassifierReference
ErrorType
KSType.isError
ExecutableType
KSType / KSCallableReference
IntersectionType
KSType / KSTypeParameter
NoType
KSType.isError
N/A in KSP
NullType
N/A in KSP
PrimitiveType
KSBuiltIns
Not exactly same as primitive type in Java
ReferenceType
KSTypeReference
TypeMirror
KSType
TypeVariable
KSTypeParameter
UnionType
N / A
Kotlin has only one type per catch block. UnionType is also not observable by even Java annotation processors.
WildcardType
KSType / KSTypeArgument
Misc
Java
Closest facility in KSP
notes
Name
KSName
ElementKind
ClassKind / FunctionKind
Modifier
Modifier
NestingKind
ClassKind / FunctionKind
AnnotationValueVisitor
ElementVisitor
KSVisitor
AnnotatedConstruct
KSAnnotated
TypeVisitor
TypeKind
KSBuiltIns
Some can be found in builtins, otherwise check KSClassDeclaration for DeclaredType
ElementFilter
Collection.filterIsInstance
ElementKindVisitor
KSVisitor
ElementScanner
KSTopDownVisitor
SimpleAnnotationValueVisitor
No needed in KSP
SimpleElementVisitor
KSVisitor
SimpleTypeVisitor
TypeKindVisitor
Types
Resolver / utils
Some of the utils are also integrated into symbol interfaces
Elements
Resolver / utils
Details
How functionalities of Java annotation processing API can be carried out by KSP.
AnnotationMirror
Java
KSP equivalent
getAnnotationType
ksAnnotation.annotationType
getElementValues
ksAnnotation.arguments
AnnotationValue
Java
KSP equivalent
getValue
ksValueArgument.value
Element
Java
KSP equivalent
asType
ksClassDeclaration.asType(...) // Only available for KSClassDeclaration. Type arguments need to be supplied.
getAnnotation
// To be implemented.
getAnnotationMirrors
ksDeclaration.annotations
getEnclosedElements
ksDeclarationContainer.declarations
getEnclosingElements
ksDeclaration.parentDeclaration
getKind
type check & cast following ClassKind or FunctionKind
getModifiers
ksDeclaration.modifiers
getSimpleName
ksDeclaration.simpleName
ExecutableElement
Java
KSP equivalent
getDefaultValue
// To be implemented.
getParameters
ksFunctionDeclaration.parameters
getReceiverType
ksFunctionDeclaration.parentDeclaration
getReturnType
ksFunctionDeclaration.returnType
getSimpleName
ksFunctionDeclaration.simpleName
getThrownTypes
// Not needed in Kotlin.
getTypeParameters
ksFunctionDeclaration.typeParameters
isDefault
// Check whether parent declaration is an interface or not.
ksClassDeclaration.superTypes.map { it.resolve() }.filter {(it?.declaration as? KSClassDeclaration)?.classKind == ClassKind.INTERFACE} // Should be able to do without resolution.
getNestingKind
// check KSClassDeclaration.parentDeclaration and inner modifier.
getQualifiedName
ksClassDeclaration.qualifiedName
getSimpleName
ksClassDeclaration.simpleName
getSuperclass
ksClassDeclaration.superTypes.map { it.resolve() }.filter { (it?.declaration as? KSClassDeclaration)?.classKind == ClassKind.CLASS } // Should be able to do without resolution.
getTypeParameters
ksClassDeclaration.typeParameters
TypeParameterElement
Java
KSP equivalent
getBounds
ksTypeParameter.bounds
getEnclosingElement
ksTypeParameter.parentDeclaration
getGenericElement
ksTypeParameter.parentDeclaration
VariableElement
Java
KSP equivalent
getConstantValue
// To be implemented.
getEnclosingElement
ksValueParameter.parentDeclaration
getSimpleName
ksValueParameter.simpleName
ArrayType
Java
KSP equivalent
getComponentType
ksType.arguments.first()
DeclaredType
Java
KSP equivalent
asElement
ksType.declaration
getEnclosingType
ksType.declaration.parentDeclaration
getTypeArguments
ksType.arguments
ExecutableType
Note: A KSType for a function is just a signature represented by the
FunctionN<R, T1, T2, ..., TN> family.