[java-rd] IDEA-333104 IJ-CR-115518 fix cases when highlighting get null in parents

- added comments

GitOrigin-RevId: 1b458215df3cddb2111f71e1c95e4973fd325a8f
This commit is contained in:
Mikhail Pyltsin
2023-09-26 10:47:18 +02:00
committed by intellij-monorepo-bot
parent 2a7eea18da
commit d9352e003e
2 changed files with 22 additions and 11 deletions

View File

@@ -5,6 +5,13 @@ import com.intellij.psi.JavaDocTokenType;
import com.intellij.psi.JavaTokenType;
import com.intellij.psi.tree.TokenSet;
/**
* The BasicElementTypes interface represents a collection of basic element types used in fronback java modules.
* {@link TokenSet} is used for set, which contains `basic` types, which are not used in hierarchy.
* for other sets {@link BasicJavaTokenSet} is used.
*
* @see BasicJavaTokenSet
*/
public interface BasicElementTypes extends JavaTokenType, JavaDocTokenType, BasicJavaElementType, BasicJavaDocElementType {
TokenSet BASIC_JAVA_PLAIN_COMMENT_BIT_SET = TokenSet.create(END_OF_LINE_COMMENT, C_STYLE_COMMENT);
@@ -12,8 +19,6 @@ public interface BasicElementTypes extends JavaTokenType, JavaDocTokenType, Basi
BasicJavaTokenSet.orSet(BasicJavaTokenSet.create(BASIC_JAVA_PLAIN_COMMENT_BIT_SET), BasicJavaTokenSet.create(DOC_COMMENT));
BasicJavaTokenSet BASIC_JAVA_COMMENT_OR_WHITESPACE_BIT_SET =
BasicJavaTokenSet.orSet(BasicJavaTokenSet.create(WHITE_SPACE), BASIC_JAVA_COMMENT_BIT_SET);
//token set, because it is keywords
TokenSet BASIC_KEYWORD_BIT_SET = TokenSet.create(
ABSTRACT_KEYWORD, ASSERT_KEYWORD, BOOLEAN_KEYWORD, BREAK_KEYWORD, BYTE_KEYWORD, CASE_KEYWORD, CATCH_KEYWORD, CHAR_KEYWORD,
CLASS_KEYWORD, CONST_KEYWORD, CONTINUE_KEYWORD, DEFAULT_KEYWORD, DO_KEYWORD, DOUBLE_KEYWORD, ELSE_KEYWORD, ENUM_KEYWORD,
@@ -27,10 +32,8 @@ public interface BasicElementTypes extends JavaTokenType, JavaDocTokenType, Basi
NON_SEALED_KEYWORD, WHEN_KEYWORD
);
//token set, because it is keywords
TokenSet BASIC_LITERAL_BIT_SET = TokenSet.create(TRUE_KEYWORD, FALSE_KEYWORD, NULL_KEYWORD);
//token set, because it is keywords
TokenSet BASIC_OPERATION_BIT_SET = TokenSet.create(
EQ, GT, LT, EXCL, TILDE, QUEST, COLON, PLUS, MINUS, ASTERISK, DIV, AND, OR, XOR,
PERC, EQEQ, LE, GE, NE, ANDAND, OROR, PLUSPLUS, MINUSMINUS, LTLT, GTGT, GTGTGT,
@@ -96,21 +99,15 @@ public interface BasicElementTypes extends JavaTokenType, JavaDocTokenType, Basi
BasicJavaTokenSet BASIC_FULL_MEMBER_BIT_SET = BasicJavaTokenSet.orSet(BASIC_MEMBER_BIT_SET, BasicJavaTokenSet.create(
BASIC_CLASS_INITIALIZER));
//token set, because it is literals
TokenSet BASIC_INTEGER_LITERALS = TokenSet.create(INTEGER_LITERAL, LONG_LITERAL);
//token set, because it is literals
TokenSet BASIC_REAL_LITERALS = TokenSet.create(FLOAT_LITERAL, DOUBLE_LITERAL);
//token set, because it is literals
TokenSet BASIC_STRING_LITERALS = TokenSet.create(STRING_LITERAL, TEXT_BLOCK_LITERAL);
//token set, because it is literals
TokenSet BASIC_TEXT_LITERALS = TokenSet.create(STRING_LITERAL, TEXT_BLOCK_LITERAL, CHARACTER_LITERAL);
//token set, because it is literals
TokenSet BASIC_STRING_TEMPLATE_FRAGMENTS =
TokenSet.create(STRING_TEMPLATE_BEGIN, STRING_TEMPLATE_MID, STRING_TEMPLATE_END,
TEXT_BLOCK_TEMPLATE_BEGIN, TEXT_BLOCK_TEMPLATE_MID, TEXT_BLOCK_TEMPLATE_END);
TEXT_BLOCK_TEMPLATE_BEGIN, TEXT_BLOCK_TEMPLATE_MID, TEXT_BLOCK_TEMPLATE_END);
//token set, because it is literals
TokenSet BASIC_ALL_LITERALS =
TokenSet.orSet(BASIC_INTEGER_LITERALS, BASIC_REAL_LITERALS, BASIC_TEXT_LITERALS, BASIC_LITERAL_BIT_SET);
}

View File

@@ -2,6 +2,7 @@
package com.intellij.psi.impl.source;
import com.intellij.psi.tree.IElementType;
import com.intellij.psi.tree.ParentProviderElementType;
import com.intellij.psi.tree.TokenSet;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@@ -9,6 +10,13 @@ import org.jetbrains.annotations.Nullable;
import java.util.Arrays;
import java.util.Set;
/**
* A utility class, analogue {@link TokenSet}.
* The main purpose is to check if a given token type is present in the token set.
* The main difference is that this class supports hierarchy with {@link ParentProviderElementType}
* This class shouldn't be used in cases, when it needs to get all elements from this set, because in this case
* iteration through all loaded IElementType will be performed
*/
public final class BasicJavaTokenSet {
private final TokenSet myTokenSet;
@@ -21,6 +29,12 @@ public final class BasicJavaTokenSet {
return BasicJavaAstTreeUtil.is(iElementType, myTokenSet);
}
/**
*
* @return The TokenSet, which can be used to check that it contains some elements.
* Not use this method if {@link TokenSet#getTypes()} will be used on this set,
* in this case it is better to create TokenSet from values
*/
public TokenSet toTokenSet() {
return TokenSet.forAllMatching(t -> this.contains(t));
}