Add secondary ctors to incremental analysis

#KT-35121 Fixed
This commit is contained in:
Vladimir Dolzhenko
2019-11-27 14:00:05 +01:00
parent f709377735
commit 95129939d4
7 changed files with 89 additions and 1 deletions
@@ -26,6 +26,7 @@ import com.intellij.psi.impl.PsiTreeChangeEventImpl.PsiEventType.CHILD_MOVED
import com.intellij.psi.impl.PsiTreeChangeEventImpl.PsiEventType.PROPERTY_CHANGED
import com.intellij.psi.impl.PsiTreeChangePreprocessor
import com.intellij.psi.util.PsiModificationTracker
import com.intellij.psi.util.PsiTreeUtil
import org.jetbrains.kotlin.idea.KotlinLanguage
import org.jetbrains.kotlin.kdoc.psi.api.KDoc
import org.jetbrains.kotlin.psi.*
@@ -283,12 +284,24 @@ class KotlinCodeBlockModificationListener(
blockDeclaration
.takeIf { it.isAncestor(element) }
?.let { ktClassInitializer ->
(KtPsiUtil.getTopmostParentOfTypes(blockDeclaration, KtClass::class.java) as? KtElement)?.let {
(PsiTreeUtil.getParentOfType(blockDeclaration, KtClass::class.java) as? KtElement)?.let {
return BlockModificationScopeElement(it, ktClassInitializer)
}
}
}
is KtSecondaryConstructor -> {
blockDeclaration
?.takeIf {
it.bodyExpression?.isAncestor(element) ?: false || it.getDelegationCallOrNull()?.isAncestor(element) ?: false
}
?.let { ktConstructor ->
(PsiTreeUtil.getParentOfType(blockDeclaration, KtClass::class.java) as? KtElement)?.let {
return BlockModificationScopeElement(it, ktConstructor)
}
}
}
// TODO: still under consideration - is it worth to track changes of private properties / methods
// problem could be in diagnostics - it is worth to manage it with modTracker
// is KtClass -> {
@@ -315,6 +328,7 @@ class KotlinCodeBlockModificationListener(
KtProperty::class.java,
KtNamedFunction::class.java,
KtClassInitializer::class.java,
KtSecondaryConstructor::class.java,
KtScriptInitializer::class.java
)