Skip to content

Commit 6fa100e

Browse files
ting-yuanKSP Auto Pick
authored andcommitted
Protect unsafe casts where PsiRecordComponent can appear
(cherry picked from commit 7dd9f97)
1 parent c808b66 commit 6fa100e

File tree

4 files changed

+12
-4
lines changed

4 files changed

+12
-4
lines changed

kotlin-analysis-api/src/main/kotlin/com/google/devtools/ksp/impl/ResolverAAImpl.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -412,7 +412,8 @@ class ResolverAAImpl(
412412
override fun getJvmCheckedException(function: KSFunctionDeclaration): Sequence<KSType> {
413413
return when (function.origin) {
414414
Origin.JAVA -> {
415-
val psi = (function as KSFunctionDeclarationImpl).ktFunctionSymbol.psi as PsiMethod
415+
val psi = ((function as KSFunctionDeclarationImpl).ktFunctionSymbol.psi as? PsiMethod)
416+
?: return emptySequence()
416417
psi.throwsList.referencedTypes.asSequence().mapNotNull {
417418
analyze {
418419
it.asKaType(psi)?.let { KSTypeImpl.getCached(it) }

kotlin-analysis-api/src/main/kotlin/com/google/devtools/ksp/impl/symbol/java/KSAnnotationJavaImpl.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,8 @@ class KSAnnotationJavaImpl private constructor(private val psi: PsiAnnotation, o
112112
?.let { symbol ->
113113
// ClsClassImpl means psi is decompiled psi.
114114
if (
115-
symbol.origin == KaSymbolOrigin.JAVA_SOURCE && symbol.psi != null && symbol.psi !is ClsClassImpl
115+
symbol.origin == KaSymbolOrigin.JAVA_SOURCE && symbol.psi != null &&
116+
symbol.psi !is ClsClassImpl && symbol.psi is PsiClass
116117
) {
117118
(symbol.psi as PsiClass).allMethods.filterIsInstance<PsiAnnotationMethod>()
118119
.mapNotNull { annoMethod ->

kotlin-analysis-api/src/main/kotlin/com/google/devtools/ksp/impl/symbol/kotlin/KSAnnotationImpl.kt

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,10 @@ class KSAnnotationImpl private constructor(
8181
override val defaultArguments: List<KSValueArgument> by lazy {
8282
analyze {
8383
annotationApplication.classId?.toKtClassSymbol()?.let { symbol ->
84-
if (symbol.origin == KaSymbolOrigin.JAVA_SOURCE && symbol.psi != null && symbol.psi !is ClsClassImpl) {
84+
if (
85+
symbol.origin == KaSymbolOrigin.JAVA_SOURCE && symbol.psi != null &&
86+
symbol.psi !is ClsClassImpl && symbol.psi is PsiClass
87+
) {
8588
(symbol.psi as PsiClass).allMethods.filterIsInstance<PsiAnnotationMethod>()
8689
.mapNotNull { annoMethod ->
8790
annoMethod.defaultValue?.let { value ->

kotlin-analysis-api/src/main/kotlin/com/google/devtools/ksp/impl/symbol/kotlin/resolved/KSAnnotationResolvedImpl.kt

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,10 @@ class KSAnnotationResolvedImpl private constructor(
7878
override val defaultArguments: List<KSValueArgument> by lazy {
7979
analyze {
8080
annotationApplication.classId?.toKtClassSymbol()?.let { symbol ->
81-
if (symbol.origin == KaSymbolOrigin.JAVA_SOURCE && symbol.psi != null && symbol.psi !is ClsClassImpl) {
81+
if (
82+
symbol.origin == KaSymbolOrigin.JAVA_SOURCE && symbol.psi != null &&
83+
symbol.psi !is ClsClassImpl && symbol.psi is PsiClass
84+
) {
8285
(symbol.psi as PsiClass).allMethods.filterIsInstance<PsiAnnotationMethod>()
8386
.mapNotNull { annoMethod ->
8487
annoMethod.defaultValue?.let { value ->

0 commit comments

Comments
 (0)