5
5
6
6
package org.jetbrains.kotlin.analysis.low.level.api.fir.stubBased.deserialization
7
7
8
- import org.jetbrains.kotlin.KtFakeSourceElement
9
- import org.jetbrains.kotlin.KtFakeSourceElementKind
10
- import org.jetbrains.kotlin.KtRealPsiSourceElement
8
+ import org.jetbrains.kotlin.*
11
9
import org.jetbrains.kotlin.descriptors.EffectiveVisibility
12
10
import org.jetbrains.kotlin.descriptors.Modality
13
11
import org.jetbrains.kotlin.descriptors.Visibilities
12
+ import org.jetbrains.kotlin.descriptors.Visibility
14
13
import org.jetbrains.kotlin.descriptors.annotations.AnnotationUseSiteTarget
15
- import org.jetbrains.kotlin.fakeElement
16
14
import org.jetbrains.kotlin.fir.FirModuleData
17
15
import org.jetbrains.kotlin.fir.FirSession
18
16
import org.jetbrains.kotlin.fir.containingClassForStaticMemberAttr
19
17
import org.jetbrains.kotlin.fir.copyWithNewSourceKind
20
18
import org.jetbrains.kotlin.fir.declarations.*
21
19
import org.jetbrains.kotlin.fir.declarations.builder.*
22
- import org.jetbrains.kotlin.fir.declarations.impl.FirDefaultPropertyBackingField
23
- import org.jetbrains.kotlin.fir.declarations.impl.FirDefaultPropertyGetter
24
- import org.jetbrains.kotlin.fir.declarations.impl.FirDefaultPropertySetter
25
- import org.jetbrains.kotlin.fir.declarations.impl.FirResolvedDeclarationStatusImpl
20
+ import org.jetbrains.kotlin.fir.declarations.impl.*
26
21
import org.jetbrains.kotlin.fir.declarations.utils.sourceElement
22
+ import org.jetbrains.kotlin.fir.deserialization.toLazyEffectiveVisibility
27
23
import org.jetbrains.kotlin.fir.expressions.builder.buildExpressionStub
28
24
import org.jetbrains.kotlin.fir.resolve.defaultType
29
25
import org.jetbrains.kotlin.fir.resolve.transformers.setLazyPublishedVisibility
30
26
import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol
31
27
import org.jetbrains.kotlin.fir.symbols.impl.*
32
- import org.jetbrains.kotlin.fir.toEffectiveVisibility
33
28
import org.jetbrains.kotlin.fir.types.*
34
29
import org.jetbrains.kotlin.fir.types.builder.buildResolvedTypeRef
35
30
import org.jetbrains.kotlin.fir.types.impl.ConeClassLikeTypeImpl
@@ -41,7 +36,6 @@ import org.jetbrains.kotlin.name.*
41
36
import org.jetbrains.kotlin.psi.*
42
37
import org.jetbrains.kotlin.psi.psiUtil.hasExpectModifier
43
38
import org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedContainerSource
44
- import org.jetbrains.kotlin.toKtPsiSourceElement
45
39
import org.jetbrains.kotlin.utils.exceptions.errorWithAttachment
46
40
import org.jetbrains.kotlin.utils.exceptions.withPsiEntry
47
41
@@ -196,10 +190,10 @@ internal class StubBasedFirMemberDeserializer(
196
190
origin = initialOrigin
197
191
this .name = name
198
192
val visibility = typeAlias.visibility
199
- status = FirResolvedDeclarationStatusImpl (
193
+ status = FirResolvedDeclarationStatusWithLazyEffectiveVisibility (
200
194
visibility,
201
195
Modality .FINAL ,
202
- visibility.toEffectiveVisibility (owner = null )
196
+ visibility.toLazyEffectiveVisibility (owner = null )
203
197
).apply {
204
198
isExpect = typeAlias.hasModifier(KtTokens .EXPECT_KEYWORD )
205
199
isActual = false
@@ -227,15 +221,18 @@ internal class StubBasedFirMemberDeserializer(
227
221
): FirPropertyAccessor {
228
222
val visibility = getter.visibility
229
223
val accessorModality = getter.modality
230
- val effectiveVisibility = visibility.toEffectiveVisibility(classSymbol)
231
224
return buildPropertyAccessor {
232
225
source = KtRealPsiSourceElement (getter)
233
226
moduleData = c.moduleData
234
227
origin = initialOrigin
235
228
this .returnTypeRef = returnTypeRef
236
229
resolvePhase = FirResolvePhase .ANALYZED_DEPENDENCIES
237
230
isGetter = true
238
- status = FirResolvedDeclarationStatusImpl (visibility, accessorModality, effectiveVisibility).apply {
231
+ status = FirResolvedDeclarationStatusWithLazyEffectiveVisibility (
232
+ visibility,
233
+ accessorModality,
234
+ visibility.toLazyEffectiveVisibility(classSymbol)
235
+ ).apply {
239
236
isInline = getter.hasModifier(KtTokens .INLINE_KEYWORD )
240
237
isExternal = getter.hasModifier(KtTokens .EXTERNAL_KEYWORD )
241
238
}
@@ -260,15 +257,18 @@ internal class StubBasedFirMemberDeserializer(
260
257
): FirPropertyAccessor {
261
258
val visibility = setter.visibility
262
259
val accessorModality = setter.modality
263
- val effectiveVisibility = visibility.toEffectiveVisibility(classSymbol)
264
260
return buildPropertyAccessor {
265
261
source = KtRealPsiSourceElement (setter)
266
262
moduleData = c.moduleData
267
263
origin = initialOrigin
268
264
this .returnTypeRef = FirImplicitUnitTypeRef (source)
269
265
resolvePhase = FirResolvePhase .ANALYZED_DEPENDENCIES
270
266
isGetter = false
271
- status = FirResolvedDeclarationStatusImpl (visibility, accessorModality, effectiveVisibility).apply {
267
+ status = FirResolvedDeclarationStatusWithLazyEffectiveVisibility (
268
+ visibility,
269
+ accessorModality,
270
+ visibility.toLazyEffectiveVisibility(classSymbol)
271
+ ).apply {
272
272
isInline = setter.hasModifier(KtTokens .INLINE_KEYWORD )
273
273
isExternal = setter.hasModifier(KtTokens .EXTERNAL_KEYWORD )
274
274
}
@@ -333,10 +333,10 @@ internal class StubBasedFirMemberDeserializer(
333
333
dispatchReceiverType = c.dispatchReceiver
334
334
isLocal = false
335
335
val visibility = property.visibility
336
- val resolvedStatus = FirResolvedDeclarationStatusImpl (
336
+ val resolvedStatus = FirResolvedDeclarationStatusWithLazyEffectiveVisibility (
337
337
visibility,
338
338
propertyModality,
339
- visibility.toEffectiveVisibility (classSymbol)
339
+ visibility.toLazyEffectiveVisibility (classSymbol)
340
340
).apply {
341
341
isExpect = property.hasExpectModifier()
342
342
isActual = false
@@ -378,9 +378,7 @@ internal class StubBasedFirMemberDeserializer(
378
378
origin = origin,
379
379
propertyTypeRef = returnTypeRef.copyWithNewSourceKind(KtFakeSourceElementKind .DefaultAccessor ),
380
380
propertySymbol = symbol,
381
- visibility = resolvedStatus.visibility,
382
- effectiveVisibility = resolvedStatus.effectiveVisibility,
383
- modality = resolvedStatus.modality,
381
+ status = resolvedStatus,
384
382
resolvePhase = FirResolvePhase .ANALYZED_DEPENDENCIES ,
385
383
)
386
384
@@ -393,9 +391,7 @@ internal class StubBasedFirMemberDeserializer(
393
391
origin = origin,
394
392
propertyTypeRef = returnTypeRef.copyWithNewSourceKind(KtFakeSourceElementKind .DefaultAccessor ),
395
393
propertySymbol = symbol,
396
- visibility = resolvedStatus.visibility,
397
- effectiveVisibility = resolvedStatus.effectiveVisibility,
398
- modality = resolvedStatus.modality,
394
+ status = resolvedStatus,
399
395
resolvePhase = FirResolvePhase .ANALYZED_DEPENDENCIES ,
400
396
)
401
397
else -> null
@@ -460,10 +456,10 @@ internal class StubBasedFirMemberDeserializer(
460
456
461
457
name = callableName
462
458
val visibility = function.visibility
463
- status = FirResolvedDeclarationStatusImpl (
459
+ status = FirResolvedDeclarationStatusWithLazyEffectiveVisibility (
464
460
visibility,
465
461
function.modality,
466
- visibility.toEffectiveVisibility (classSymbol)
462
+ visibility.toLazyEffectiveVisibility (classSymbol)
467
463
).apply {
468
464
isExpect = function.hasExpectModifier()
469
465
isActual = false
@@ -534,10 +530,10 @@ internal class StubBasedFirMemberDeserializer(
534
530
returnTypeRef = delegatedSelfType
535
531
val visibility = constructor .visibility
536
532
val isInner = classBuilder.status.isInner
537
- status = FirResolvedDeclarationStatusImpl (
533
+ status = FirResolvedDeclarationStatusWithLazyEffectiveVisibility (
538
534
visibility,
539
535
Modality .FINAL ,
540
- visibility.toEffectiveVisibility (classBuilder.symbol)
536
+ visibility.toLazyEffectiveVisibility (classBuilder.symbol)
541
537
).apply {
542
538
isExpect = constructor .hasExpectModifier() || classOrObject.hasExpectModifier()
543
539
isActual = false
@@ -643,4 +639,8 @@ internal class StubBasedFirMemberDeserializer(
643
639
}
644
640
return enumEntry
645
641
}
642
+
643
+ private fun Visibility.toLazyEffectiveVisibility (owner : FirClassLikeSymbol <* >? ): Lazy <EffectiveVisibility > {
644
+ return this .toLazyEffectiveVisibility(owner, c.session, forClass = false )
645
+ }
646
646
}
0 commit comments