Lazy light classes: fix visibility modifier in case of inherited protected visibility
This commit is contained in:
+15
-2
@@ -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)
|
||||
|
||||
+1
@@ -10,3 +10,4 @@ class C: Tr {
|
||||
override val v = 1
|
||||
}
|
||||
|
||||
// LAZINESS:NoLaziness
|
||||
+3
-1
@@ -6,4 +6,6 @@ interface Base {
|
||||
|
||||
class C : Base {
|
||||
override fun foo(): Unit {}
|
||||
}
|
||||
}
|
||||
|
||||
// LAZINESS:NoLaziness
|
||||
+2
-1
@@ -6,4 +6,5 @@ interface Base<T> {
|
||||
|
||||
class C : Base<Unit> {
|
||||
override fun foo(t: Unit) {}
|
||||
}
|
||||
}
|
||||
// LAZINESS:NoLaziness
|
||||
Reference in New Issue
Block a user