Implement overriders search

This commit is contained in:
Alexey Sedunov
2013-11-26 15:05:36 +04:00
parent 8d2ac7c483
commit 4c98cf1b2c
3 changed files with 134 additions and 0 deletions
@@ -37,6 +37,8 @@ import org.jetbrains.jet.lang.psi.JetPsiFactory
import kotlin.test.assertTrue
import com.intellij.psi.search.SearchScope
import com.intellij.psi.search.PsiSearchScopeUtil
import org.jetbrains.jet.lang.psi.JetClassBody
import org.jetbrains.jet.lang.psi.JetParameterList
fun PsiElement.getParentByTypesAndPredicate<T: PsiElement>(
strict : Boolean = false, vararg parentClasses : Class<T>, predicate: (T) -> Boolean
@@ -155,4 +157,17 @@ fun SearchScope.contains(element: PsiElement): Boolean = PsiSearchScopeUtil.isIn
fun JetClass.isInheritable(): Boolean {
return isTrait() || hasModifier(JetTokens.OPEN_KEYWORD)
}
fun JetDeclaration.isOverridable(): Boolean {
val parent = getParent()
if (!(parent is JetClassBody || parent is JetParameterList)) return false
val klass = parent.getParent()
if (!(klass is JetClass && klass.isInheritable())) return false
if (hasModifier(JetTokens.FINAL_KEYWORD) || hasModifier(JetTokens.PRIVATE_KEYWORD)) return false
return klass.isTrait() ||
hasModifier(JetTokens.ABSTRACT_KEYWORD) || hasModifier(JetTokens.OPEN_KEYWORD) || hasModifier(JetTokens.OVERRIDE_KEYWORD)
}