[SLC] SymbolLightModifierList: move modifier logics to common part

^KTIJ-23783
This commit is contained in:
Dmitrii Gridin
2022-11-29 17:10:23 +01:00
committed by Space Team
parent cba70d70a7
commit fc8ae0f2e5
3 changed files with 7 additions and 6 deletions
@@ -15,6 +15,4 @@ internal class SymbolLightClassModifierList<T : KtLightElement<KtModifierListOwn
containingDeclaration: T, containingDeclaration: T,
lazyModifiers: Lazy<Set<String>>, lazyModifiers: Lazy<Set<String>>,
annotationsComputer: (PsiModifierList) -> List<PsiAnnotation>, annotationsComputer: (PsiModifierList) -> List<PsiAnnotation>,
) : SymbolLightModifierList<T>(containingDeclaration, lazyModifiers, annotationsComputer) { ) : SymbolLightModifierList<T>(containingDeclaration, lazyModifiers, annotationsComputer)
override fun hasModifierProperty(name: String): Boolean = name in lazyModifiers.value
}
@@ -25,7 +25,7 @@ internal class SymbolLightMemberModifierList<T : KtLightMember<*>>(
// Pretend this method behaves like a `default` method // Pretend this method behaves like a `default` method
name == PsiModifier.DEFAULT && isImplementationInInterface() -> true name == PsiModifier.DEFAULT && isImplementationInInterface() -> true
// TODO: FINAL && isPossiblyAffectedByAllOpen // TODO: FINAL && isPossiblyAffectedByAllOpen
else -> name in lazyModifiers.value else -> super.hasModifierProperty(name)
} }
private fun isImplementationInInterface(): Boolean { private fun isImplementationInInterface(): Boolean {
@@ -21,12 +21,11 @@ import org.jetbrains.kotlin.psi.KtModifierListOwner
internal abstract class SymbolLightModifierList<out T : KtLightElement<KtModifierListOwner, PsiModifierListOwner>>( internal abstract class SymbolLightModifierList<out T : KtLightElement<KtModifierListOwner, PsiModifierListOwner>>(
protected val owner: T, protected val owner: T,
protected val lazyModifiers: Lazy<Set<String>>, private val lazyModifiers: Lazy<Set<String>>,
annotationsComputer: (PsiModifierList) -> List<PsiAnnotation>, annotationsComputer: (PsiModifierList) -> List<PsiAnnotation>,
) : KtLightElementBase(owner), PsiModifierList, KtLightElement<KtModifierList, PsiModifierListOwner> { ) : KtLightElementBase(owner), PsiModifierList, KtLightElement<KtModifierList, PsiModifierListOwner> {
override val kotlinOrigin: KtModifierList? get() = owner.kotlinOrigin?.modifierList override val kotlinOrigin: KtModifierList? get() = owner.kotlinOrigin?.modifierList
override fun getParent() = owner override fun getParent() = owner
override fun hasExplicitModifier(name: String) = hasModifierProperty(name)
override fun setModifierProperty(name: String, value: Boolean) = cannotModify() override fun setModifierProperty(name: String, value: Boolean) = cannotModify()
override fun checkSetModifierProperty(name: String, value: Boolean) = throw IncorrectOperationException() override fun checkSetModifierProperty(name: String, value: Boolean) = throw IncorrectOperationException()
override fun addAnnotation(qualifiedName: String): PsiAnnotation = cannotModify() override fun addAnnotation(qualifiedName: String): PsiAnnotation = cannotModify()
@@ -36,6 +35,7 @@ internal abstract class SymbolLightModifierList<out T : KtLightElement<KtModifie
override fun toString() = "Light modifier list of $owner" override fun toString() = "Light modifier list of $owner"
override val givenAnnotations: List<KtLightAbstractAnnotation> get() = invalidAccess() override val givenAnnotations: List<KtLightAbstractAnnotation> get() = invalidAccess()
private val lazyAnnotations: Lazy<List<PsiAnnotation>> = lazyPub { private val lazyAnnotations: Lazy<List<PsiAnnotation>> = lazyPub {
annotationsComputer(this) annotationsComputer(this)
} }
@@ -46,4 +46,7 @@ internal abstract class SymbolLightModifierList<out T : KtLightElement<KtModifie
override fun equals(other: Any?): Boolean = this === other override fun equals(other: Any?): Boolean = this === other
override fun hashCode(): Int = kotlinOrigin.hashCode() override fun hashCode(): Int = kotlinOrigin.hashCode()
override fun hasExplicitModifier(name: String) = hasModifierProperty(name)
override fun hasModifierProperty(name: String): Boolean = name in lazyModifiers.value
} }