diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/KotlinBundle.properties b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/KotlinBundle.properties index f76a6a1042b..3d5d73b295c 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/KotlinBundle.properties +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/KotlinBundle.properties @@ -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 diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/highlighter/KotlinHighlightingColors.java b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/highlighter/KotlinHighlightingColors.java index 7d686ed9d55..a4ce8bd9cc3 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/highlighter/KotlinHighlightingColors.java +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/highlighter/KotlinHighlightingColors.java @@ -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"); diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/highlighter/PropertiesHighlightingVisitor.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/highlighter/PropertiesHighlightingVisitor.kt index 7c55b2b605d..016c139434b 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/highlighter/PropertiesHighlightingVisitor.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/highlighter/PropertiesHighlightingVisitor.kt @@ -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) } } diff --git a/idea/src/org/jetbrains/kotlin/idea/highlighter/KotlinColorSettingsPage.kt b/idea/src/org/jetbrains/kotlin/idea/highlighter/KotlinColorSettingsPage.kt index e5b3c0a0a5b..822995d1f49 100644 --- a/idea/src/org/jetbrains/kotlin/idea/highlighter/KotlinColorSettingsPage.kt +++ b/idea/src/org/jetbrains/kotlin/idea/highlighter/KotlinColorSettingsPage.kt @@ -72,7 +72,7 @@ fun Int?.bar() { } } -var globalCounter : Int = 5 +var globalCounter : Int = 5 get = field abstract class Abstract { @@ -141,7 +141,6 @@ var 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, diff --git a/idea/testData/highlighter/Field.kt b/idea/testData/highlighter/Field.kt index 44d89c86b83..77d9154a48c 100644 --- a/idea/testData/highlighter/Field.kt +++ b/idea/testData/highlighter/Field.kt @@ -1,4 +1,4 @@ -var my = 0 +var my = 0 get() = field set(arg) { field = arg + 1 diff --git a/idea/testData/highlighter/SmartCast.kt b/idea/testData/highlighter/SmartCast.kt index 4c8191d3830..a696d5ad4c2 100644 --- a/idea/testData/highlighter/SmartCast.kt +++ b/idea/testData/highlighter/SmartCast.kt @@ -1,4 +1,4 @@ -class My(val x: Int?) +class My(val x: Int?) fun My?.foo(): Int { if (this == null) return 42 diff --git a/idea/testData/highlighter/Variables.kt b/idea/testData/highlighter/Variables.kt index 9f857031533..3d09249b51c 100644 --- a/idea/testData/highlighter/Variables.kt +++ b/idea/testData/highlighter/Variables.kt @@ -1,16 +1,16 @@ -var x = 5 +var x = 5 -val Int.sq : Int +val Int.sq : Int get() { return this * this } -val y : Int = 1 +val y : Int = 1 get() { - return 5.sq + field + x + return 5.sq + field + x } -class Foo(val a : Int, b : String) { +class Foo(val a : Int, b : String) { init { b } diff --git a/idea/testData/highlighter/VariablesAsFunctions.kt b/idea/testData/highlighter/VariablesAsFunctions.kt index e6ba967f55a..3beb661c09f 100644 --- a/idea/testData/highlighter/VariablesAsFunctions.kt +++ b/idea/testData/highlighter/VariablesAsFunctions.kt @@ -3,9 +3,9 @@ interface FunctionLike { } } -var global : () -> Unit = {} +var global : () -> Unit = {} -val Int.ext : () -> Unit +val Int.ext : () -> Unit get() { return {} } @@ -14,7 +14,7 @@ fun foo(a() functionLike() global() - 1.ext(); + 1.ext(); {}() //should not be highlighted as "calling variable as function"! }