aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJiaxiang Chen <jiaxiang@google.com>2024-02-13 12:46:21 -0800
committerJiaxiang Chen <roaringacw@gmail.com>2024-02-15 13:19:36 -0800
commitb708eb000ba7a168c59d082cf43c6e5f8e790d66 (patch)
tree5e50e7dd6709e582fed45a14845d26b49d418821
parent42df0ecc0aeb1431f17bc41759f2d2f90488972e (diff)
downloadksp-b708eb000ba7a168c59d082cf43c6e5f8e790d66.tar.gz
support default type for asType
-rw-r--r--kotlin-analysis-api/src/main/kotlin/com/google/devtools/ksp/impl/symbol/kotlin/KSClassDeclarationImpl.kt17
-rw-r--r--kotlin-analysis-api/src/main/kotlin/com/google/devtools/ksp/impl/symbol/kotlin/KSTypeImpl.kt3
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()) }