Spec-Zone.ru › Kotlin 1.8

Ссылка на обработку аннотаций 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

Детали

Посмотрите, как функциональность API обработки аннотаций Java может быть реализована с помощью KSP.

AnnotationMirror

Java

Эквивалент KSP

getAnnotationType

ksAnnotation.annotationType

getElementValues

ksAnnotation.arguments

AnnotationValue

Java

Эквивалент KSP

getValue

ksValueArgument.value

Элемент

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

Проверьте, является ли родительское объявление интерфейсом или нет

isVarArgs

ksFunctionDeclaration.parameters.any { it.isVarArg }

Параметризуемый

Java

Эквивалент KSP

getTypeParameters

ksFunctionDeclaration.typeParameters

QualifiedNameable

Java

Эквивалент KSP

getQualifiedName

ksDeclaration.qualifiedName

TypeElement

Java

Эквивалент KSP

getEnclosedElements

ksClassDeclaration.declarations

getEnclosingElement

ksClassDeclaration.parentDeclaration

getInterfaces

// 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 }

getTypeParameters

ksClassDeclaration.typeParameters

TypeParameterElement

Java

Эквивалент KSP

getBounds

ksTypeParameter.bounds

getEnclosingElement

ksTypeParameter.parentDeclaration

getGenericElement

ksTypeParameter.parentDeclaration

VariableElement

Java

Эквивалент KSP

getConstantValue

Подлежит реализации

getEnclosingElement

ksValueParameter.parentDeclaration

getSimpleName

ksValueParameter.simpleName

Тип массива

Java

Эквивалент KSP

getComponentType

ksType.arguments.first()

DeclaredType

Java

Эквивалент KSP

asElement

ksType.declaration

getEnclosingType

ksType.declaration.parentDeclaration

getTypeArguments

ksType.arguments

ТипExecutable

Тип для функции — это просто сигнатура, представленная семейством FunctionN<R, T1, T2, ..., TN>.

Java

Эквивалент KSP

getParameterTypes

ksType.declaration.typeParameters, ksFunctionDeclaration.parameters.map { it.type }

getReceiverType

ksFunctionDeclaration.parentDeclaration.asType(...)

getReturnType

ksType.declaration.typeParameters.last()

getThrownTypes

Не требуется в Kotlin

getTypeVariables

ksFunctionDeclaration.typeParameters

END_OF_DOCUMENT_MARKER

IntersectionType

Java

KSP equivalent

getBounds

ksTypeParameter.bounds

TypeMirror

Java

KSP equivalent

getKind

Сравните с типами в KSBuiltIns для примитивных типов, Unit тип, в противном случае объявленные типы

TypeVariable

Java

KSP equivalent

asElement

ksType.declaration

getLowerBound

Предстоит решить. Необходимо только в том случае, если предоставлено перехватное значение и необходима явная проверка границ.

getUpperBound

ksTypeParameter.bounds

WildcardType

Java

KSP equivalent

getExtendsBound

if (ksTypeArgument.variance == Variance.COVARIANT) ksTypeArgument.type else null

getSuperBound

if (ksTypeArgument.variance == Variance.CONTRAVARIANT) ksTypeArgument.type else null

Элементы

Java

KSP equivalent

getAllAnnotationMirrors

KSDeclarations.annotations

getAllMembers

getAllFunctions, getAllProperties предстоит реализовать

getBinaryName

Предстоит решить, см. Спецификацию Java

getConstantExpression

Существует константное значение, а не выражение

getDocComment

Предстоит реализовать

getElementValuesWithDefaults

Предстоит реализовать

getName

resolver.getKSNameFromString

getPackageElement

Пакет не поддерживается, хотя информацию о пакете можно получить. Операция с пакетом невозможна для KSP

getPackageOf

Пакет не поддерживается

getTypeElement

Resolver.getClassDeclarationByName

hides

Предстоит реализовать

isDeprecated

KsDeclaration.annotations.any { 
    it.annotationType.resolve()!!.declaration.qualifiedName!!.asString() == Deprecated::class.qualifiedName
}

overrides

KSFunctionDeclaration.overrides/KSPropertyDeclaration.overrides (функция-член соответствующего класса)

printElements

KSP имеет базовую реализацию toString() в большинстве классов

Типы

Java

KSP equivalent

asElement

ksType.declaration

asMemberOf

resolver.asMemberOf

boxedClass

Не нужно

capture

Предстоит решить

contains

KSType.isAssignableFrom

directSuperTypes

(ksType.declaration as KSClassDeclaration).superTypes

erasure

ksType.starProjection()

getArrayType

ksBuiltIns.arrayType.replace(...)

getDeclaredType

ksClassDeclaration.asType

getNoType

ksBuiltIns.nothingType/null

getNullType

В зависимости от контекста, KSType.markNullable может быть полезен

getPrimitiveType

Не нужно, проверьте KSBuiltins

getWildcardType

Используйте Variance в местах, где ожидается KSTypeArgument

isAssignable

ksType.isAssignableFrom

isSameType

ksType.equals

isSubsignature

functionTypeA == functionTypeB/functionTypeA == functionTypeB.starProjection()

isSubtype

ksType.isAssignableFrom

unboxedType

Не нужно

Последнее изменение: 10 января 2023 г.
Как KSP моделирует код Kotlin Инкрементальная обработка

© 2010–2023 JetBrains s.r.o. and Kotlin Programming Language contributors
Licensed under the Apache License, Version 2.0.
https://kotlinlang.org/docs/ksp-reference.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API