Lazy light classes: fix visibility modifier in case of inherited protected visibility

This commit is contained in:
Pavel V. Talanov
2017-03-24 16:52:03 +03:00
parent a81bac0b50
commit a2511232ab
4 changed files with 21 additions and 4 deletions
@@ -26,6 +26,7 @@ import org.jetbrains.kotlin.asJava.builder.LightMemberOriginForDeclaration
import org.jetbrains.kotlin.asJava.classes.KtLightClass
import org.jetbrains.kotlin.asJava.classes.lazyPub
import org.jetbrains.kotlin.idea.KotlinLanguage
import org.jetbrains.kotlin.lexer.KtTokens
import org.jetbrains.kotlin.psi.KtDeclaration
import org.jetbrains.kotlin.psi.KtNamedDeclaration
@@ -44,7 +45,17 @@ abstract class KtLightMemberImpl<out D : PsiMember>(
else clsDelegate.modifierList
}
override fun hasModifierProperty(name: String) = (dummyDelegate ?: clsDelegate).hasModifierProperty(name)
override fun hasModifierProperty(name: String): Boolean {
if (dummyDelegate != null) {
if (name in visibilityModifiers) {
if (kotlinOrigin?.hasModifier(KtTokens.OVERRIDE_KEYWORD) ?: false) {
return clsDelegate.hasModifierProperty(name)
}
}
return dummyDelegate.hasModifierProperty(name)
}
return clsDelegate.hasModifierProperty(name)
}
override fun getModifierList(): PsiModifierList? = _modifierList
@@ -79,4 +90,6 @@ abstract class KtLightMemberImpl<out D : PsiMember>(
override fun getDocComment() = (clsDelegate as PsiDocCommentOwner).docComment
override fun isDeprecated() = (clsDelegate as PsiDocCommentOwner).isDeprecated
}
}
private val visibilityModifiers = arrayOf(PsiModifier.PRIVATE, PsiModifier.PACKAGE_LOCAL, PsiModifier.PROTECTED, PsiModifier.PUBLIC)
@@ -10,3 +10,4 @@ class C: Tr {
override val v = 1
}
// LAZINESS:NoLaziness
@@ -6,4 +6,6 @@ interface Base {
class C : Base {
override fun foo(): Unit {}
}
}
// LAZINESS:NoLaziness
@@ -6,4 +6,5 @@ interface Base<T> {
class C : Base<Unit> {
override fun foo(t: Unit) {}
}
}
// LAZINESS:NoLaziness