Initial implementation of rainbow highlighting for Kotlin

#KT-12629 Fixed
This commit is contained in:
Dmitry Jemerov
2017-04-21 18:34:19 +02:00
parent c9769ab454
commit 5315f4d9da
5 changed files with 203 additions and 2 deletions
@@ -16,11 +16,16 @@
package org.jetbrains.kotlin.idea.highlighter
import com.intellij.codeHighlighting.RainbowHighlighter
import com.intellij.lang.annotation.AnnotationHolder
import com.intellij.openapi.application.ApplicationManager
import com.intellij.openapi.editor.colors.EditorColorsManager
import com.intellij.openapi.util.TextRange
import com.intellij.psi.PsiElement
import org.jetbrains.kotlin.idea.KotlinLanguage
import org.jetbrains.kotlin.kdoc.parser.KDocKnownTag
import org.jetbrains.kotlin.kdoc.psi.impl.KDocLink
import org.jetbrains.kotlin.kdoc.psi.impl.KDocTag
import org.jetbrains.kotlin.lexer.KtTokens
import org.jetbrains.kotlin.psi.KtExpressionWithLabel
import org.jetbrains.kotlin.psi.KtLambdaExpression
@@ -34,7 +39,7 @@ internal class BeforeResolveHighlightingVisitor(private val holder: AnnotationHo
override fun visitElement(element: PsiElement) {
val elementType = element.node.elementType
val attributes = when {
element is KDocLink -> KotlinHighlightingColors.KDOC_LINK
element is KDocLink && !willApplyRainbowHighlight(element) -> KotlinHighlightingColors.KDOC_LINK
elementType in KtTokens.SOFT_KEYWORDS -> {
when (elementType) {
@@ -49,6 +54,14 @@ internal class BeforeResolveHighlightingVisitor(private val holder: AnnotationHo
holder.createInfoAnnotation(element, null).textAttributes = attributes
}
private fun willApplyRainbowHighlight(element: KDocLink): Boolean {
if (!RainbowHighlighter.isRainbowEnabledWithInheritance(EditorColorsManager.getInstance().globalScheme, KotlinLanguage.INSTANCE)) {
return false
}
// Can't use resolve because it will access indices
return (element.parent as? KDocTag)?.knownTag == KDocKnownTag.PARAM
}
override fun visitLambdaExpression(lambdaExpression: KtLambdaExpression) {
if (ApplicationManager.getApplication().isUnitTestMode) return