highlight converted literal braces

This commit is contained in:
peter
2010-07-30 13:00:07 +01:00
parent cc40f9dfec
commit 73ccfbbf75
3 changed files with 28 additions and 1 deletions
@@ -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<String, GrNamedArgument> map = new MultiMap<String, GrNamedArgument>();
for (GrNamedArgument element : listOrMap.getNamedArguments()) {
@@ -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() {
}
@@ -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 {
"<classref>Demo</classref>.<statfield>panel</statfield>.size = " +
"<classref>Demo</classref>.<statmet>foo</statmet>(\"123${456}789\".toInteger()) \n" +
"'JetBrains'.matches(/Jw+Bw+/) \n" +
"def x=1 + <unresolved>unresolved</unresolved>"
"def x=1 + <unresolved>unresolved</unresolved>\n" +
"def f1 = []\n" +
"<classref>File</classref> f=<literal>[</literal>'path'<literal>]</literal>"
;
}
@@ -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;
}