From 73ccfbbf75af6c49aa9c3b3b859e28ebea393113 Mon Sep 17 00:00:00 2001 From: peter Date: Fri, 30 Jul 2010 10:37:33 +0100 Subject: [PATCH] highlight converted literal braces --- .../groovy/annotator/GroovyAnnotator.java | 16 ++++++++++++++++ .../groovy/highlighter/DefaultHighlighter.java | 7 +++++++ .../highlighter/GroovyColorsAndFontsPage.java | 6 +++++- 3 files changed, 28 insertions(+), 1 deletion(-) 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 e174566e5aa2..92338d73e140 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/annotator/GroovyAnnotator.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/annotator/GroovyAnnotator.java @@ -84,6 +84,7 @@ import org.jetbrains.plugins.groovy.lang.psi.api.toplevel.imports.GrImportStatem import org.jetbrains.plugins.groovy.lang.psi.api.toplevel.packaging.GrPackageDefinition; import org.jetbrains.plugins.groovy.lang.psi.api.types.*; import org.jetbrains.plugins.groovy.lang.psi.api.util.GrVariableDeclarationOwner; +import org.jetbrains.plugins.groovy.lang.psi.expectedTypes.GroovyExpectedTypesProvider; import org.jetbrains.plugins.groovy.lang.psi.impl.GrClosureType; import org.jetbrains.plugins.groovy.lang.psi.impl.statements.expressions.TypesUtil; import org.jetbrains.plugins.groovy.lang.psi.impl.synthetic.GroovyScriptClass; @@ -441,6 +442,21 @@ public class GroovyAnnotator extends GroovyElementVisitor implements Annotator { @Override public void visitListOrMap(GrListOrMap listOrMap) { + for (PsiType type : GroovyExpectedTypesProvider.getDefaultExpectedTypes(listOrMap)) { + if (type instanceof PsiClassType && + !InheritanceUtil.isInheritor(type, CommonClassNames.JAVA_LANG_ITERABLE) && + !InheritanceUtil.isInheritor(type, CommonClassNames.JAVA_UTIL_MAP)) { + final PsiElement startToken = listOrMap.getFirstChild(); + if (startToken != null && startToken.getNode().getElementType() == GroovyTokenTypes.mLBRACK) { + myHolder.createInfoAnnotation(startToken, null).setTextAttributes(DefaultHighlighter.LITERAL_CONVERSION); + } + final PsiElement endToken = listOrMap.getLastChild(); + if (endToken != null && endToken.getNode().getElementType() == GroovyTokenTypes.mRBRACK) { + myHolder.createInfoAnnotation(endToken, null).setTextAttributes(DefaultHighlighter.LITERAL_CONVERSION); + } + } + } + MultiMap map = new MultiMap(); for (GrNamedArgument element : listOrMap.getNamedArguments()) { 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 a3b5dd8321e9..282c86da459a 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/highlighter/DefaultHighlighter.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/highlighter/DefaultHighlighter.java @@ -76,6 +76,7 @@ public class DefaultHighlighter { @NonNls static final String UNRESOLVED_ACCESS_ID = "Unresolved reference access"; + static final String LITERAL_CONVERSION_ID = "List/map to object conversion"; public static TextAttributesKey LINE_COMMENT = TextAttributesKey.createTextAttributesKey(LINE_COMMENT_ID, @@ -148,7 +149,13 @@ public class DefaultHighlighter { UNRESOLVED_ACCESS_ATTRIBUTES.setEffectColor(Color.GRAY); UNRESOLVED_ACCESS_ATTRIBUTES.setEffectType(EffectType.LINE_UNDERSCORE); } + public static final TextAttributes LITERAL_CONVERSION_ATTRIBUTES = HighlighterColors.TEXT.getDefaultAttributes().clone(); + static{ + LITERAL_CONVERSION_ATTRIBUTES.setForegroundColor(Color.BLUE); + LITERAL_CONVERSION_ATTRIBUTES.setFontType(Font.BOLD); + } public static TextAttributesKey UNRESOLVED_ACCESS = TextAttributesKey.createTextAttributesKey(UNRESOLVED_ACCESS_ID, UNRESOLVED_ACCESS_ATTRIBUTES); + public static TextAttributesKey LITERAL_CONVERSION = TextAttributesKey.createTextAttributesKey(LITERAL_CONVERSION_ID, LITERAL_CONVERSION_ATTRIBUTES); private DefaultHighlighter() { } 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 e9bab50b59a5..ca337285162d 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/highlighter/GroovyColorsAndFontsPage.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/highlighter/GroovyColorsAndFontsPage.java @@ -64,6 +64,7 @@ public class GroovyColorsAndFontsPage implements ColorSettingsPage { new AttributesDescriptor(DefaultHighlighter.BAD_CHARACTER_ID, DefaultHighlighter.BAD_CHARACTER), new AttributesDescriptor(DefaultHighlighter.WRONG_STRING_ID, DefaultHighlighter.WRONG_STRING), new AttributesDescriptor(DefaultHighlighter.UNRESOLVED_ACCESS_ID, DefaultHighlighter.UNRESOLVED_ACCESS), + new AttributesDescriptor(DefaultHighlighter.LITERAL_CONVERSION_ID, DefaultHighlighter.LITERAL_CONVERSION), new AttributesDescriptor(DefaultHighlighter.ANNOTATION_ID, DefaultHighlighter.ANNOTATION), new AttributesDescriptor(DefaultHighlighter.STATIC_FIELD_ID, DefaultHighlighter.STATIC_FIELD), new AttributesDescriptor(DefaultHighlighter.STATIC_FIELD_ID, DefaultHighlighter.INSTANCE_FIELD), @@ -101,7 +102,9 @@ public class GroovyColorsAndFontsPage implements ColorSettingsPage { "Demo.panel.size = " + "Demo.foo(\"123${456}789\".toInteger()) \n" + "'JetBrains'.matches(/Jw+Bw+/) \n" + - "def x=1 + unresolved" + "def x=1 + unresolved\n" + + "def f1 = []\n" + + "File f=['path']" ; } @@ -116,6 +119,7 @@ public class GroovyColorsAndFontsPage implements ColorSettingsPage { map.put("doctag", DefaultHighlighter.DOC_COMMENT_TAG); map.put("unresolved", DefaultHighlighter.UNRESOLVED_ACCESS); map.put("classref", DefaultHighlighter.CLASS_REFERENCE); + map.put("literal", DefaultHighlighter.LITERAL_CONVERSION); return map; }