mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-04-19 04:51:24 +07:00
Java: sensibly parse non-sealed modifier on local class and provide better error message (IDEA-342500)
GitOrigin-RevId: 574a5d9c31e5823127227622adaefaaea224b247
This commit is contained in:
committed by
intellij-monorepo-bot
parent
98d3ab7fec
commit
3e0ed000da
@@ -420,7 +420,7 @@ public class BasicDeclarationParser {
|
||||
PsiKeyword.SEALED.equals(builder.getTokenText());
|
||||
}
|
||||
|
||||
private static boolean isNonSealedToken(PsiBuilder builder, IElementType tokenType) {
|
||||
static boolean isNonSealedToken(PsiBuilder builder, IElementType tokenType) {
|
||||
if (!getLanguageLevel(builder).isAtLeast(LanguageLevel.JDK_17) ||
|
||||
tokenType != JavaTokenType.IDENTIFIER ||
|
||||
!"non".equals(builder.getTokenText()) ||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// Copyright 2000-2023 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
|
||||
// Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
|
||||
package com.intellij.lang.java.parser;
|
||||
|
||||
import com.intellij.core.JavaPsiBundle;
|
||||
@@ -180,12 +180,13 @@ public class BasicStatementParser {
|
||||
}
|
||||
else if (tokenType == JavaTokenType.IDENTIFIER || tokenType == JavaTokenType.AT) {
|
||||
PsiBuilder.Marker refPos = builder.mark();
|
||||
boolean nonSealed = BasicDeclarationParser.isNonSealedToken(builder, tokenType);
|
||||
myParser.getDeclarationParser().parseAnnotations(builder);
|
||||
skipQualifiedName(builder);
|
||||
IElementType suspectedLT = builder.getTokenType(), next = builder.lookAhead(1);
|
||||
IElementType current = builder.getTokenType(), next = builder.lookAhead(1);
|
||||
refPos.rollbackTo();
|
||||
|
||||
if (suspectedLT == JavaTokenType.LT || suspectedLT == JavaTokenType.DOT && next == JavaTokenType.AT) {
|
||||
if (current == JavaTokenType.LT || current == JavaTokenType.DOT && next == JavaTokenType.AT || nonSealed) {
|
||||
PsiBuilder.Marker declStatement = builder.mark();
|
||||
|
||||
if (myParser.getDeclarationParser().parse(builder, BasicDeclarationParser.BaseContext.CODE_BLOCK) != null) {
|
||||
@@ -194,7 +195,7 @@ public class BasicStatementParser {
|
||||
}
|
||||
|
||||
BasicReferenceParser.TypeInfo type = myParser.getReferenceParser().parseTypeInfo(builder, 0);
|
||||
if (suspectedLT == JavaTokenType.LT && (type == null || !type.isParameterized)) {
|
||||
if (current == JavaTokenType.LT && (type == null || !type.isParameterized)) {
|
||||
declStatement.rollbackTo();
|
||||
}
|
||||
else if (type == null || builder.getTokenType() != JavaTokenType.DOUBLE_COLON) {
|
||||
|
||||
Reference in New Issue
Block a user