mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-03-22 15:19:59 +07:00
[kotlin] Rework before resolve highlighting visitor for better injected files support
#KTIJ-28361 #KTIJ-17011 GitOrigin-RevId: f95bbc66f6870894b604a1a9ddb89e1279d02053
This commit is contained in:
committed by
intellij-monorepo-bot
parent
5db74b516f
commit
54d0614034
@@ -175,6 +175,11 @@ public abstract class K2HighlightingMetaInfoTestGenerated extends AbstractK2High
|
||||
runTest("../../idea/tests/testData/highlighterMetaInfo/jvm/KotlinInjection.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("KotlinSimpleInjection.kt")
|
||||
public void testKotlinSimpleInjection() throws Exception {
|
||||
runTest("../../idea/tests/testData/highlighterMetaInfo/jvm/KotlinSimpleInjection.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("NonExistingKotlinMethodFromJava.kt")
|
||||
public void testNonExistingKotlinMethodFromJava() throws Exception {
|
||||
runTest("../../idea/tests/testData/highlighterMetaInfo/jvm/NonExistingKotlinMethodFromJava.kt");
|
||||
|
||||
@@ -2,30 +2,38 @@
|
||||
|
||||
package org.jetbrains.kotlin.idea.base.highlighting
|
||||
|
||||
import com.intellij.codeHighlighting.*
|
||||
import com.intellij.codeHighlighting.TextEditorHighlightingPass
|
||||
import com.intellij.codeHighlighting.TextEditorHighlightingPassFactory
|
||||
import com.intellij.codeInsight.daemon.impl.analysis.HighlightInfoHolder
|
||||
import com.intellij.openapi.editor.Document
|
||||
import com.intellij.openapi.editor.Editor
|
||||
import com.intellij.openapi.extensions.ExtensionPointName
|
||||
import com.intellij.openapi.project.DumbAware
|
||||
import com.intellij.openapi.project.Project
|
||||
import com.intellij.psi.PsiElement
|
||||
import com.intellij.psi.PsiFile
|
||||
import com.intellij.psi.PsiRecursiveElementVisitor
|
||||
import org.jetbrains.annotations.ApiStatus
|
||||
import org.jetbrains.kotlin.idea.KotlinFileType
|
||||
import org.jetbrains.kotlin.idea.highlighter.visitor.AbstractHighlightingVisitor
|
||||
import org.jetbrains.kotlin.idea.highlighter.AbstractHighlightingPassBase
|
||||
import org.jetbrains.kotlin.idea.highlighter.BeforeResolveHighlightingVisitor
|
||||
import org.jetbrains.kotlin.idea.highlighter.visitor.AbstractHighlightingVisitor
|
||||
|
||||
@ApiStatus.Internal
|
||||
interface BeforeResolveHighlightingExtension {
|
||||
fun createVisitor(holder: HighlightInfoHolder): AbstractHighlightingVisitor
|
||||
|
||||
companion object {
|
||||
val EP_NAME: ExtensionPointName<BeforeResolveHighlightingExtension> =
|
||||
ExtensionPointName.create<BeforeResolveHighlightingExtension>("org.jetbrains.kotlin.beforeResolveHighlightingVisitor")
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
class KotlinBeforeResolveHighlightingPass(file: PsiFile, document: Document) : AbstractHighlightingPassBase(file, document) {
|
||||
override fun runAnnotatorWithContext(element: PsiElement, holder: HighlightInfoHolder) {
|
||||
val visitor = BeforeResolveHighlightingVisitor(holder)
|
||||
val extensions = EP_NAME.extensionList.map { it.createVisitor(holder) }
|
||||
val extensions = BeforeResolveHighlightingExtension.EP_NAME.extensionList.map { it.createVisitor(holder) }
|
||||
|
||||
element.accept(object : PsiRecursiveElementVisitor() {
|
||||
override fun visitElement(element: PsiElement) {
|
||||
element.accept(visitor)
|
||||
extensions.forEach(element::accept)
|
||||
super.visitElement(element)
|
||||
}
|
||||
@@ -38,25 +46,4 @@ class KotlinBeforeResolveHighlightingPass(file: PsiFile, document: Document) : A
|
||||
return KotlinBeforeResolveHighlightingPass(file, editor.document)
|
||||
}
|
||||
}
|
||||
|
||||
class Registrar : TextEditorHighlightingPassFactoryRegistrar {
|
||||
override fun registerHighlightingPassFactory(registrar: TextEditorHighlightingPassRegistrar, project: Project) {
|
||||
registrar.registerTextEditorHighlightingPass(
|
||||
Factory(),
|
||||
/* anchor = */ TextEditorHighlightingPassRegistrar.Anchor.BEFORE,
|
||||
/* anchorPassId = */ Pass.UPDATE_FOLDING,
|
||||
/* needAdditionalIntentionsPass = */ false,
|
||||
/* inPostHighlightingPass = */ false
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
companion object {
|
||||
val EP_NAME = ExtensionPointName.create<BeforeResolveHighlightingExtension>("org.jetbrains.kotlin.beforeResolveHighlightingVisitor")
|
||||
}
|
||||
}
|
||||
|
||||
@ApiStatus.Internal
|
||||
interface BeforeResolveHighlightingExtension {
|
||||
fun createVisitor(holder: HighlightInfoHolder): AbstractHighlightingVisitor
|
||||
}
|
||||
@@ -0,0 +1,42 @@
|
||||
// Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
|
||||
package org.jetbrains.kotlin.idea.base.highlighting
|
||||
|
||||
import com.intellij.codeInsight.daemon.impl.HighlightVisitor
|
||||
import com.intellij.codeInsight.daemon.impl.analysis.HighlightInfoHolder
|
||||
import com.intellij.openapi.project.DumbAware
|
||||
import com.intellij.psi.PsiElement
|
||||
import com.intellij.psi.PsiElementVisitor
|
||||
import com.intellij.psi.PsiFile
|
||||
import org.jetbrains.annotations.ApiStatus
|
||||
import org.jetbrains.kotlin.idea.base.highlighting.BeforeResolveHighlightingExtension.Companion.EP_NAME
|
||||
import org.jetbrains.kotlin.psi.KtCommonFile
|
||||
|
||||
@ApiStatus.Internal
|
||||
class KotlinBeforeResolveHighlightingVisitor: HighlightVisitor, DumbAware {
|
||||
private var visitors: List<PsiElementVisitor>? = null
|
||||
|
||||
override fun suitableForFile(file: PsiFile): Boolean =
|
||||
@Suppress("DEPRECATION")
|
||||
file is KtCommonFile
|
||||
|
||||
override fun visit(element: PsiElement) {
|
||||
visitors?.forEach(element::accept)
|
||||
}
|
||||
|
||||
override fun analyze(
|
||||
file: PsiFile,
|
||||
updateWholeFile: Boolean,
|
||||
holder: HighlightInfoHolder,
|
||||
action: Runnable
|
||||
): Boolean {
|
||||
try {
|
||||
visitors = EP_NAME.extensionList.map { it.createVisitor(holder) }
|
||||
action.run()
|
||||
} finally {
|
||||
visitors = null
|
||||
}
|
||||
return true
|
||||
}
|
||||
|
||||
override fun clone(): HighlightVisitor = KotlinBeforeResolveHighlightingVisitor()
|
||||
}
|
||||
@@ -6,9 +6,11 @@ import com.intellij.codeHighlighting.RainbowHighlighter
|
||||
import com.intellij.codeInsight.daemon.impl.analysis.HighlightInfoHolder
|
||||
import com.intellij.openapi.application.ApplicationManager
|
||||
import com.intellij.openapi.editor.colors.EditorColorsManager
|
||||
import com.intellij.openapi.project.DumbAware
|
||||
import com.intellij.openapi.util.TextRange
|
||||
import com.intellij.psi.PsiElement
|
||||
import org.jetbrains.kotlin.idea.KotlinLanguage
|
||||
import org.jetbrains.kotlin.idea.base.highlighting.BeforeResolveHighlightingExtension
|
||||
import org.jetbrains.kotlin.idea.highlighter.visitor.AbstractHighlightingVisitor
|
||||
import org.jetbrains.kotlin.kdoc.parser.KDocKnownTag
|
||||
import org.jetbrains.kotlin.kdoc.psi.impl.KDocLink
|
||||
@@ -18,7 +20,7 @@ import org.jetbrains.kotlin.psi.*
|
||||
import org.jetbrains.kotlin.psi.psiUtil.endOffset
|
||||
import org.jetbrains.kotlin.psi.psiUtil.startOffset
|
||||
|
||||
class BeforeResolveHighlightingVisitor(holder: HighlightInfoHolder) : AbstractHighlightingVisitor(holder) {
|
||||
class BeforeResolveHighlightingVisitor(holder: HighlightInfoHolder) : AbstractHighlightingVisitor(holder), DumbAware {
|
||||
override fun visitElement(element: PsiElement) {
|
||||
val elementType = element.node.elementType
|
||||
val attributes = when {
|
||||
@@ -103,3 +105,8 @@ class BeforeResolveHighlightingVisitor(holder: HighlightInfoHolder) : AbstractHi
|
||||
super.visitNamedFunction(function)
|
||||
}
|
||||
}
|
||||
|
||||
class BeforeResolveHighlightingExtension : BeforeResolveHighlightingExtension {
|
||||
override fun createVisitor(holder: HighlightInfoHolder): AbstractHighlightingVisitor =
|
||||
BeforeResolveHighlightingVisitor(holder)
|
||||
}
|
||||
@@ -12,7 +12,6 @@
|
||||
|
||||
<defaultHighlightingSettingProvider implementation="org.jetbrains.kotlin.idea.highlighter.KotlinDefaultHighlightingSettingsProvider"/>
|
||||
|
||||
<highlightingPassFactory implementation="org.jetbrains.kotlin.idea.base.highlighting.KotlinBeforeResolveHighlightingPass$Registrar"/>
|
||||
<problemHighlightFilter implementation="org.jetbrains.kotlin.idea.highlighter.KotlinProblemHighlightFilter"/>
|
||||
<problemFileHighlightFilter implementation="org.jetbrains.kotlin.idea.base.highlighting.KotlinProblemFileHighlightFilter"/>
|
||||
|
||||
@@ -22,9 +21,11 @@
|
||||
<additionalTextAttributes scheme="Default" file="colorScheme/Default_Kotlin.xml"/>
|
||||
<additionalTextAttributes scheme="Darcula" file="colorScheme/Darcula_Kotlin.xml"/>
|
||||
<highlightVisitor implementation="org.jetbrains.kotlin.idea.highlighter.KotlinRainbowVisitor"/>
|
||||
<highlightVisitor implementation="org.jetbrains.kotlin.idea.base.highlighting.KotlinBeforeResolveHighlightingVisitor"/>
|
||||
</extensions>
|
||||
|
||||
<extensions defaultExtensionNs="org.jetbrains.kotlin">
|
||||
<beforeResolveHighlightingVisitor implementation="org.jetbrains.kotlin.idea.highlighter.BeforeResolveHighlightingExtension"/>
|
||||
<beforeResolveHighlightingVisitor implementation="org.jetbrains.kotlin.idea.base.highlighting.beforeResolve.DeclarationHighlightingExtension"/>
|
||||
<beforeResolveHighlightingVisitor implementation="org.jetbrains.kotlin.idea.base.highlighting.beforeResolve.AnnotationsHighlightingExtension"/>
|
||||
</extensions>
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
package org.jetbrains.kotlin.idea.base.highlighting.beforeResolve
|
||||
|
||||
import com.intellij.codeInsight.daemon.impl.analysis.HighlightInfoHolder
|
||||
import com.intellij.openapi.project.DumbAware
|
||||
import com.intellij.openapi.util.TextRange
|
||||
import org.jetbrains.kotlin.idea.base.highlighting.BeforeResolveHighlightingExtension
|
||||
import org.jetbrains.kotlin.idea.highlighter.visitor.AbstractHighlightingVisitor
|
||||
@@ -13,7 +14,7 @@ import org.jetbrains.kotlin.psi.psiUtil.startOffset
|
||||
|
||||
internal class AnnotationEntryHighlightingVisitor(
|
||||
holder: HighlightInfoHolder
|
||||
) : AbstractHighlightingVisitor(holder) {
|
||||
) : AbstractHighlightingVisitor(holder), DumbAware {
|
||||
override fun visitAnnotationEntry(annotationEntry: KtAnnotationEntry) {
|
||||
val range = annotationEntry.getTextRangeToHighlight() ?: return
|
||||
highlightName(annotationEntry.project, range, KotlinHighlightInfoTypeSemanticNames.ANNOTATION)
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
package org.jetbrains.kotlin.idea.base.highlighting.beforeResolve
|
||||
|
||||
import com.intellij.codeInsight.daemon.impl.analysis.HighlightInfoHolder
|
||||
import com.intellij.openapi.project.DumbAware
|
||||
import com.intellij.psi.util.PsiUtilCore
|
||||
import org.jetbrains.kotlin.idea.base.highlighting.BeforeResolveHighlightingExtension
|
||||
import org.jetbrains.kotlin.idea.base.highlighting.textAttributesForClass
|
||||
@@ -13,7 +14,7 @@ import org.jetbrains.kotlin.idea.highlighter.visitor.AbstractHighlightingVisitor
|
||||
import org.jetbrains.kotlin.lexer.KtTokens
|
||||
import org.jetbrains.kotlin.psi.*
|
||||
|
||||
internal class DeclarationHighlightingVisitor(holder: HighlightInfoHolder) : AbstractHighlightingVisitor(holder) {
|
||||
internal class DeclarationHighlightingVisitor(holder: HighlightInfoHolder) : AbstractHighlightingVisitor(holder), DumbAware {
|
||||
override fun visitTypeAlias(typeAlias: KtTypeAlias) {
|
||||
highlightNamedDeclaration(typeAlias, KotlinHighlightInfoTypeSemanticNames.TYPE_ALIAS)
|
||||
super.visitTypeAlias(typeAlias)
|
||||
|
||||
@@ -175,6 +175,11 @@ public abstract class K1HighlightingMetaInfoTestGenerated extends AbstractK1High
|
||||
runTest("testData/highlighterMetaInfo/jvm/KotlinInjection.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("KotlinSimpleInjection.kt")
|
||||
public void testKotlinSimpleInjection() throws Exception {
|
||||
runTest("testData/highlighterMetaInfo/jvm/KotlinSimpleInjection.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("NonExistingKotlinMethodFromJava.kt")
|
||||
public void testNonExistingKotlinMethodFromJava() throws Exception {
|
||||
runTest("testData/highlighterMetaInfo/jvm/NonExistingKotlinMethodFromJava.kt");
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
<!HIGHLIGHTING("severity='SYMBOL_TYPE_SEVERITY'; highlightingTextAttributesKey='KOTLIN_BUILTIN_ANNOTATION'")!>infix<!> <!HIGHLIGHTING("severity='SYMBOL_TYPE_SEVERITY'; highlightingTextAttributesKey='KOTLIN_ANNOTATION'")!>@Language<!>("kotlin") fun <!HIGHLIGHTING("severity='SYMBOL_TYPE_SEVERITY'; highlightingTextAttributesKey='KOTLIN_CLASS'")!>String<!>.<!HIGHLIGHTING("severity='SYMBOL_TYPE_SEVERITY'; highlightingTextAttributesKey='KOTLIN_FUNCTION_DECLARATION'")!>xml2<!>(<!HIGHLIGHTING("severity='SYMBOL_TYPE_SEVERITY'; highlightingTextAttributesKey='KOTLIN_ANNOTATION'")!>@Language<!>("kotlin") <!HIGHLIGHTING("severity='SYMBOL_TYPE_SEVERITY'; highlightingTextAttributesKey='KOTLIN_PARAMETER'")!>content<!>: <!HIGHLIGHTING("severity='SYMBOL_TYPE_SEVERITY'; highlightingTextAttributesKey='KOTLIN_CLASS'")!>String<!>){}
|
||||
|
||||
fun <!HIGHLIGHTING("severity='SYMBOL_TYPE_SEVERITY'; highlightingTextAttributesKey='KOTLIN_FUNCTION_DECLARATION'")!>main<!>() {
|
||||
"foo" <!HIGHLIGHTING("severity='SYMBOL_TYPE_SEVERITY'; highlightingTextAttributesKey='KOTLIN_EXTENSION_FUNCTION_CALL'")!>xml<!> "fun foo() {}"
|
||||
"foo".<!HIGHLIGHTING("severity='SYMBOL_TYPE_SEVERITY'; highlightingTextAttributesKey='KOTLIN_EXTENSION_FUNCTION_CALL'")!>xml<!>("fun foo() {}")
|
||||
"fun bar() {}" <!HIGHLIGHTING("severity='SYMBOL_TYPE_SEVERITY'; highlightingTextAttributesKey='KOTLIN_EXTENSION_FUNCTION_CALL'")!>xml2<!> "fun foo() {}"
|
||||
"foo" <!HIGHLIGHTING("severity='SYMBOL_TYPE_SEVERITY'; highlightingTextAttributesKey='KOTLIN_EXTENSION_FUNCTION_CALL'")!>xml<!> "fun <!HIGHLIGHTING("severity='SYMBOL_TYPE_SEVERITY'; highlightingTextAttributesKey='KOTLIN_FUNCTION_DECLARATION'")!>foo<!>() {}"
|
||||
"foo".<!HIGHLIGHTING("severity='SYMBOL_TYPE_SEVERITY'; highlightingTextAttributesKey='KOTLIN_EXTENSION_FUNCTION_CALL'")!>xml<!>("fun <!HIGHLIGHTING("severity='SYMBOL_TYPE_SEVERITY'; highlightingTextAttributesKey='KOTLIN_FUNCTION_DECLARATION'")!>foo<!>() {}")
|
||||
"fun <!HIGHLIGHTING("severity='SYMBOL_TYPE_SEVERITY'; highlightingTextAttributesKey='KOTLIN_FUNCTION_DECLARATION'")!>bar<!>() {}" <!HIGHLIGHTING("severity='SYMBOL_TYPE_SEVERITY'; highlightingTextAttributesKey='KOTLIN_EXTENSION_FUNCTION_CALL'")!>xml2<!> "fun <!HIGHLIGHTING("severity='SYMBOL_TYPE_SEVERITY'; highlightingTextAttributesKey='KOTLIN_FUNCTION_DECLARATION'")!>foo<!>() {}"
|
||||
}
|
||||
|
||||
@@ -1,4 +1,3 @@
|
||||
// FIR_IDENTICAL
|
||||
// CHECK_SYMBOL_NAMES
|
||||
// HIGHLIGHTER_ATTRIBUTES_KEY
|
||||
package language_injection
|
||||
@@ -6,4 +5,28 @@ package language_injection
|
||||
import org.intellij.lang.annotations.Language
|
||||
|
||||
@Language("kotlin")
|
||||
val test = "fun test2() {}"
|
||||
val test = """
|
||||
internal class Foo: Bar() {
|
||||
private val name: String = "Kodee"
|
||||
lateinit var way: Path
|
||||
|
||||
fun doFun() {
|
||||
var count = 0
|
||||
for21@ for (t in pc) {
|
||||
while (count < 21) {
|
||||
print(message = "Hello, ")
|
||||
println(name)
|
||||
|
||||
count++
|
||||
// I meant to type `continue@for21`.
|
||||
continue@for21
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
companion object {
|
||||
@JvmStatic
|
||||
val globalProperty = 42
|
||||
}
|
||||
}
|
||||
"""
|
||||
|
||||
@@ -1,4 +1,3 @@
|
||||
// FIR_IDENTICAL
|
||||
// CHECK_SYMBOL_NAMES
|
||||
// HIGHLIGHTER_ATTRIBUTES_KEY
|
||||
package language_injection
|
||||
@@ -6,4 +5,28 @@ package language_injection
|
||||
<!HIGHLIGHTING("severity='SYMBOL_TYPE_SEVERITY'; highlightingTextAttributesKey='KOTLIN_KEYWORD'")!>import<!> org.intellij.lang.annotations.<!HIGHLIGHTING("severity='SYMBOL_TYPE_SEVERITY'; highlightingTextAttributesKey='KOTLIN_ANNOTATION'")!>Language<!>
|
||||
|
||||
<!HIGHLIGHTING("severity='SYMBOL_TYPE_SEVERITY'; highlightingTextAttributesKey='KOTLIN_ANNOTATION'")!>@Language<!>("kotlin")
|
||||
val <!HIGHLIGHTING("severity='SYMBOL_TYPE_SEVERITY'; highlightingTextAttributesKey='KOTLIN_PACKAGE_PROPERTY'")!>test<!> = "fun test2() {}"
|
||||
val <!HIGHLIGHTING("severity='SYMBOL_TYPE_SEVERITY'; highlightingTextAttributesKey='KOTLIN_PACKAGE_PROPERTY'")!>test<!> = """
|
||||
<!HIGHLIGHTING("severity='SYMBOL_TYPE_SEVERITY'; highlightingTextAttributesKey='KOTLIN_BUILTIN_ANNOTATION'")!>internal<!> class <!HIGHLIGHTING("severity='SYMBOL_TYPE_SEVERITY'; highlightingTextAttributesKey='KOTLIN_CLASS'")!>Foo<!>: <!HIGHLIGHTING("severity='SYMBOL_TYPE_SEVERITY'; highlightingTextAttributesKey='KOTLIN_CONSTRUCTOR'")!>Bar<!>() {
|
||||
<!HIGHLIGHTING("severity='SYMBOL_TYPE_SEVERITY'; highlightingTextAttributesKey='KOTLIN_BUILTIN_ANNOTATION'")!>private<!> val <!HIGHLIGHTING("severity='SYMBOL_TYPE_SEVERITY'; highlightingTextAttributesKey='KOTLIN_INSTANCE_PROPERTY'")!>name<!>: <!HIGHLIGHTING("severity='SYMBOL_TYPE_SEVERITY'; highlightingTextAttributesKey='KOTLIN_CLASS'")!>String<!> = "Kodee"
|
||||
<!HIGHLIGHTING("severity='SYMBOL_TYPE_SEVERITY'; highlightingTextAttributesKey='KOTLIN_BUILTIN_ANNOTATION'")!>lateinit<!> var <!HIGHLIGHTING("severity='SYMBOL_TYPE_SEVERITY'; highlightingTextAttributesKey='KOTLIN_INSTANCE_PROPERTY'"), HIGHLIGHTING("severity='SYMBOL_TYPE_SEVERITY'; highlightingTextAttributesKey='KOTLIN_MUTABLE_VARIABLE'")!>way<!>: Path
|
||||
|
||||
fun <!HIGHLIGHTING("severity='SYMBOL_TYPE_SEVERITY'; highlightingTextAttributesKey='KOTLIN_FUNCTION_DECLARATION'")!>doFun<!>() {
|
||||
var <!HIGHLIGHTING("severity='SYMBOL_TYPE_SEVERITY'; highlightingTextAttributesKey='KOTLIN_LOCAL_VARIABLE'"), HIGHLIGHTING("severity='SYMBOL_TYPE_SEVERITY'; highlightingTextAttributesKey='KOTLIN_MUTABLE_VARIABLE'")!>count<!> = 0
|
||||
<!HIGHLIGHTING("severity='SYMBOL_TYPE_SEVERITY'; highlightingTextAttributesKey='KOTLIN_LABEL'")!>for21@<!> for (<!HIGHLIGHTING("severity='SYMBOL_TYPE_SEVERITY'; highlightingTextAttributesKey='KOTLIN_LOCAL_VARIABLE'"), HIGHLIGHTING("severity='SYMBOL_TYPE_SEVERITY'; highlightingTextAttributesKey='KOTLIN_PARAMETER'")!>t<!> in pc) {
|
||||
while (<!HIGHLIGHTING("severity='SYMBOL_TYPE_SEVERITY'; highlightingTextAttributesKey='KOTLIN_LOCAL_VARIABLE'"), HIGHLIGHTING("severity='SYMBOL_TYPE_SEVERITY'; highlightingTextAttributesKey='KOTLIN_MUTABLE_VARIABLE'")!>count<!> < 21) {
|
||||
print(<!HIGHLIGHTING("severity='SYMBOL_TYPE_SEVERITY'; highlightingTextAttributesKey='KOTLIN_NAMED_ARGUMENT'")!>message =<!> "Hello, ")
|
||||
println(<!HIGHLIGHTING("severity='SYMBOL_TYPE_SEVERITY'; highlightingTextAttributesKey='KOTLIN_INSTANCE_PROPERTY'")!>name<!>)
|
||||
|
||||
<!HIGHLIGHTING("severity='SYMBOL_TYPE_SEVERITY'; highlightingTextAttributesKey='KOTLIN_LOCAL_VARIABLE'"), HIGHLIGHTING("severity='SYMBOL_TYPE_SEVERITY'; highlightingTextAttributesKey='KOTLIN_MUTABLE_VARIABLE'")!>count<!>++
|
||||
// I meant to type `continue@for21`.
|
||||
continue<!HIGHLIGHTING("severity='SYMBOL_TYPE_SEVERITY'; highlightingTextAttributesKey='KOTLIN_LABEL'")!>@for21<!>
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
<!HIGHLIGHTING("severity='SYMBOL_TYPE_SEVERITY'; highlightingTextAttributesKey='KOTLIN_BUILTIN_ANNOTATION'")!>companion<!> object {
|
||||
<!HIGHLIGHTING("severity='SYMBOL_TYPE_SEVERITY'; highlightingTextAttributesKey='KOTLIN_ANNOTATION'")!>@JvmStatic<!>
|
||||
val <!HIGHLIGHTING("severity='SYMBOL_TYPE_SEVERITY'; highlightingTextAttributesKey='KOTLIN_INSTANCE_PROPERTY'")!>globalProperty<!> = 42
|
||||
}
|
||||
}
|
||||
"""
|
||||
|
||||
@@ -0,0 +1,32 @@
|
||||
// CHECK_SYMBOL_NAMES
|
||||
// HIGHLIGHTER_ATTRIBUTES_KEY
|
||||
package language_injection
|
||||
|
||||
<!HIGHLIGHTING("severity='SYMBOL_TYPE_SEVERITY'; highlightingTextAttributesKey='KOTLIN_KEYWORD'")!>import<!> org.intellij.lang.annotations.<!HIGHLIGHTING("severity='SYMBOL_TYPE_SEVERITY'; highlightingTextAttributesKey='KOTLIN_ANNOTATION'")!>Language<!>
|
||||
|
||||
<!HIGHLIGHTING("severity='SYMBOL_TYPE_SEVERITY'; highlightingTextAttributesKey='KOTLIN_ANNOTATION'")!>@Language<!>("kotlin")
|
||||
val <!HIGHLIGHTING("severity='SYMBOL_TYPE_SEVERITY'; highlightingTextAttributesKey='KOTLIN_PACKAGE_PROPERTY'")!>test<!> = """
|
||||
<!HIGHLIGHTING("severity='SYMBOL_TYPE_SEVERITY'; highlightingTextAttributesKey='KOTLIN_BUILTIN_ANNOTATION'")!>internal<!> class <!HIGHLIGHTING("severity='SYMBOL_TYPE_SEVERITY'; highlightingTextAttributesKey='KOTLIN_CLASS'")!>Foo<!>: <!HIGHLIGHTING("severity='SYMBOL_TYPE_SEVERITY'; highlightingTextAttributesKey='KOTLIN_CONSTRUCTOR'")!>Bar<!>() {
|
||||
<!HIGHLIGHTING("severity='SYMBOL_TYPE_SEVERITY'; highlightingTextAttributesKey='KOTLIN_BUILTIN_ANNOTATION'")!>private<!> val <!HIGHLIGHTING("severity='SYMBOL_TYPE_SEVERITY'; highlightingTextAttributesKey='KOTLIN_INSTANCE_PROPERTY'")!>name<!>: <!HIGHLIGHTING("severity='SYMBOL_TYPE_SEVERITY'; highlightingTextAttributesKey='KOTLIN_CLASS'")!>String<!> = "Kodee"
|
||||
<!HIGHLIGHTING("severity='SYMBOL_TYPE_SEVERITY'; highlightingTextAttributesKey='KOTLIN_BUILTIN_ANNOTATION'")!>lateinit<!> var <!HIGHLIGHTING("severity='SYMBOL_TYPE_SEVERITY'; highlightingTextAttributesKey='KOTLIN_INSTANCE_PROPERTY'"), HIGHLIGHTING("severity='SYMBOL_TYPE_SEVERITY'; highlightingTextAttributesKey='KOTLIN_MUTABLE_VARIABLE'")!>way<!>: Path
|
||||
|
||||
fun <!HIGHLIGHTING("severity='SYMBOL_TYPE_SEVERITY'; highlightingTextAttributesKey='KOTLIN_FUNCTION_DECLARATION'")!>doFun<!>() {
|
||||
var <!HIGHLIGHTING("severity='SYMBOL_TYPE_SEVERITY'; highlightingTextAttributesKey='KOTLIN_LOCAL_VARIABLE'"), HIGHLIGHTING("severity='SYMBOL_TYPE_SEVERITY'; highlightingTextAttributesKey='KOTLIN_MUTABLE_VARIABLE'")!>count<!> = 0
|
||||
<!HIGHLIGHTING("severity='SYMBOL_TYPE_SEVERITY'; highlightingTextAttributesKey='KOTLIN_LABEL'")!>for21@<!> for (<!HIGHLIGHTING("severity='SYMBOL_TYPE_SEVERITY'; highlightingTextAttributesKey='KOTLIN_PARAMETER'")!>t<!> in pc) {
|
||||
while (<!HIGHLIGHTING("severity='SYMBOL_TYPE_SEVERITY'; highlightingTextAttributesKey='KOTLIN_LOCAL_VARIABLE'"), HIGHLIGHTING("severity='SYMBOL_TYPE_SEVERITY'; highlightingTextAttributesKey='KOTLIN_MUTABLE_VARIABLE'")!>count<!> < 21) {
|
||||
print(<!HIGHLIGHTING("severity='SYMBOL_TYPE_SEVERITY'; highlightingTextAttributesKey='KOTLIN_NAMED_ARGUMENT'")!>message =<!> "Hello, ")
|
||||
println(<!HIGHLIGHTING("severity='SYMBOL_TYPE_SEVERITY'; highlightingTextAttributesKey='KOTLIN_INSTANCE_PROPERTY'")!>name<!>)
|
||||
|
||||
<!HIGHLIGHTING("severity='SYMBOL_TYPE_SEVERITY'; highlightingTextAttributesKey='KOTLIN_LOCAL_VARIABLE'"), HIGHLIGHTING("severity='SYMBOL_TYPE_SEVERITY'; highlightingTextAttributesKey='KOTLIN_MUTABLE_VARIABLE'")!>count<!>++
|
||||
// I meant to type `continue@for21`.
|
||||
continue<!HIGHLIGHTING("severity='SYMBOL_TYPE_SEVERITY'; highlightingTextAttributesKey='KOTLIN_LABEL'")!>@for21<!>
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
<!HIGHLIGHTING("severity='SYMBOL_TYPE_SEVERITY'; highlightingTextAttributesKey='KOTLIN_BUILTIN_ANNOTATION'")!>companion<!> object {
|
||||
<!HIGHLIGHTING("severity='SYMBOL_TYPE_SEVERITY'; highlightingTextAttributesKey='KOTLIN_ANNOTATION'")!>@JvmStatic<!>
|
||||
val <!HIGHLIGHTING("severity='SYMBOL_TYPE_SEVERITY'; highlightingTextAttributesKey='KOTLIN_INSTANCE_PROPERTY'")!>globalProperty<!> = 42
|
||||
}
|
||||
}
|
||||
"""
|
||||
@@ -0,0 +1,9 @@
|
||||
// FIR_IDENTICAL
|
||||
// CHECK_SYMBOL_NAMES
|
||||
// HIGHLIGHTER_ATTRIBUTES_KEY
|
||||
package language_injection
|
||||
|
||||
import org.intellij.lang.annotations.Language
|
||||
|
||||
@Language("kotlin")
|
||||
val test = "fun test2() {}"
|
||||
@@ -0,0 +1,9 @@
|
||||
// FIR_IDENTICAL
|
||||
// CHECK_SYMBOL_NAMES
|
||||
// HIGHLIGHTER_ATTRIBUTES_KEY
|
||||
package language_injection
|
||||
|
||||
<!HIGHLIGHTING("severity='SYMBOL_TYPE_SEVERITY'; highlightingTextAttributesKey='KOTLIN_KEYWORD'")!>import<!> org.intellij.lang.annotations.<!HIGHLIGHTING("severity='SYMBOL_TYPE_SEVERITY'; highlightingTextAttributesKey='KOTLIN_ANNOTATION'")!>Language<!>
|
||||
|
||||
<!HIGHLIGHTING("severity='SYMBOL_TYPE_SEVERITY'; highlightingTextAttributesKey='KOTLIN_ANNOTATION'")!>@Language<!>("kotlin")
|
||||
val <!HIGHLIGHTING("severity='SYMBOL_TYPE_SEVERITY'; highlightingTextAttributesKey='KOTLIN_PACKAGE_PROPERTY'")!>test<!> = "fun <!HIGHLIGHTING("severity='SYMBOL_TYPE_SEVERITY'; highlightingTextAttributesKey='KOTLIN_FUNCTION_DECLARATION'")!>test2<!>() {}"
|
||||
Reference in New Issue
Block a user