From 9a669092e3cc82e76b5e20536c60350968d1b3e7 Mon Sep 17 00:00:00 2001 From: Jinseong Jeon Date: Fri, 10 Dec 2021 11:09:39 -0800 Subject: [PATCH] FIR LC: backward compatible visibility of enum entry ctor --- .../classes/symbol/classes/FirLightClassForEnumEntry.kt | 5 +++-- .../classes/symbol/fields/FirLightFieldEnumEntry.kt | 1 - .../symbol/methods/FirLightConstructorForSymbol.kt | 9 ++++++++- 3 files changed, 11 insertions(+), 4 deletions(-) diff --git a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/classes/FirLightClassForEnumEntry.kt b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/classes/FirLightClassForEnumEntry.kt index f11188c6ef5..59d13386d0c 100644 --- a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/classes/FirLightClassForEnumEntry.kt +++ b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/classes/FirLightClassForEnumEntry.kt @@ -3,7 +3,7 @@ * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. */ -package org.jetbrains.kotlin.asJava.classes +package org.jetbrains.kotlin.light.classes.symbol import com.intellij.psi.* import com.intellij.psi.impl.PsiClassImplUtil @@ -11,7 +11,8 @@ import org.jetbrains.kotlin.asJava.elements.KtLightMethod import org.jetbrains.kotlin.analysis.api.isValid import org.jetbrains.kotlin.analysis.api.symbols.KtEnumEntrySymbol import org.jetbrains.kotlin.analysis.api.types.KtTypeMappingMode -import org.jetbrains.kotlin.light.classes.symbol.* +import org.jetbrains.kotlin.asJava.classes.KotlinSuperTypeListBuilder +import org.jetbrains.kotlin.asJava.classes.lazyPub import org.jetbrains.kotlin.light.classes.symbol.classes.createConstructors import org.jetbrains.kotlin.light.classes.symbol.classes.createMethods import org.jetbrains.kotlin.load.java.structure.LightClassOriginKind diff --git a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/fields/FirLightFieldEnumEntry.kt b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/fields/FirLightFieldEnumEntry.kt index 6af363ff680..0edd90e6fab 100644 --- a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/fields/FirLightFieldEnumEntry.kt +++ b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/fields/FirLightFieldEnumEntry.kt @@ -7,7 +7,6 @@ package org.jetbrains.kotlin.light.classes.symbol import com.intellij.psi.* import org.jetbrains.kotlin.asJava.builder.LightMemberOrigin -import org.jetbrains.kotlin.asJava.classes.FirLightClassForEnumEntry import org.jetbrains.kotlin.asJava.classes.cannotModify import org.jetbrains.kotlin.asJava.classes.lazyPub import org.jetbrains.kotlin.analysis.api.isValid diff --git a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/methods/FirLightConstructorForSymbol.kt b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/methods/FirLightConstructorForSymbol.kt index f6a8b6d68e0..35f82508512 100644 --- a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/methods/FirLightConstructorForSymbol.kt +++ b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/methods/FirLightConstructorForSymbol.kt @@ -43,7 +43,14 @@ internal class FirLightConstructorForSymbol( override fun isDeprecated(): Boolean = _isDeprecated private val _modifiers: Set by lazyPub { - setOf(constructorSymbol.toPsiVisibilityForMember(isTopLevel = false)) + // FIR treats an enum entry as an anonymous object w/ its own ctor (not default one). + // On the other hand, FE 1.0 doesn't add anything; then ULC adds default ctor w/ package local visibility. + // Technically, an enum entry should not be instantiated anywhere else, and thus FIR's modeling makes sense. + // But, to be backward compatible, we manually force the visibility of enum entry ctor to be package private. + if (containingClass is FirLightClassForEnumEntry) + setOf(PsiModifier.PACKAGE_LOCAL) + else + setOf(constructorSymbol.toPsiVisibilityForMember(isTopLevel = false)) } private val _modifierList: PsiModifierList by lazyPub {