Java annotation processing to KSP reference
Program elements
Java |
Closest facility in KSP |
Notes |
---|---|---|
AnnotationMirror |
KSAnnotation |
|
AnnotationValue |
KSValueArguments |
|
Element |
KSDeclaration / KSDeclarationContainer |
|
ExecutableElement |
KSFunctionDeclaration |
|
PackageElement |
KSFile |
KSP doesn't model packages as program elements. |
Parameterizable |
KSDeclaration |
|
QualifiedNameable |
KSDeclaration |
|
TypeElement |
KSClassDeclaration |
|
TypeParameterElement |
KSTypeParameter |
|
VariableElement |
KSValueParameter / KSPropertyDeclaration |
Types
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. |
isVarArgs |
ksFunctionDeclaration.parameters.any |
Parameterizable
Java |
KSP equivalent |
---|---|
getTypeParameters |
ksFunctionDeclaration.typeParameters |
QualifiedNameable
Java |
KSP equivalent |
---|---|
getQualifiedName |
ksDeclaration.qualifiedName |
TypeElement
Java |
KSP equivalent |
---|---|
getEnclosedElements |
ksClassDeclaration.declarations |
getEnclosingElement |
ksClassDeclaration.parentDeclaration |
getInterfaces |
|
getNestingKind |
// check KSClassDeclaration.parentDeclaration and inner modifier. |
getQualifiedName |
ksClassDeclaration.qualifiedName |
getSimpleName |
ksClassDeclaration.simpleName |
getSuperclass |
|
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.
Java |
KSP equivalent |
---|---|
getParameterTypes |
ksType.declaration.typeParameters, ksFunctionDeclaration.parameters.map |
getReceiverType |
ksFunctionDeclaration.parentDeclaration.asType(...) |
getReturnType |
ksType.declaration.typeParameters.last() |
getThrownTypes |
// Not needed in Kotlin. |
getTypeVariables |
ksFunctionDeclaration.typeParameters |
IntersectionType
Java |
KSP equivalent |
---|---|
getBounds |
ksTypeParameter.bounds |
TypeMirror
Java |
KSP equivalent |
---|---|
getKind |
// Compare with types in KSBuiltIns for primitive types, Unit type, otherwise declared types |
TypeVariable
Java |
KSP equivalent |
---|---|
asElement |
ksType.declaration |
getLowerBound |
// To be decided. Only needed if capture is provided and explicit bound checking is needed. |
getUpperBound |
ksTypeParameter.bounds |
WildcardType
Java |
KSP equivalent |
---|---|
getExtendsBound |
|
getSuperBound |
|
Elements
Java |
KSP equivalent |
---|---|
getAllAnnotationMirrors |
KSDeclarations.annotations |
getAllMembers |
getAllFunctions and getAllProperties, the latter is not there yet |
getBinaryName |
// To be decided, see Java Spec |
getConstantExpression |
we have constant value, not expression |
getDocComment |
// To be implemented |
getElementValuesWithDefaults |
// To be implemented. |
getName |
resolver.getKSNameFromString |
getPackageElement |
Package not supported, while package information can be retrieved, operation on package is not possible for KSP |
getPackageOf |
Package not supported |
getTypeElement |
Resolver.getClassDeclarationByName |
hides |
// To be implemented |
isDeprecated |
KsDeclaration.annotations.any { it.annotationType.resolve()!!.declaration.quailifiedName!!.asString() == Deprecated::class.quailifiedName } |
overrides |
KSFunctionDeclaration/KSPropertyDeclaration.overrides // member function of respective class |
printElements |
// KSP implemented basic toString() on most classes. |
Types
Java |
KSP equivalent |
---|---|
asElement |
ksType.declaration |
asMemberOf |
resolver.asMemberOf |
boxedClass |
// Not needed |
capture |
// To be decided. |
contains |
KSType.isAssignableFrom |
directSuperTypes |
(ksType.declaration as KSClassDeclaration).superTypes |
erasure |
ksType.starProjection() |
getArrayType |
ksBuiltIns.arrayType.replace(...) |
getDeclaredType |
ksClassDeclaration.asType |
getNoType |
ksBuiltIns.nothingType / null |
getNullType |
// depends on the context, KSType.markNullable maybe useful. |
getPrimitiveType |
// Not needed, check for KSBuiltins |
getWildcardType |
// Use Variance in places expecting KSTypeArgument |
isAssignable |
ksType.isAssignableFrom |
isSameType |
ksType.equals |
isSubsignature |
functionTypeA == functionTypeB // functionTypeA == functionTypeB.starProjection() |
isSubtype |
ksType.isAssignableFrom |
unboxedType |
// Not needed. |
© 2010–2021 JetBrains s.r.o. and Kotlin Programming Language contributors
Licensed under the Apache License, Version 2.0.
https://kotlinlang.org/docs/ksp-reference.html