Make collectSlowLineMarker handle parents to deal with changes correctly

So #KT-20825 Fixed
So #KT-21113 Fixed
Related to IDEA-141330 fix
This commit is contained in:
Mikhail Glukhikh
2018-06-09 15:22:48 +03:00
parent 232d340118
commit 37124e0c0d
2 changed files with 36 additions and 34 deletions
@@ -20,10 +20,7 @@ import com.intellij.openapi.editor.markup.SeparatorPlacement
import com.intellij.openapi.progress.ProgressManager
import com.intellij.openapi.project.DumbService
import com.intellij.openapi.util.text.StringUtil
import com.intellij.psi.NavigatablePsiElement
import com.intellij.psi.PsiElement
import com.intellij.psi.PsiMethod
import com.intellij.psi.PsiNameIdentifierOwner
import com.intellij.psi.*
import com.intellij.psi.search.searches.ClassInheritorsSearch
import com.intellij.psi.util.PsiTreeUtil
import org.jetbrains.kotlin.asJava.LightClassUtil
@@ -87,11 +84,14 @@ class KotlinLineMarkerProvider : LineMarkerProvider {
val first = elements.first()
if (DumbService.getInstance(first.project).isDumb || !ProjectRootsUtil.isInProjectOrLibSource(first)) return
val functions = HashSet<KtNamedFunction>()
val properties = HashSet<KtNamedDeclaration>()
val functions = hashSetOf<KtNamedFunction>()
val properties = hashSetOf<KtNamedDeclaration>()
val declarations = hashSetOf<KtNamedDeclaration>()
for (element in elements) {
for (leaf in elements) {
ProgressManager.checkCanceled()
val element = leaf.parent as? KtNamedDeclaration ?: continue
if (!declarations.add(element)) continue
when (element) {
is KtClass -> {
@@ -113,20 +113,11 @@ class KotlinLineMarkerProvider : LineMarkerProvider {
}
}
}
collectMultiplatformMarkers(element, result)
}
collectOverriddenFunctions(functions, result)
collectOverriddenPropertyAccessors(properties, result)
for (element in elements) {
if (element !is KtNamedDeclaration) continue
if (element.isExpectDeclaration()) {
collectActualMarkers(element, result)
} else if (element.isEffectivelyActual()) {
collectExpectedMarkers(element, result)
}
}
}
}
@@ -339,6 +330,16 @@ private val KtNamedDeclaration.expectOrActualAnchor
else -> null
} ?: this
private fun collectMultiplatformMarkers(
declaration: KtNamedDeclaration,
result: MutableCollection<LineMarkerInfo<*>>
) {
when {
declaration.isExpectDeclaration() -> collectActualMarkers(declaration, result)
declaration.isEffectivelyActual() -> collectExpectedMarkers(declaration, result)
}
}
private fun collectActualMarkers(
declaration: KtNamedDeclaration,
result: MutableCollection<LineMarkerInfo<*>>
@@ -20,10 +20,7 @@ import com.intellij.openapi.editor.markup.SeparatorPlacement
import com.intellij.openapi.progress.ProgressManager
import com.intellij.openapi.project.DumbService
import com.intellij.openapi.util.text.StringUtil
import com.intellij.psi.NavigatablePsiElement
import com.intellij.psi.PsiElement
import com.intellij.psi.PsiMethod
import com.intellij.psi.PsiNameIdentifierOwner
import com.intellij.psi.*
import com.intellij.psi.search.searches.ClassInheritorsSearch
import com.intellij.psi.util.PsiTreeUtil
import org.jetbrains.kotlin.asJava.LightClassUtil
@@ -87,11 +84,14 @@ class KotlinLineMarkerProvider : LineMarkerProvider {
val first = elements.first()
if (DumbService.getInstance(first.project).isDumb || !ProjectRootsUtil.isInProjectOrLibSource(first)) return
val functions = HashSet<KtNamedFunction>()
val properties = HashSet<KtNamedDeclaration>()
val functions = hashSetOf<KtNamedFunction>()
val properties = hashSetOf<KtNamedDeclaration>()
val declarations = hashSetOf<KtNamedDeclaration>()
for (element in elements) {
for (leaf in elements) {
ProgressManager.checkCanceled()
val element = leaf.parent as? KtNamedDeclaration ?: continue
if (!declarations.add(element)) continue
when (element) {
is KtClass -> {
@@ -113,20 +113,11 @@ class KotlinLineMarkerProvider : LineMarkerProvider {
}
}
}
collectMultiplatformMarkers(element, result)
}
collectOverriddenFunctions(functions, result)
collectOverriddenPropertyAccessors(properties, result)
for (element in elements) {
if (element !is KtNamedDeclaration) continue
if (element.isExpectDeclaration()) {
collectActualMarkers(element, result)
} else if (element.isEffectivelyActual()) {
collectExpectedMarkers(element, result)
}
}
}
}
@@ -337,6 +328,16 @@ private val KtNamedDeclaration.expectOrActualAnchor
else -> null
} ?: this
private fun collectMultiplatformMarkers(
declaration: KtNamedDeclaration,
result: MutableCollection<LineMarkerInfo<*>>
) {
when {
declaration.isExpectDeclaration() -> collectActualMarkers(declaration, result)
declaration.isEffectivelyActual() -> collectExpectedMarkers(declaration, result)
}
}
private fun collectActualMarkers(
declaration: KtNamedDeclaration,
result: MutableCollection<LineMarkerInfo<*>>