From 32d96f6a2920b41078d827f093e63febe5be02bf Mon Sep 17 00:00:00 2001 From: Roman Shevchenko Date: Fri, 2 Dec 2016 15:44:26 +0100 Subject: [PATCH] [java] fixes soft keyword highlighting in source files (IDEA-164939) --- .../impl/analysis/HighlightVisitorImpl.java | 6 ++++ .../intellij/lexer/JavaHighlightingLexer.java | 29 ------------------- 2 files changed, 6 insertions(+), 29 deletions(-) diff --git a/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightVisitorImpl.java b/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightVisitorImpl.java index 1d258b485068..8feaf9f4e086 100644 --- a/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightVisitorImpl.java +++ b/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightVisitorImpl.java @@ -22,6 +22,7 @@ import com.intellij.codeInsight.daemon.impl.analysis.HighlightUtil.Feature; import com.intellij.codeInsight.daemon.impl.quickfix.QuickFixAction; import com.intellij.codeInsight.intention.QuickFixFactory; import com.intellij.lang.injection.InjectedLanguageManager; +import com.intellij.lang.java.lexer.JavaLexer; import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.editor.Document; import com.intellij.openapi.editor.colors.TextAttributesScheme; @@ -760,6 +761,11 @@ public class HighlightVisitorImpl extends JavaElementVisitor implements Highligh @Override public void visitKeyword(PsiKeyword keyword) { super.visitKeyword(keyword); + + if (JavaLexer.isSoftKeyword(keyword.getText(), myLanguageLevel)) { + myHolder.add(HighlightInfo.newHighlightInfo(JavaHighlightInfoTypes.JAVA_KEYWORD).range(keyword).create()); + } + PsiElement parent = keyword.getParent(); String text = keyword.getText(); if (parent instanceof PsiModifierList) { diff --git a/java/java-analysis-impl/src/com/intellij/lexer/JavaHighlightingLexer.java b/java/java-analysis-impl/src/com/intellij/lexer/JavaHighlightingLexer.java index 57f672ff1614..3642cd44d5d7 100644 --- a/java/java-analysis-impl/src/com/intellij/lexer/JavaHighlightingLexer.java +++ b/java/java-analysis-impl/src/com/intellij/lexer/JavaHighlightingLexer.java @@ -19,8 +19,6 @@ import com.intellij.lang.java.JavaParserDefinition; import com.intellij.pom.java.LanguageLevel; import com.intellij.psi.JavaDocTokenType; import com.intellij.psi.JavaTokenType; -import com.intellij.psi.PsiKeyword; -import com.intellij.psi.impl.source.tree.ElementType; import com.intellij.psi.impl.source.tree.JavaDocElementType; import com.intellij.psi.tree.IElementType; import org.jetbrains.annotations.NotNull; @@ -29,9 +27,6 @@ import org.jetbrains.annotations.NotNull; * @author max */ public class JavaHighlightingLexer extends LayeredLexer { - private boolean myAtStart = true; - private boolean myModuleInfo = false; - public JavaHighlightingLexer(@NotNull LanguageLevel languageLevel) { super(JavaParserDefinition.createLexer(languageLevel)); @@ -47,28 +42,4 @@ public class JavaHighlightingLexer extends LayeredLexer { docLexer.registerLayer(htmlLexer, JavaDocTokenType.DOC_COMMENT_DATA); registerSelfStoppingLayer(docLexer, new IElementType[]{JavaDocElementType.DOC_COMMENT}, IElementType.EMPTY_ARRAY); } - - @Override - public IElementType getTokenType() { - IElementType t = super.getTokenType(); - - if (myAtStart && !isLayerActive() && !ElementType.JAVA_COMMENT_OR_WHITESPACE_BIT_SET.contains(t)) { - myAtStart = false; - myModuleInfo = t == JavaTokenType.IDENTIFIER && PsiKeyword.MODULE.equals(getTokenText()); - } - - if (myModuleInfo && t == JavaTokenType.IDENTIFIER) { - switch (getTokenText()) { - case PsiKeyword.MODULE: t = JavaTokenType.MODULE_KEYWORD; break; - case PsiKeyword.REQUIRES: t = JavaTokenType.REQUIRES_KEYWORD; break; - case PsiKeyword.EXPORTS: t = JavaTokenType.EXPORTS_KEYWORD; break; - case PsiKeyword.USES: t = JavaTokenType.USES_KEYWORD; break; - case PsiKeyword.PROVIDES: t = JavaTokenType.PROVIDES_KEYWORD; break; - case PsiKeyword.TO: t = JavaTokenType.TO_KEYWORD; break; - case PsiKeyword.WITH: t = JavaTokenType.WITH_KEYWORD; break; - } - } - - return t; - } } \ No newline at end of file