Java: basic support for Valhalla Value Classes (IDEA-364548)

GitOrigin-RevId: 93b0394866aae35772ccc90e7de822af8a94c6ce
This commit is contained in:
Bas Leijdekkers
2024-12-18 18:05:29 +00:00
committed by intellij-monorepo-bot
parent 36b258bc98
commit 2b32d9bb56
41 changed files with 526 additions and 148 deletions
@@ -437,6 +437,12 @@ public class BasicDeclarationParser {
PsiKeyword.SEALED.equals(builder.getTokenText());
}
private static boolean isValueToken(PsiBuilder builder, IElementType tokenType) {
return JavaFeature.VALHALLA_VALUE_CLASSES.isSufficient(getLanguageLevel(builder)) &&
tokenType == JavaTokenType.IDENTIFIER &&
PsiKeyword.VALUE.equals(builder.getTokenText());
}
static boolean isNonSealedToken(PsiBuilder builder, IElementType tokenType) {
if (!JavaFeature.SEALED_CLASSES.isSufficient(getLanguageLevel(builder)) ||
tokenType != JavaTokenType.IDENTIFIER ||
@@ -458,14 +464,18 @@ public class BasicDeclarationParser {
}
@NotNull
public Pair<PsiBuilder.Marker, Boolean> parseModifierList(final PsiBuilder builder, final TokenSet modifiers) {
public Pair<PsiBuilder.Marker, Boolean> parseModifierList(PsiBuilder builder, TokenSet modifiers) {
final PsiBuilder.Marker modList = builder.mark();
boolean isEmpty = true;
while (true) {
IElementType tokenType = builder.getTokenType();
if (tokenType == null) break;
if (isSealedToken(builder, tokenType)) {
if (isValueToken(builder, tokenType)) {
builder.remapCurrentToken(JavaTokenType.VALUE_KEYWORD);
tokenType = JavaTokenType.VALUE_KEYWORD;
}
else if (isSealedToken(builder, tokenType)) {
builder.remapCurrentToken(JavaTokenType.SEALED_KEYWORD);
tokenType = JavaTokenType.SEALED_KEYWORD;
}
@@ -33,7 +33,7 @@ public interface BasicElementTypes extends JavaTokenType, JavaDocTokenType, Basi
VOLATILE_KEYWORD, WHILE_KEYWORD,
OPEN_KEYWORD, MODULE_KEYWORD, REQUIRES_KEYWORD, EXPORTS_KEYWORD, OPENS_KEYWORD, USES_KEYWORD, PROVIDES_KEYWORD,
TRANSITIVE_KEYWORD, TO_KEYWORD, WITH_KEYWORD, VAR_KEYWORD, YIELD_KEYWORD, RECORD_KEYWORD, SEALED_KEYWORD, PERMITS_KEYWORD,
NON_SEALED_KEYWORD, WHEN_KEYWORD
NON_SEALED_KEYWORD, WHEN_KEYWORD, VALUE_KEYWORD
);
TokenSet BASIC_LITERAL_BIT_SET = TokenSet.create(TRUE_KEYWORD, FALSE_KEYWORD, NULL_KEYWORD);
@@ -45,7 +45,8 @@ public interface BasicElementTypes extends JavaTokenType, JavaDocTokenType, Basi
TokenSet BASIC_MODIFIER_BIT_SET = TokenSet.create(
PUBLIC_KEYWORD, PROTECTED_KEYWORD, PRIVATE_KEYWORD, STATIC_KEYWORD, ABSTRACT_KEYWORD, FINAL_KEYWORD, NATIVE_KEYWORD,
SYNCHRONIZED_KEYWORD, STRICTFP_KEYWORD, TRANSIENT_KEYWORD, VOLATILE_KEYWORD, DEFAULT_KEYWORD, SEALED_KEYWORD, NON_SEALED_KEYWORD);
SYNCHRONIZED_KEYWORD, STRICTFP_KEYWORD, TRANSIENT_KEYWORD, VOLATILE_KEYWORD, DEFAULT_KEYWORD, SEALED_KEYWORD, NON_SEALED_KEYWORD,
VALUE_KEYWORD);
TokenSet BASIC_PRIMITIVE_TYPE_BIT_SET = TokenSet.create(
BOOLEAN_KEYWORD, BYTE_KEYWORD, SHORT_KEYWORD, INT_KEYWORD, LONG_KEYWORD, CHAR_KEYWORD, FLOAT_KEYWORD, DOUBLE_KEYWORD, VOID_KEYWORD);