@@ -34,20 +34,22 @@ import com.google.devtools.ksp.symbol.KSNode
34
34
import com.google.devtools.ksp.symbol.Origin
35
35
import com.intellij.psi.PsiJavaFile
36
36
import com.intellij.util.containers.MultiMap
37
- import org.jetbrains.kotlin.analysis.api.symbols.KtFunctionLikeSymbol
38
- import org.jetbrains.kotlin.analysis.api.symbols.KtJavaFieldSymbol
39
- import org.jetbrains.kotlin.analysis.api.symbols.KtPropertySymbol
40
- import org.jetbrains.kotlin.analysis.api.symbols.KtSymbol
41
- import org.jetbrains.kotlin.analysis.api.symbols.markers.KtSymbolWithMembers
42
- import org.jetbrains.kotlin.analysis.api.types.KtCapturedType
43
- import org.jetbrains.kotlin.analysis.api.types.KtDefinitelyNotNullType
44
- import org.jetbrains.kotlin.analysis.api.types.KtDynamicType
45
- import org.jetbrains.kotlin.analysis.api.types.KtErrorType
46
- import org.jetbrains.kotlin.analysis.api.types.KtFlexibleType
47
- import org.jetbrains.kotlin.analysis.api.types.KtIntersectionType
48
- import org.jetbrains.kotlin.analysis.api.types.KtNonErrorClassType
49
- import org.jetbrains.kotlin.analysis.api.types.KtType
50
- import org.jetbrains.kotlin.analysis.api.types.KtTypeParameterType
37
+ import org.jetbrains.kotlin.analysis.api.KaExperimentalApi
38
+ import org.jetbrains.kotlin.analysis.api.symbols.KaFunctionSymbol
39
+ import org.jetbrains.kotlin.analysis.api.symbols.KaJavaFieldSymbol
40
+ import org.jetbrains.kotlin.analysis.api.symbols.KaPropertySymbol
41
+ import org.jetbrains.kotlin.analysis.api.symbols.KaSymbol
42
+ import org.jetbrains.kotlin.analysis.api.symbols.markers.KaDeclarationContainerSymbol
43
+ import org.jetbrains.kotlin.analysis.api.symbols.typeParameters
44
+ import org.jetbrains.kotlin.analysis.api.types.KaCapturedType
45
+ import org.jetbrains.kotlin.analysis.api.types.KaClassType
46
+ import org.jetbrains.kotlin.analysis.api.types.KaDefinitelyNotNullType
47
+ import org.jetbrains.kotlin.analysis.api.types.KaDynamicType
48
+ import org.jetbrains.kotlin.analysis.api.types.KaErrorType
49
+ import org.jetbrains.kotlin.analysis.api.types.KaFlexibleType
50
+ import org.jetbrains.kotlin.analysis.api.types.KaIntersectionType
51
+ import org.jetbrains.kotlin.analysis.api.types.KaType
52
+ import org.jetbrains.kotlin.analysis.api.types.KaTypeParameterType
51
53
import org.jetbrains.kotlin.incremental.IncrementalCompilationContext
52
54
import org.jetbrains.kotlin.incremental.LookupStorage
53
55
import org.jetbrains.kotlin.incremental.LookupSymbol
@@ -104,47 +106,48 @@ class IncrementalContextAA(
104
106
return map
105
107
}
106
108
107
- private fun recordWithArgs (type : KtType , file : PsiJavaFile ) {
109
+ private fun recordWithArgs (type : KaType , file : PsiJavaFile ) {
108
110
type.typeArguments().forEach {
109
111
it.type?.let { recordWithArgs(it, file) }
110
112
}
111
113
when (type) {
112
- is KtNonErrorClassType -> {
114
+ is KaClassType -> {
113
115
val fqn = type.classId.asFqNameString()
114
116
recordLookup(file, fqn)
115
117
}
116
- is KtFlexibleType -> {
118
+ is KaFlexibleType -> {
117
119
recordWithArgs(type.lowerBound, file)
118
120
recordWithArgs(type.upperBound, file)
119
121
}
120
- is KtIntersectionType -> {
122
+ is KaIntersectionType -> {
121
123
type.conjuncts.forEach {
122
124
recordWithArgs(it, file)
123
125
}
124
126
}
125
- is KtCapturedType -> {
127
+ is KaCapturedType -> {
126
128
type.projection.type?.let {
127
129
recordWithArgs(it, file)
128
130
}
129
131
}
130
- is KtDefinitelyNotNullType -> {
132
+ is KaDefinitelyNotNullType -> {
131
133
recordWithArgs(type.original, file)
132
134
}
133
- is KtErrorType , is KtDynamicType , is KtTypeParameterType -> {}
135
+ is KaErrorType , is KaDynamicType , is KaTypeParameterType -> {}
134
136
}
135
137
}
136
138
137
- fun recordLookup (type : KtType , context : KSNode ? ) {
139
+ fun recordLookup (type : KaType , context : KSNode ? ) {
138
140
val file = (context?.containingFile as ? KSFileJavaImpl )?.psi ? : return
139
141
140
142
recordWithArgs(type, file)
141
143
}
142
144
143
- private fun recordLookupForDeclaration (symbol : KtSymbol , file : PsiJavaFile ) {
145
+ @OptIn(KaExperimentalApi ::class )
146
+ private fun recordLookupForDeclaration (symbol : KaSymbol , file : PsiJavaFile ) {
144
147
when (symbol) {
145
- is KtJavaFieldSymbol -> recordWithArgs(symbol.returnType, file)
146
- is KtPropertySymbol -> recordWithArgs(symbol.returnType, file)
147
- is KtFunctionLikeSymbol -> {
148
+ is KaJavaFieldSymbol -> recordWithArgs(symbol.returnType, file)
149
+ is KaPropertySymbol -> recordWithArgs(symbol.returnType, file)
150
+ is KaFunctionSymbol -> {
148
151
recordWithArgs(symbol.returnType, file)
149
152
symbol.valueParameters.forEach { recordWithArgs(it.returnType, file) }
150
153
symbol.typeParameters.forEach {
@@ -168,15 +171,15 @@ class IncrementalContextAA(
168
171
recordLookupForDeclaration(symbol, file)
169
172
}
170
173
171
- internal fun recordLookupForGetAll (supers : List <KtType >, predicate : (KtSymbol ) -> Boolean ) {
172
- val visited: MutableSet <KtType > = mutableSetOf ()
174
+ internal fun recordLookupForGetAll (supers : List <KaType >, predicate : (KaSymbol ) -> Boolean ) {
175
+ val visited: MutableSet <KaType > = mutableSetOf ()
173
176
analyze {
174
177
supers.forEach {
175
178
recordLookupWithSupertypes(it, visited) { type, file ->
176
- if (type is KtNonErrorClassType ) {
177
- (type.classSymbol as ? KtSymbolWithMembers )?.let {
178
- val declared = it.getDeclaredMemberScope().getAllSymbols() +
179
- it.getStaticDeclaredMemberScope().getAllSymbols()
179
+ if (type is KaClassType ) {
180
+ (type.symbol as ? KaDeclarationContainerSymbol )?.let {
181
+ val declared = it.declaredMemberScope.declarations +
182
+ it.staticDeclaredMemberScope.declarations
180
183
declared.forEach {
181
184
if (predicate(it))
182
185
recordLookupForDeclaration(it, file)
@@ -188,28 +191,29 @@ class IncrementalContextAA(
188
191
}
189
192
}
190
193
191
- private val KtSymbol .psiJavaFile: PsiJavaFile ?
194
+ private val KaSymbol .psiJavaFile: PsiJavaFile ?
192
195
get() = psi?.containingFile as ? PsiJavaFile
193
196
194
- private val KtType .psiJavaFiles: List <PsiJavaFile >
197
+ private val KaType .psiJavaFiles: List <PsiJavaFile >
195
198
get() {
196
199
return when (this ) {
197
- is KtNonErrorClassType -> symbol.psiJavaFile?.let { listOf (it) } ? : emptyList()
198
- is KtFlexibleType -> lowerBound.psiJavaFiles + upperBound.psiJavaFiles
199
- is KtIntersectionType -> conjuncts.flatMap { it.psiJavaFiles }
200
- is KtCapturedType -> projection.type?.psiJavaFiles ? : emptyList()
201
- is KtDefinitelyNotNullType -> original.psiJavaFiles
202
- is KtErrorType , is KtDynamicType , is KtTypeParameterType -> emptyList()
200
+ is KaClassType -> symbol.psiJavaFile?.let { listOf (it) } ? : emptyList()
201
+ is KaFlexibleType -> lowerBound.psiJavaFiles + upperBound.psiJavaFiles
202
+ is KaIntersectionType -> conjuncts.flatMap { it.psiJavaFiles }
203
+ is KaCapturedType -> projection.type?.psiJavaFiles ? : emptyList()
204
+ is KaDefinitelyNotNullType -> original.psiJavaFiles
205
+ is KaErrorType , is KaDynamicType , is KaTypeParameterType -> emptyList()
206
+ else -> TODO ()
203
207
}
204
208
}
205
209
206
- fun recordLookupWithSupertypes (ktType : KtType , visited : MutableSet <KtType >, extra : (KtType , PsiJavaFile ) -> Unit ) {
210
+ fun recordLookupWithSupertypes (ktType : KaType , visited : MutableSet <KaType >, extra : (KaType , PsiJavaFile ) -> Unit ) {
207
211
analyze {
208
- fun record (type : KtType ) {
212
+ fun record (type : KaType ) {
209
213
if (type in visited)
210
214
return
211
215
visited.add(type)
212
- for (superType in type.getDirectSuperTypes( )) {
216
+ for (superType in type.directSupertypes( false )) {
213
217
for (file in type.psiJavaFiles) {
214
218
recordWithArgs(superType, file)
215
219
}
@@ -224,23 +228,23 @@ class IncrementalContextAA(
224
228
}
225
229
}
226
230
227
- internal fun recordLookup (ktType : KtType , context : KSNode ? ) =
231
+ internal fun recordLookup (ktType : KaType , context : KSNode ? ) =
228
232
ResolverAAImpl .instance.incrementalContext.recordLookup(ktType, context)
229
233
230
- internal fun recordLookupWithSupertypes (ktType : KtType , extra : (KtType , PsiJavaFile ) -> Unit = { _, _ -> }) =
234
+ internal fun recordLookupWithSupertypes (ktType : KaType , extra : (KaType , PsiJavaFile ) -> Unit = { _, _ -> }) =
231
235
ResolverAAImpl .instance.incrementalContext.recordLookupWithSupertypes(ktType, mutableSetOf (), extra)
232
236
233
237
internal fun recordLookupForPropertyOrMethod (declaration : KSDeclaration ) =
234
238
ResolverAAImpl .instance.incrementalContext.recordLookupForPropertyOrMethod(declaration)
235
239
236
- internal fun recordLookupForGetAllProperties (supers : List <KtType >) =
240
+ internal fun recordLookupForGetAllProperties (supers : List <KaType >) =
237
241
ResolverAAImpl .instance.incrementalContext.recordLookupForGetAll(supers) {
238
- it is KtPropertySymbol || it is KtJavaFieldSymbol
242
+ it is KaPropertySymbol || it is KaJavaFieldSymbol
239
243
}
240
244
241
- internal fun recordLookupForGetAllFunctions (supers : List <KtType >) =
245
+ internal fun recordLookupForGetAllFunctions (supers : List <KaType >) =
242
246
ResolverAAImpl .instance.incrementalContext.recordLookupForGetAll(supers) {
243
- it is KtFunctionLikeSymbol
247
+ it is KaFunctionSymbol
244
248
}
245
249
246
250
internal fun recordGetSealedSubclasses (classDeclaration : KSClassDeclaration ) {
0 commit comments