/* * Copyright (c) 2004 JetBrains s.r.o. All Rights Reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * -Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * -Redistribution in binary form must reproduct the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the distribution. * * Neither the name of JetBrains or IntelliJ IDEA * may be used to endorse or promote products derived from this software * without specific prior written permission. * * This software is provided "AS IS," without a warranty of any kind. ALL * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES, INCLUDING * ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE * OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. JETBRAINS AND ITS LICENSORS SHALL NOT * BE LIABLE FOR ANY DAMAGES OR LIABILITIES SUFFERED BY LICENSEE AS A RESULT * OF OR RELATING TO USE, MODIFICATION OR DISTRIBUTION OF THE SOFTWARE OR ITS * DERIVATIVES. IN NO EVENT WILL JETBRAINS OR ITS LICENSORS BE LIABLE FOR ANY LOST * REVENUE, PROFIT OR DATA, OR FOR DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, * INCIDENTAL OR PUNITIVE DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY * OF LIABILITY, ARISING OUT OF THE USE OF OR INABILITY TO USE SOFTWARE, EVEN * IF JETBRAINS HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. * */ package com.intellij.ide.highlighter; import com.intellij.lexer.JavaHighlightingLexer; import com.intellij.lexer.Lexer; import com.intellij.openapi.editor.HighlighterColors; import com.intellij.openapi.editor.colors.TextAttributesKey; import com.intellij.openapi.fileTypes.SyntaxHighlighterBase; import com.intellij.pom.java.LanguageLevel; import com.intellij.psi.JavaDocTokenType; import com.intellij.psi.JavaTokenType; import com.intellij.psi.StringEscapesTokenTypes; import com.intellij.psi.tree.IElementType; import com.intellij.psi.tree.java.IJavaElementType; import com.intellij.psi.xml.XmlTokenType; import java.util.HashMap; import java.util.Map; public class JavaFileHighlighter extends SyntaxHighlighterBase { private static Map ourMap1; private static Map ourMap2; private LanguageLevel myLanguageLevel; public JavaFileHighlighter(LanguageLevel languageLevel) { myLanguageLevel = languageLevel; } static { ourMap1 = new HashMap(); ourMap2 = new HashMap(); fillMap(ourMap1, JavaTokenType.KEYWORD_BIT_SET, HighlighterColors.JAVA_KEYWORD); fillMap(ourMap1, JavaTokenType.OPERATION_BIT_SET, HighlighterColors.JAVA_OPERATION_SIGN); fillMap(ourMap1, JavaTokenType.OPERATION_BIT_SET, HighlighterColors.JAVA_OPERATION_SIGN); IElementType[] javadoc = IElementType.enumerate(new IElementType.Predicate() { public boolean matches(IElementType type) { return !(type instanceof IJavaElementType); } }); for (int i = 0; i < javadoc.length; i++) { IElementType type = javadoc[i]; ourMap1.put(type, HighlighterColors.JAVA_DOC_COMMENT); } ourMap1.put(JavaTokenType.INTEGER_LITERAL, HighlighterColors.JAVA_NUMBER); ourMap1.put(JavaTokenType.LONG_LITERAL, HighlighterColors.JAVA_NUMBER); ourMap1.put(JavaTokenType.FLOAT_LITERAL, HighlighterColors.JAVA_NUMBER); ourMap1.put(JavaTokenType.DOUBLE_LITERAL, HighlighterColors.JAVA_NUMBER); ourMap1.put(JavaTokenType.STRING_LITERAL, HighlighterColors.JAVA_STRING); ourMap1.put(StringEscapesTokenTypes.VALID_STRING_ESCAPE_TOKEN, HighlighterColors.JAVA_VALID_STRING_ESCAPE); ourMap1.put(StringEscapesTokenTypes.INVALID_STRING_ESCAPE_TOKEN, HighlighterColors.JAVA_INVALID_STRING_ESCAPE); ourMap1.put(JavaTokenType.CHARACTER_LITERAL, HighlighterColors.JAVA_STRING); ourMap1.put(JavaTokenType.LPARENTH, HighlighterColors.JAVA_PARENTHS); ourMap1.put(JavaTokenType.RPARENTH, HighlighterColors.JAVA_PARENTHS); ourMap1.put(JavaTokenType.LBRACE, HighlighterColors.JAVA_BRACES); ourMap1.put(JavaTokenType.RBRACE, HighlighterColors.JAVA_BRACES); ourMap1.put(JavaTokenType.LBRACKET, HighlighterColors.JAVA_BRACKETS); ourMap1.put(JavaTokenType.RBRACKET, HighlighterColors.JAVA_BRACKETS); ourMap1.put(JavaTokenType.COMMA, HighlighterColors.JAVA_COMMA); ourMap1.put(JavaTokenType.DOT, HighlighterColors.JAVA_DOT); ourMap1.put(JavaTokenType.SEMICOLON, HighlighterColors.JAVA_SEMICOLON); //ourMap1[JavaTokenType.BOOLEAN_LITERAL] = HighlighterColors.JAVA_KEYWORD; //ourMap1[JavaTokenType.NULL_LITERAL] = HighlighterColors.JAVA_KEYWORD; ourMap1.put(JavaTokenType.C_STYLE_COMMENT, HighlighterColors.JAVA_BLOCK_COMMENT); ourMap1.put(JavaTokenType.DOC_COMMENT, HighlighterColors.JAVA_DOC_COMMENT); ourMap1.put(JavaTokenType.END_OF_LINE_COMMENT, HighlighterColors.JAVA_LINE_COMMENT); ourMap1.put(JavaTokenType.BAD_CHARACTER, HighlighterColors.BAD_CHARACTER); ourMap1.put(JavaDocTokenType.DOC_TAG_NAME, HighlighterColors.JAVA_DOC_COMMENT); ourMap2.put(JavaDocTokenType.DOC_TAG_NAME, HighlighterColors.JAVA_DOC_TAG); IElementType[] javaDocMarkup = new IElementType[]{XmlTokenType.XML_START_TAG_START, XmlTokenType.XML_END_TAG_START, XmlTokenType.XML_TAG_END, XmlTokenType.XML_EMPTY_ELEMENT_END, XmlTokenType.TAG_WHITE_SPACE, XmlTokenType.XML_TAG_NAME, XmlTokenType.XML_ATTRIBUTE_VALUE_TOKEN, XmlTokenType.XML_ATTRIBUTE_VALUE_START_DELIMITER, XmlTokenType.XML_ATTRIBUTE_VALUE_END_DELIMITER, XmlTokenType.XML_EQ}; for (int i = 0; i < javaDocMarkup.length; i++) { IElementType idx = javaDocMarkup[i]; ourMap1.put(idx, HighlighterColors.JAVA_DOC_COMMENT); ourMap2.put(idx, HighlighterColors.JAVA_DOC_MARKUP); } } public Lexer getHighlightingLexer() { return new JavaHighlightingLexer(myLanguageLevel); } public TextAttributesKey[] getTokenHighlights(IElementType tokenType) { return pack(ourMap1.get(tokenType), ourMap2.get(tokenType)); } }