diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/annotator/GroovyAnnotator.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/annotator/GroovyAnnotator.java
index ded4e33da138..0c80b0d05c5d 100644
--- a/plugins/groovy/src/org/jetbrains/plugins/groovy/annotator/GroovyAnnotator.java
+++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/annotator/GroovyAnnotator.java
@@ -88,6 +88,7 @@ import org.jetbrains.plugins.groovy.lang.psi.impl.statements.expressions.TypesUt
import org.jetbrains.plugins.groovy.lang.psi.impl.synthetic.GrLightParameter;
import org.jetbrains.plugins.groovy.lang.psi.impl.synthetic.GroovyScriptClass;
import org.jetbrains.plugins.groovy.lang.psi.impl.types.GrClosureSignatureUtil;
+import org.jetbrains.plugins.groovy.lang.psi.util.GroovyPropertyUtils;
import org.jetbrains.plugins.groovy.lang.psi.util.PsiUtil;
import org.jetbrains.plugins.groovy.lang.resolve.ResolveUtil;
import org.jetbrains.plugins.groovy.lang.resolve.noncode.GrInheritConstructorContributor;
@@ -1439,12 +1440,22 @@ public class GroovyAnnotator extends GroovyElementVisitor implements Annotator {
final PsiElement refNameElement = getElementToHighlight(refExpr);
Annotation annotation = holder.createInfoAnnotation(refNameElement, null);
- if (member instanceof PsiField || member instanceof GrAccessorMethod) {
+ if (member instanceof PsiField) {
annotation.setTextAttributes(isStatic ? DefaultHighlighter.STATIC_FIELD : DefaultHighlighter.INSTANCE_FIELD);
return;
}
+ else if (member instanceof GrAccessorMethod) {
+ annotation.setTextAttributes(isStatic ? DefaultHighlighter.STATIC_PROPERTY_REFERENCE : DefaultHighlighter.INSTANCE_PROPERTY_REFERENCE);
+ return;
+ }
if (member instanceof PsiMethod) {
- annotation.setTextAttributes(!isStatic ? DefaultHighlighter.METHOD_CALL : DefaultHighlighter.STATIC_METHOD_ACCESS);
+ if (GroovyPropertyUtils.isSimplePropertyAccessor((PsiMethod)member)) {
+ annotation
+ .setTextAttributes(isStatic ? DefaultHighlighter.STATIC_PROPERTY_REFERENCE : DefaultHighlighter.INSTANCE_PROPERTY_REFERENCE);
+ }
+ else {
+ annotation.setTextAttributes(isStatic ? DefaultHighlighter.STATIC_METHOD_ACCESS : DefaultHighlighter.METHOD_CALL);
+ }
}
if (member instanceof PsiClass) {
highligtClassReference(holder, refExpr);
diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/highlighter/DefaultHighlighter.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/highlighter/DefaultHighlighter.java
index ccd8127030bb..e8ba1f3f4142 100644
--- a/plugins/groovy/src/org/jetbrains/plugins/groovy/highlighter/DefaultHighlighter.java
+++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/highlighter/DefaultHighlighter.java
@@ -76,7 +76,10 @@ public class DefaultHighlighter {
static final String STATIC_METHOD_ACCESS_ID = "Static method access";
@NonNls
static final String CLASS_REFERENCE_ID = "Class";
-
+ @NonNls
+ static final String INSTANCE_PROPERTY_REFERENCE_ID = "Instance property reference ID";
+ @NonNls
+ static final String STATIC_PROPERTY_REFERENCE_ID = "Static property reference ID";
@NonNls
static final String MAP_KEY_ID = "Map key";
@@ -115,6 +118,18 @@ public class DefaultHighlighter {
public static TextAttributesKey CLASS_REFERENCE =
TextAttributesKey.createTextAttributesKey(CLASS_REFERENCE_ID, HighlighterColors.TEXT.getDefaultAttributes().clone());
+ public static final TextAttributes INSTANCE_PROPERTY_REFERENCE_ATTRIBUTES = INSTANCE_FIELD.getDefaultAttributes().clone();
+ public static final TextAttributes STATIC_PROPERTY_REFERENCE_ATTRIBUTES = STATIC_FIELD.getDefaultAttributes().clone();
+ static {
+ INSTANCE_PROPERTY_REFERENCE_ATTRIBUTES.setFontType(Font.PLAIN);
+ STATIC_PROPERTY_REFERENCE_ATTRIBUTES.setFontType(Font.ITALIC);
+ }
+ public static TextAttributesKey INSTANCE_PROPERTY_REFERENCE =
+ TextAttributesKey.createTextAttributesKey(INSTANCE_PROPERTY_REFERENCE_ID, INSTANCE_PROPERTY_REFERENCE_ATTRIBUTES);
+
+ public static TextAttributesKey STATIC_PROPERTY_REFERENCE =
+ TextAttributesKey.createTextAttributesKey(STATIC_PROPERTY_REFERENCE_ID, STATIC_PROPERTY_REFERENCE_ATTRIBUTES);
+
public static final TextAttributes KEYWORD_ATTRIBUTES = SyntaxHighlighterColors.KEYWORD.getDefaultAttributes().clone();
static{
diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/highlighter/GroovyColorsAndFontsPage.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/highlighter/GroovyColorsAndFontsPage.java
index 194a5318b54a..46d7d091a58d 100644
--- a/plugins/groovy/src/org/jetbrains/plugins/groovy/highlighter/GroovyColorsAndFontsPage.java
+++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/highlighter/GroovyColorsAndFontsPage.java
@@ -72,6 +72,8 @@ public class GroovyColorsAndFontsPage implements ColorSettingsPage {
new AttributesDescriptor(DefaultHighlighter.INSTANCE_FIELD_ID, DefaultHighlighter.INSTANCE_FIELD),
new AttributesDescriptor(DefaultHighlighter.CLASS_REFERENCE_ID, DefaultHighlighter.CLASS_REFERENCE),
new AttributesDescriptor(DefaultHighlighter.MAP_KEY_ID, DefaultHighlighter.MAP_KEY),
+ new AttributesDescriptor(DefaultHighlighter.INSTANCE_PROPERTY_REFERENCE_ID, DefaultHighlighter.INSTANCE_PROPERTY_REFERENCE),
+ new AttributesDescriptor(DefaultHighlighter.STATIC_PROPERTY_REFERENCE_ID, DefaultHighlighter.STATIC_PROPERTY_REFERENCE),
};
@NotNull
@@ -111,7 +113,8 @@ public class GroovyColorsAndFontsPage implements ColorSettingsPage {
"'JetBrains'.matches(/Jw+Bw+/) \n" +
"def x=1 + unresolved\n" +
"def f1 = []\n" +
- "File f=['path']"
+ "File f=['path']\n" +
+ "print new Demo().property"
;
}
@@ -128,6 +131,8 @@ public class GroovyColorsAndFontsPage implements ColorSettingsPage {
map.put("classref", DefaultHighlighter.CLASS_REFERENCE);
map.put("literal", DefaultHighlighter.LITERAL_CONVERSION);
map.put("mapkey", DefaultHighlighter.MAP_KEY);
+ map.put("prop", DefaultHighlighter.INSTANCE_PROPERTY_REFERENCE);
+ map.put("staticprop", DefaultHighlighter.STATIC_PROPERTY_REFERENCE);
return map;
}
}