KtLightElements: make light annotations lazier

Allow to get annotation list and to invoke `findAnnotation` without building delegate
Introduce KtLightNullabilityAnnotation which holds nullability information and is built
    before delegate is built
This commit is contained in:
Pavel V. Talanov
2017-04-24 17:37:58 +03:00
parent 03b68666e4
commit 0571c62943
25 changed files with 411 additions and 179 deletions
@@ -26,7 +26,7 @@ import com.intellij.psi.PsiNameIdentifierOwner
import com.intellij.spring.gutter.SpringClassAnnotator
import com.intellij.util.Function
import com.intellij.util.SmartList
import org.jetbrains.kotlin.asJava.elements.KtLightAnnotation
import org.jetbrains.kotlin.asJava.elements.KtLightAnnotationForSourceEntry
import org.jetbrains.kotlin.asJava.elements.KtLightElement
import org.jetbrains.kotlin.asJava.elements.KtLightIdentifier
import org.jetbrains.kotlin.asJava.elements.KtLightMethod
@@ -78,7 +78,7 @@ class KotlinSpringClassAnnotator : SpringClassAnnotator() {
}
// Workaround for SpringClassAnnotator
(getElementToProcess(psiElement) as? KtLightAnnotation)?.let { return super.collectNavigationMarkers(it, result) }
(getElementToProcess(psiElement) as? KtLightAnnotationForSourceEntry)?.let { return super.collectNavigationMarkers(it, result) }
super.collectNavigationMarkers(psiElement, result)
}
@@ -30,7 +30,7 @@ import com.intellij.spring.model.xml.beans.SpringPropertyDefinition
import com.intellij.testFramework.UsefulTestCase.assertSameElements
import com.intellij.util.containers.ContainerUtil
import com.intellij.util.xml.DomUtil
import org.jetbrains.kotlin.asJava.elements.KtLightAnnotation
import org.jetbrains.kotlin.asJava.elements.KtLightAnnotationForSourceEntry
import org.jetbrains.kotlin.idea.completion.test.assertInstanceOf
import org.jetbrains.kotlin.psi.KtModifierListOwner
import org.jetbrains.kotlin.psi.psiUtil.getStrictParentOfType
@@ -47,7 +47,7 @@ private fun nameBean(element: PsiElement): String {
private fun nameProperty(element: PsiElement) = DomUtil.getDomElement(element).assertInstanceOf<SpringPropertyDefinition>().propertyName!!
private fun namePsi(element: PsiElement): String {
if (element is KtLightAnnotation) return namePsi(element.kotlinOrigin.getStrictParentOfType<KtModifierListOwner>()!!)
if (element is KtLightAnnotationForSourceEntry) return namePsi(element.kotlinOrigin.getStrictParentOfType<KtModifierListOwner>()!!)
return SymbolPresentationUtil.getSymbolPresentableText(element)
}