Справочник по переходу с обработки аннотаций Java на KSP
Элементы программы
Java
Ближайший аналог в KSP
Примечания
AnnotationMirror
KSAnnotation
AnnotationValue
KSValueArguments
Element
KSDeclaration/KSDeclarationContainer
ExecutableElement
KSFunctionDeclaration
PackageElement
KSFile
KSP не представляет пакеты в виде элементов программы
Parameterizable
KSDeclaration
QualifiedNameable
KSDeclaration
TypeElement
KSClassDeclaration
TypeParameterElement
KSTypeParameter
VariableElement
KSValueParameter/KSPropertyDeclaration
Типы
KSP требует явного разрешения типов, поэтому некоторые функции Java можно реализовать только с помощью KSType и соответствующих элементов до разрешения типов.
Java
Ближайший аналог в KSP
Примечания
ArrayType
KSBuiltIns.arrayType
DeclaredType
KSType/KSClassifierReference
ErrorType
KSType.isError
ExecutableType
KSType/KSCallableReference
IntersectionType
KSType/KSTypeParameter
NoType
KSType.isError
В KSP отсутствует
NullType
В KSP отсутствует
PrimitiveType
KSBuiltIns
Не совсем совпадает с примитивным типом в Java
ReferenceType
KSTypeReference
TypeMirror
KSType
TypeVariable
KSTypeParameter
UnionType
Не применимо
В Kotlin в каждом блоке catch может быть только один тип. UnionType также недоступен даже процессорам аннотаций Java
WildcardType
KSType/KSTypeArgument
Разное
Java
Ближайший аналог в KSP
Примечания
Name
KSName
ElementKind
ClassKind/FunctionKind
Modifier
Modifier
NestingKind
ClassKind/FunctionKind
AnnotationValueVisitor
ElementVisitor
KSVisitor
AnnotatedConstruct
KSAnnotated
TypeVisitor
TypeKind
KSBuiltIns
Некоторые можно найти во встроенных элементах; в противном случае см. KSClassDeclaration для DeclaredType
ElementFilter
Collection.filterIsInstance
ElementKindVisitor
KSVisitor
ElementScanner
KSTopDownVisitor
SimpleAnnotationValueVisitor
В KSP не требуется
SimpleElementVisitor
KSVisitor
SimpleTypeVisitor
TypeKindVisitor
Types
Resolver/utils
Некоторые из utils также интегрированы в интерфейсы символов
Elements
Resolver/utils
Подробности
Узнайте, как реализовать с помощью KSP функциональность API обработки аннотаций Java.
AnnotationMirror
Java
Аналог в KSP
getAnnotationType
ksAnnotation.annotationType
getElementValues
ksAnnotation.arguments
AnnotationValue
Java
Аналог в KSP
getValue
ksValueArgument.value
Element
Java
Аналог в KSP
asType
ksClassDeclaration.asType(...) доступен только для KSClassDeclaration. Необходимо указать аргументы типа.
getAnnotation
Предстоит реализовать
getAnnotationMirrors
ksDeclaration.annotations
getEnclosedElements
ksDeclarationContainer.declarations
getEnclosingElements
ksDeclaration.parentDeclaration
getKind
Проверьте тип и выполните приведение согласно ClassKind или FunctionKind
getModifiers
ksDeclaration.modifiers
getSimpleName
ksDeclaration.simpleName
ExecutableElement
Java
Аналог в KSP
getDefaultValue
Предстоит реализовать
getParameters
ksFunctionDeclaration.parameters
getReceiverType
ksFunctionDeclaration.parentDeclaration
getReturnType
ksFunctionDeclaration.returnType
getSimpleName
ksFunctionDeclaration.simpleName
getThrownTypes
В Kotlin не требуется
getTypeParameters
ksFunctionDeclaration.typeParameters
isDefault
Проверьте, является ли родительское объявление интерфейсом
// Should be able to do without resolution
ksClassDeclaration.superTypes
.map { it.resolve() }
.filter { (it?.declaration as? KSClassDeclaration)?.classKind == ClassKind.INTERFACE }
getNestingKind
Проверьте модификатор KSClassDeclaration.parentDeclaration и inner
getQualifiedName
ksClassDeclaration.qualifiedName
getSimpleName
ksClassDeclaration.simpleName
getSuperclass
// Should be able to do without resolution
ksClassDeclaration.superTypes
.map { it.resolve() }
.filter { (it?.declaration as? KSClassDeclaration)?.classKind == ClassKind.CLASS }