diff options
author | Jiaxiang Chen <jiaxiang@google.com> | 2024-02-13 12:46:21 -0800 |
---|---|---|
committer | Jiaxiang Chen <roaringacw@gmail.com> | 2024-02-15 13:19:36 -0800 |
commit | b708eb000ba7a168c59d082cf43c6e5f8e790d66 (patch) | |
tree | 5e50e7dd6709e582fed45a14845d26b49d418821 | |
parent | 42df0ecc0aeb1431f17bc41759f2d2f90488972e (diff) | |
download | ksp-b708eb000ba7a168c59d082cf43c6e5f8e790d66.tar.gz |
support default type for asType
2 files changed, 18 insertions, 2 deletions
diff --git a/kotlin-analysis-api/src/main/kotlin/com/google/devtools/ksp/impl/symbol/kotlin/KSClassDeclarationImpl.kt b/kotlin-analysis-api/src/main/kotlin/com/google/devtools/ksp/impl/symbol/kotlin/KSClassDeclarationImpl.kt index ca935e3b..708a94f6 100644 --- a/kotlin-analysis-api/src/main/kotlin/com/google/devtools/ksp/impl/symbol/kotlin/KSClassDeclarationImpl.kt +++ b/kotlin-analysis-api/src/main/kotlin/com/google/devtools/ksp/impl/symbol/kotlin/KSClassDeclarationImpl.kt @@ -29,6 +29,7 @@ import com.google.devtools.ksp.processing.impl.KSTypeReferenceSyntheticImpl import com.google.devtools.ksp.symbol.* import org.jetbrains.kotlin.analysis.api.KtStarTypeProjection import org.jetbrains.kotlin.analysis.api.components.buildClassType +import org.jetbrains.kotlin.analysis.api.components.buildTypeParameterType import org.jetbrains.kotlin.analysis.api.symbols.* import org.jetbrains.kotlin.descriptors.java.JavaVisibilities import org.jetbrains.kotlin.psi.KtClassOrObject @@ -124,9 +125,21 @@ class KSClassDeclarationImpl private constructor(internal val ktClassOrObjectSym } override fun asType(typeArguments: List<KSTypeArgument>): KSType { + if (typeArguments.isNotEmpty() && typeArguments.size != asStarProjectedType().arguments.size) { + return KSErrorType + } return analyze { - analysisSession.buildClassType(ktClassOrObjectSymbol) { - typeArguments.forEach { argument(it.toKtTypeProjection()) } + if (typeArguments.isEmpty()) { + typeParameters.map { buildTypeParameterType((it as KSTypeParameterImpl).ktTypeParameterSymbol) } + .let { typeParameterTypes -> + buildClassType(ktClassOrObjectSymbol) { + typeParameterTypes.forEach { argument(it) } + } + } + } else { + buildClassType(ktClassOrObjectSymbol) { + typeArguments.forEach { argument(it.toKtTypeProjection()) } + } }.let { KSTypeImpl.getCached(it) } } } diff --git a/kotlin-analysis-api/src/main/kotlin/com/google/devtools/ksp/impl/symbol/kotlin/KSTypeImpl.kt b/kotlin-analysis-api/src/main/kotlin/com/google/devtools/ksp/impl/symbol/kotlin/KSTypeImpl.kt index 50788410..3fb5124b 100644 --- a/kotlin-analysis-api/src/main/kotlin/com/google/devtools/ksp/impl/symbol/kotlin/KSTypeImpl.kt +++ b/kotlin-analysis-api/src/main/kotlin/com/google/devtools/ksp/impl/symbol/kotlin/KSTypeImpl.kt @@ -111,6 +111,9 @@ class KSTypeImpl private constructor(internal val type: KtType) : KSType { } override fun replace(arguments: List<KSTypeArgument>): KSType { + if (arguments.isNotEmpty() && arguments.size != type.typeArguments().size) { + return KSErrorType + } return analyze { analysisSession.buildClassType((type as KtNonErrorClassType).classSymbol) { arguments.forEach { arg -> argument(arg.toKtTypeProjection()) } |