Spec-Zone.ru › Kotlin 1.6

Справочник по обработке аннотаций 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

END_OF_DOCUMENT_MARKER

Детали

Посмотрите, как функциональность 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

Именованный по квалифицированному имени

Java

Эквивалент KSP

getQualifiedName

ksDeclaration.qualifiedName

Элемент типа

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

Элемент параметра типа

Java

Эквивалент KSP

getBounds

ksTypeParameter.bounds

getEnclosingElement

ksTypeParameter.parentDeclaration

getGenericElement

ksTypeParameter.parentDeclaration

Элемент переменной

Java

Эквивалент KSP

getConstantValue

Реализуется в дальнейшем

getEnclosingElement

ksValueParameter.parentDeclaration

getSimpleName

ksValueParameter.simpleName

Тип массива

Java

Эквивалент KSP

getComponentType

ksType.arguments.first()

Объявленный тип

Java

Эквивалент KSP

asElement

ksType.declaration

getEnclosingType

ksType.declaration.parentDeclaration

getTypeArguments

ksType.arguments

END_OF_DOCUMENT_MARKER

ТипExecutable

A KSType for a function is just a signature represented by the FunctionN<R, T1, T2, ..., TN> family.

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

Пересечение типов

Java

Эквивалент KSP

getBounds

ksTypeParameter.bounds

Тип зеркало

Java

Эквивалент KSP

getKind

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

Переменная типа

Java

Эквивалент KSP

asElement

ksType.declaration

getLowerBound

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

getUpperBound

ksTypeParameter.bounds

Тип с подстановкой

Java

Эквивалент KSP

getExtendsBound

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

getSuperBound

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

Элементы

Java

Эквивалент KSP

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

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

Не нужно

Последнее изменение: 07 апреля 2022 г.
Как KSP моделирует Kotlin-код Инкрементная обработка

© 2010–2022 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