PropertiesHighlightingVisitor: cleanup after J2K, remove "property has backing field" highlighting, don't layer other highlights
This commit is contained in:
@@ -82,7 +82,6 @@ options.kotlin.attribute.descriptor.local.variable=Properties and Variables//Loc
|
||||
options.kotlin.attribute.descriptor.captured.variable=Properties and Variables//Variables and values captured in a closure
|
||||
options.kotlin.attribute.descriptor.instance.property=Properties and Variables//Instance property
|
||||
options.kotlin.attribute.descriptor.package.property=Properties and Variables//Package-level property
|
||||
options.kotlin.attribute.descriptor.property.with.backing=Properties and Variables//Property with backing field
|
||||
options.kotlin.attribute.descriptor.field=Properties and Variables//Backing field variable
|
||||
options.kotlin.attribute.descriptor.extension.property=Properties and Variables//Extension property
|
||||
options.kotlin.attribute.descriptor.dynamic.property=Properties and Variables//Dynamic property
|
||||
|
||||
-1
@@ -63,7 +63,6 @@ public class KotlinHighlightingColors {
|
||||
public static final TextAttributesKey WRAPPED_INTO_REF = createTextAttributesKey("KOTLIN_WRAPPED_INTO_REF", DefaultLanguageHighlighterColors.CLASS_NAME);
|
||||
public static final TextAttributesKey INSTANCE_PROPERTY = createTextAttributesKey("KOTLIN_INSTANCE_PROPERTY", DefaultLanguageHighlighterColors.INSTANCE_FIELD);
|
||||
public static final TextAttributesKey PACKAGE_PROPERTY = createTextAttributesKey("KOTLIN_PACKAGE_PROPERTY", DefaultLanguageHighlighterColors.STATIC_FIELD);
|
||||
public static final TextAttributesKey PROPERTY_WITH_BACKING_FIELD = createTextAttributesKey("KOTLIN_PROPERTY_WITH_BACKING_FIELD");
|
||||
public static final TextAttributesKey BACKING_FIELD_VARIABLE = createTextAttributesKey("KOTLIN_BACKING_FIELD_VARIABLE");
|
||||
public static final TextAttributesKey EXTENSION_PROPERTY = createTextAttributesKey("KOTLIN_EXTENSION_PROPERTY");
|
||||
public static final TextAttributesKey DYNAMIC_PROPERTY_CALL = createTextAttributesKey("KOTLIN_DYNAMIC_PROPERTY_CALL");
|
||||
|
||||
+19
-21
@@ -20,6 +20,7 @@ import com.intellij.lang.annotation.AnnotationHolder
|
||||
import com.intellij.psi.PsiElement
|
||||
import org.jetbrains.kotlin.descriptors.PropertyDescriptor
|
||||
import org.jetbrains.kotlin.descriptors.impl.SyntheticFieldDescriptor
|
||||
import org.jetbrains.kotlin.idea.highlighter.KotlinHighlightingColors.*
|
||||
import org.jetbrains.kotlin.psi.KtParameter
|
||||
import org.jetbrains.kotlin.psi.KtProperty
|
||||
import org.jetbrains.kotlin.psi.KtSimpleNameExpression
|
||||
@@ -37,22 +38,21 @@ internal class PropertiesHighlightingVisitor(holder: AnnotationHolder, bindingCo
|
||||
}
|
||||
val target = bindingContext.get(BindingContext.REFERENCE_TARGET, expression)
|
||||
if (target is SyntheticFieldDescriptor) {
|
||||
NameHighlighter.highlightName(holder, expression, KotlinHighlightingColors.BACKING_FIELD_VARIABLE)
|
||||
holder.highlightName(expression, BACKING_FIELD_VARIABLE)
|
||||
return
|
||||
}
|
||||
if (target !is PropertyDescriptor) {
|
||||
return
|
||||
}
|
||||
|
||||
highlightProperty(expression, (target as PropertyDescriptor?)!!, false)
|
||||
highlightProperty(expression, target)
|
||||
}
|
||||
|
||||
override fun visitProperty(property: KtProperty) {
|
||||
val nameIdentifier = property.nameIdentifier ?: return
|
||||
val propertyDescriptor = bindingContext.get(BindingContext.VARIABLE, property)
|
||||
if (propertyDescriptor is PropertyDescriptor) {
|
||||
val backingFieldRequired = bindingContext.get(BindingContext.BACKING_FIELD_REQUIRED, propertyDescriptor as PropertyDescriptor?)
|
||||
highlightProperty(nameIdentifier, (propertyDescriptor as PropertyDescriptor?)!!, java.lang.Boolean.TRUE == backingFieldRequired)
|
||||
highlightProperty(nameIdentifier, propertyDescriptor)
|
||||
}
|
||||
|
||||
super.visitProperty(property)
|
||||
@@ -62,8 +62,7 @@ internal class PropertiesHighlightingVisitor(holder: AnnotationHolder, bindingCo
|
||||
val nameIdentifier = parameter.nameIdentifier ?: return
|
||||
val propertyDescriptor = bindingContext.get(BindingContext.PRIMARY_CONSTRUCTOR_PARAMETER, parameter)
|
||||
if (propertyDescriptor != null) {
|
||||
val backingFieldRequired = bindingContext.get(BindingContext.BACKING_FIELD_REQUIRED, propertyDescriptor)
|
||||
highlightProperty(nameIdentifier, propertyDescriptor, java.lang.Boolean.TRUE == backingFieldRequired)
|
||||
highlightProperty(nameIdentifier, propertyDescriptor)
|
||||
}
|
||||
|
||||
super.visitParameter(parameter)
|
||||
@@ -71,22 +70,21 @@ internal class PropertiesHighlightingVisitor(holder: AnnotationHolder, bindingCo
|
||||
|
||||
private fun highlightProperty(
|
||||
elementToHighlight: PsiElement,
|
||||
descriptor: PropertyDescriptor,
|
||||
withBackingField: Boolean) {
|
||||
if (descriptor.isDynamic()) {
|
||||
NameHighlighter.highlightName(holder, elementToHighlight, KotlinHighlightingColors.DYNAMIC_PROPERTY_CALL)
|
||||
return
|
||||
}
|
||||
descriptor: PropertyDescriptor) {
|
||||
|
||||
val isStatic = DescriptorUtils.isStaticDeclaration(descriptor)
|
||||
NameHighlighter.highlightName(
|
||||
holder, elementToHighlight,
|
||||
if (isStatic) KotlinHighlightingColors.PACKAGE_PROPERTY else KotlinHighlightingColors.INSTANCE_PROPERTY)
|
||||
if (descriptor.extensionReceiverParameter != null) {
|
||||
NameHighlighter.highlightName(holder, elementToHighlight, KotlinHighlightingColors.EXTENSION_PROPERTY)
|
||||
}
|
||||
if (withBackingField) {
|
||||
holder.createInfoAnnotation(elementToHighlight, "This property has a backing field").textAttributes = KotlinHighlightingColors.PROPERTY_WITH_BACKING_FIELD
|
||||
val color = when {
|
||||
descriptor.isDynamic() ->
|
||||
DYNAMIC_PROPERTY_CALL
|
||||
|
||||
descriptor.extensionReceiverParameter != null ->
|
||||
EXTENSION_PROPERTY
|
||||
|
||||
DescriptorUtils.isStaticDeclaration(descriptor) ->
|
||||
PACKAGE_PROPERTY
|
||||
|
||||
else ->
|
||||
INSTANCE_PROPERTY
|
||||
}
|
||||
holder.highlightName(elementToHighlight, color)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -72,7 +72,7 @@ fun Int?.bar() {
|
||||
}
|
||||
}
|
||||
|
||||
var <PACKAGE_PROPERTY><MUTABLE_VARIABLE><PROPERTY_WITH_BACKING_FIELD>globalCounter</PROPERTY_WITH_BACKING_FIELD></MUTABLE_VARIABLE></PACKAGE_PROPERTY> : Int = <NUMBER>5</NUMBER>
|
||||
var <PACKAGE_PROPERTY><MUTABLE_VARIABLE>globalCounter</MUTABLE_VARIABLE></PACKAGE_PROPERTY> : Int = <NUMBER>5</NUMBER>
|
||||
<KEYWORD>get</KEYWORD> = <LOCAL_VARIABLE><MUTABLE_VARIABLE><BACKING_FIELD_VARIABLE>field</BACKING_FIELD_VARIABLE></MUTABLE_VARIABLE></LOCAL_VARIABLE>
|
||||
|
||||
<KEYWORD>abstract</KEYWORD> class <ABSTRACT_CLASS>Abstract</ABSTRACT_CLASS> {
|
||||
@@ -141,7 +141,6 @@ var <PACKAGE_PROPERTY><MUTABLE_VARIABLE><PROPERTY_WITH_BACKING_FIELD>globalCount
|
||||
KotlinBundle.message("options.kotlin.attribute.descriptor.captured.variable") to KotlinHighlightingColors.WRAPPED_INTO_REF,
|
||||
KotlinBundle.message("options.kotlin.attribute.descriptor.instance.property") to KotlinHighlightingColors.INSTANCE_PROPERTY,
|
||||
KotlinBundle.message("options.kotlin.attribute.descriptor.package.property") to KotlinHighlightingColors.PACKAGE_PROPERTY,
|
||||
KotlinBundle.message("options.kotlin.attribute.descriptor.property.with.backing") to KotlinHighlightingColors.PROPERTY_WITH_BACKING_FIELD,
|
||||
KotlinBundle.message("options.kotlin.attribute.descriptor.field") to KotlinHighlightingColors.BACKING_FIELD_VARIABLE,
|
||||
KotlinBundle.message("options.kotlin.attribute.descriptor.extension.property") to KotlinHighlightingColors.EXTENSION_PROPERTY,
|
||||
KotlinBundle.message("options.kotlin.attribute.descriptor.dynamic.property") to KotlinHighlightingColors.DYNAMIC_PROPERTY_CALL,
|
||||
|
||||
Vendored
+1
-1
@@ -1,4 +1,4 @@
|
||||
var <info textAttributesKey="KOTLIN_PACKAGE_PROPERTY"><info textAttributesKey="KOTLIN_MUTABLE_VARIABLE"><info descr="This property has a backing field" textAttributesKey="KOTLIN_PROPERTY_WITH_BACKING_FIELD">my</info></info></info> = 0
|
||||
var <info textAttributesKey="KOTLIN_PACKAGE_PROPERTY"><info textAttributesKey="KOTLIN_MUTABLE_VARIABLE">my</info></info> = 0
|
||||
<info textAttributesKey="KOTLIN_KEYWORD">get</info>() = <info textAttributesKey="KOTLIN_BACKING_FIELD_VARIABLE"><info textAttributesKey="KOTLIN_MUTABLE_VARIABLE"><info textAttributesKey="KOTLIN_LOCAL_VARIABLE">field</info></info></info>
|
||||
<info textAttributesKey="KOTLIN_KEYWORD">set</info>(<info textAttributesKey="KOTLIN_PARAMETER">arg</info>) {
|
||||
<info textAttributesKey="KOTLIN_BACKING_FIELD_VARIABLE"><info textAttributesKey="KOTLIN_MUTABLE_VARIABLE"><info textAttributesKey="KOTLIN_LOCAL_VARIABLE">field</info></info></info> = <info textAttributesKey="KOTLIN_PARAMETER">arg</info> + 1
|
||||
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
class <info textAttributesKey="KOTLIN_CLASS">My</info>(val <info textAttributesKey="KOTLIN_INSTANCE_PROPERTY"><info textAttributesKey="KOTLIN_PARAMETER"><info textAttributesKey="KOTLIN_PROPERTY_WITH_BACKING_FIELD">x</info></info></info>: <info textAttributesKey="KOTLIN_CLASS">Int</info>?)
|
||||
class <info textAttributesKey="KOTLIN_CLASS">My</info>(val <info textAttributesKey="KOTLIN_PARAMETER"><info textAttributesKey="KOTLIN_INSTANCE_PROPERTY">x</info></info>: <info textAttributesKey="KOTLIN_CLASS">Int</info>?)
|
||||
|
||||
fun <info textAttributesKey="KOTLIN_CLASS">My</info>?.<info textAttributesKey="KOTLIN_FUNCTION_DECLARATION">foo</info>(): <info textAttributesKey="KOTLIN_CLASS">Int</info> {
|
||||
if (this == null) return 42
|
||||
|
||||
+5
-5
@@ -1,16 +1,16 @@
|
||||
var <info textAttributesKey="KOTLIN_MUTABLE_VARIABLE"><info textAttributesKey="KOTLIN_PROPERTY_WITH_BACKING_FIELD"><info textAttributesKey="KOTLIN_PACKAGE_PROPERTY">x</info></info></info> = 5
|
||||
var <info textAttributesKey="KOTLIN_MUTABLE_VARIABLE"><info textAttributesKey="KOTLIN_PACKAGE_PROPERTY">x</info></info> = 5
|
||||
|
||||
val <info textAttributesKey="KOTLIN_CLASS">Int</info>.<info textAttributesKey="KOTLIN_EXTENSION_PROPERTY"><info textAttributesKey="KOTLIN_PACKAGE_PROPERTY">sq</info></info> : <info textAttributesKey="KOTLIN_CLASS">Int</info>
|
||||
val <info textAttributesKey="KOTLIN_CLASS">Int</info>.<info textAttributesKey="KOTLIN_EXTENSION_PROPERTY">sq</info> : <info textAttributesKey="KOTLIN_CLASS">Int</info>
|
||||
<info textAttributesKey="KOTLIN_KEYWORD">get</info>() {
|
||||
return this * this
|
||||
}
|
||||
|
||||
val <info textAttributesKey="KOTLIN_PACKAGE_PROPERTY"><info textAttributesKey="KOTLIN_PROPERTY_WITH_BACKING_FIELD">y</info></info> : <info textAttributesKey="KOTLIN_CLASS">Int</info> = 1
|
||||
val <info textAttributesKey="KOTLIN_PACKAGE_PROPERTY">y</info> : <info textAttributesKey="KOTLIN_CLASS">Int</info> = 1
|
||||
<info textAttributesKey="KOTLIN_KEYWORD">get</info>() {
|
||||
return 5.<info textAttributesKey="KOTLIN_EXTENSION_PROPERTY"><info textAttributesKey="KOTLIN_PACKAGE_PROPERTY">sq</info></info> + <info textAttributesKey="KOTLIN_LOCAL_VARIABLE"><info textAttributesKey="KOTLIN_BACKING_FIELD_VARIABLE">field</info></info> + <info textAttributesKey="KOTLIN_PACKAGE_PROPERTY"><info textAttributesKey="KOTLIN_MUTABLE_VARIABLE">x</info></info>
|
||||
return 5.<info textAttributesKey="KOTLIN_EXTENSION_PROPERTY">sq</info> + <info textAttributesKey="KOTLIN_LOCAL_VARIABLE"><info textAttributesKey="KOTLIN_BACKING_FIELD_VARIABLE">field</info></info> + <info textAttributesKey="KOTLIN_PACKAGE_PROPERTY"><info textAttributesKey="KOTLIN_MUTABLE_VARIABLE">x</info></info>
|
||||
}
|
||||
|
||||
class <info textAttributesKey="KOTLIN_CLASS">Foo</info>(val <info textAttributesKey="KOTLIN_PARAMETER"><info textAttributesKey="KOTLIN_INSTANCE_PROPERTY"><info textAttributesKey="KOTLIN_PROPERTY_WITH_BACKING_FIELD">a</info></info></info> : <info textAttributesKey="KOTLIN_CLASS">Int</info>, <info textAttributesKey="KOTLIN_PARAMETER">b</info> : <info textAttributesKey="KOTLIN_CLASS">String</info>) {
|
||||
class <info textAttributesKey="KOTLIN_CLASS">Foo</info>(val <info textAttributesKey="KOTLIN_PARAMETER"><info textAttributesKey="KOTLIN_INSTANCE_PROPERTY">a</info></info> : <info textAttributesKey="KOTLIN_CLASS">Int</info>, <info textAttributesKey="KOTLIN_PARAMETER">b</info> : <info textAttributesKey="KOTLIN_CLASS">String</info>) {
|
||||
<info>init</info> {
|
||||
<info textAttributesKey="KOTLIN_PARAMETER">b</info>
|
||||
}
|
||||
|
||||
+3
-3
@@ -3,9 +3,9 @@ interface <info textAttributesKey="KOTLIN_TRAIT">FunctionLike</info> {
|
||||
}
|
||||
}
|
||||
|
||||
var <info textAttributesKey="KOTLIN_PACKAGE_PROPERTY"><info textAttributesKey="KOTLIN_PROPERTY_WITH_BACKING_FIELD"><info textAttributesKey="KOTLIN_MUTABLE_VARIABLE">global</info></info></info> : () -> <info textAttributesKey="KOTLIN_OBJECT">Unit</info> = {}
|
||||
var <info textAttributesKey="KOTLIN_PACKAGE_PROPERTY"><info textAttributesKey="KOTLIN_MUTABLE_VARIABLE">global</info></info> : () -> <info textAttributesKey="KOTLIN_OBJECT">Unit</info> = {}
|
||||
|
||||
val <info textAttributesKey="KOTLIN_CLASS">Int</info>.<info textAttributesKey="KOTLIN_EXTENSION_PROPERTY"><info textAttributesKey="KOTLIN_PACKAGE_PROPERTY">ext</info></info> : () -> <info textAttributesKey="KOTLIN_OBJECT">Unit</info>
|
||||
val <info textAttributesKey="KOTLIN_CLASS">Int</info>.<info textAttributesKey="KOTLIN_EXTENSION_PROPERTY">ext</info> : () -> <info textAttributesKey="KOTLIN_OBJECT">Unit</info>
|
||||
<info textAttributesKey="KOTLIN_KEYWORD">get</info>() {
|
||||
return {}
|
||||
}
|
||||
@@ -14,7 +14,7 @@ fun <info textAttributesKey="KOTLIN_FUNCTION_DECLARATION">foo</info>(<info textA
|
||||
<info textAttributesKey="KOTLIN_PARAMETER"><info textAttributesKey="KOTLIN_VARIABLE_AS_FUNCTION">a</info></info>()
|
||||
<info textAttributesKey="KOTLIN_PARAMETER"><info textAttributesKey="KOTLIN_VARIABLE_AS_FUNCTION_LIKE">functionLike</info></info>()
|
||||
<info textAttributesKey="KOTLIN_PACKAGE_PROPERTY"><info textAttributesKey="KOTLIN_MUTABLE_VARIABLE"><info textAttributesKey="KOTLIN_VARIABLE_AS_FUNCTION">global</info></info></info>()
|
||||
1.<info textAttributesKey="KOTLIN_EXTENSION_PROPERTY"><info textAttributesKey="KOTLIN_PACKAGE_PROPERTY"><info textAttributesKey="KOTLIN_VARIABLE_AS_FUNCTION">ext</info></info></info>();
|
||||
1.<info textAttributesKey="KOTLIN_EXTENSION_PROPERTY"><info textAttributesKey="KOTLIN_VARIABLE_AS_FUNCTION">ext</info></info>();
|
||||
|
||||
{}() //should not be highlighted as "calling variable as function"!
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user