FIR LC: backward compatible visibility of enum entry ctor

This commit is contained in:
Jinseong Jeon
2021-12-10 11:09:39 -08:00
committed by Ilya Kirillov
parent 9375f41936
commit 9a669092e3
3 changed files with 11 additions and 4 deletions
@@ -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
@@ -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
@@ -43,7 +43,14 @@ internal class FirLightConstructorForSymbol(
override fun isDeprecated(): Boolean = _isDeprecated
private val _modifiers: Set<String> 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 {