mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-03-22 15:19:59 +07:00
[java, import-module] parsing import module construction (JEP-476) IDEA-355529
GitOrigin-RevId: 3c5334343bf0fa0ec7bfa70674eb7dd08b16d35d
This commit is contained in:
committed by
intellij-monorepo-bot
parent
c06684c79f
commit
143efd3b0f
@@ -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.AbstractBundle;
|
||||
@@ -193,19 +193,32 @@ public class BasicFileParser {
|
||||
PsiBuilder.Marker statement = builder.mark();
|
||||
builder.advanceLexer();
|
||||
|
||||
boolean isStatic = expect(builder, JavaTokenType.STATIC_KEYWORD);
|
||||
IElementType type = isStatic ? myJavaElementTypeContainer.IMPORT_STATIC_STATEMENT :
|
||||
myJavaElementTypeContainer.IMPORT_STATEMENT;
|
||||
|
||||
boolean isOk = myParser.getReferenceParser().parseImportCodeReference(builder, isStatic);
|
||||
if (isOk) {
|
||||
semicolon(builder);
|
||||
}
|
||||
IElementType type = getImportType(builder);
|
||||
boolean isStatic = type == myJavaElementTypeContainer.IMPORT_STATIC_STATEMENT;
|
||||
boolean isModule = type == myJavaElementTypeContainer.IMPORT_MODULE_STATEMENT;
|
||||
boolean isOk = myParser.getReferenceParser().parseImportCodeReference(builder, isStatic, isModule);
|
||||
if (isOk) semicolon(builder);
|
||||
|
||||
done(statement, type, myWhiteSpaceAndCommentSetHolder);
|
||||
return statement;
|
||||
}
|
||||
|
||||
private @NotNull IElementType getImportType(@NotNull PsiBuilder builder) {
|
||||
IElementType type = builder.getTokenType();
|
||||
if (type == JavaTokenType.STATIC_KEYWORD) {
|
||||
builder.advanceLexer();
|
||||
return myJavaElementTypeContainer.IMPORT_STATIC_STATEMENT;
|
||||
}
|
||||
if (type == JavaTokenType.IDENTIFIER &&
|
||||
PsiKeyword.MODULE.equals(builder.getTokenText()) &&
|
||||
builder.lookAhead(1) == JavaTokenType.IDENTIFIER) {
|
||||
builder.remapCurrentToken(JavaTokenType.MODULE_KEYWORD);
|
||||
builder.advanceLexer();
|
||||
return myJavaElementTypeContainer.IMPORT_MODULE_STATEMENT;
|
||||
}
|
||||
return myJavaElementTypeContainer.IMPORT_STATEMENT;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
private static @NlsContexts.ParsingError String error(@NotNull AbstractBundle bundle, @NotNull String errorMessageKey) {
|
||||
return bundle.getMessage(errorMessageKey);
|
||||
|
||||
@@ -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;
|
||||
@@ -112,7 +112,7 @@ public class BasicReferenceParser {
|
||||
return typeInfo;
|
||||
}
|
||||
else if (tokenType == JavaTokenType.IDENTIFIER) {
|
||||
parseJavaCodeReference(builder, isSet(flags, EAT_LAST_DOT), true, false, false, false, isSet(flags, DIAMONDS), typeInfo);
|
||||
parseJavaCodeReference(builder, isSet(flags, EAT_LAST_DOT), true, false, false, false, false, isSet(flags, DIAMONDS), typeInfo);
|
||||
}
|
||||
else if (tokenType == JavaTokenType.VAR_KEYWORD) {
|
||||
builder.advanceLexer();
|
||||
@@ -195,18 +195,19 @@ public class BasicReferenceParser {
|
||||
boolean parameterList,
|
||||
boolean isNew,
|
||||
boolean diamonds) {
|
||||
return parseJavaCodeReference(builder, eatLastDot, parameterList, false, false, isNew, diamonds, new TypeInfo());
|
||||
return parseJavaCodeReference(builder, eatLastDot, parameterList, false, false, false, isNew, diamonds, new TypeInfo());
|
||||
}
|
||||
|
||||
public boolean parseImportCodeReference(PsiBuilder builder, boolean isStatic) {
|
||||
public boolean parseImportCodeReference(PsiBuilder builder, boolean isStatic, boolean isModule) {
|
||||
TypeInfo typeInfo = new TypeInfo();
|
||||
parseJavaCodeReference(builder, true, false, true, isStatic, false, false, typeInfo);
|
||||
parseJavaCodeReference(builder, true, false, true, isStatic, isModule, false, false, typeInfo);
|
||||
return !typeInfo.hasErrors;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
private PsiBuilder.Marker parseJavaCodeReference(PsiBuilder builder, boolean eatLastDot, boolean parameterList, boolean isImport,
|
||||
boolean isStaticImport, boolean isNew, boolean diamonds, TypeInfo typeInfo) {
|
||||
boolean isStaticImport, boolean isModuleImport, boolean isNew, boolean diamonds,
|
||||
TypeInfo typeInfo) {
|
||||
PsiBuilder.Marker refElement = builder.mark();
|
||||
|
||||
myParser.getDeclarationParser().parseAnnotations(builder);
|
||||
@@ -223,7 +224,7 @@ public class BasicReferenceParser {
|
||||
if (parameterList) {
|
||||
typeInfo.isParameterized = parseReferenceParameterList(builder, true, diamonds);
|
||||
}
|
||||
else if (!isStaticImport) {
|
||||
else if (!isStaticImport && !isModuleImport) {
|
||||
emptyElement(builder, myJavaElementTypeContainer.REFERENCE_PARAMETER_LIST);
|
||||
}
|
||||
|
||||
@@ -271,8 +272,15 @@ public class BasicReferenceParser {
|
||||
}
|
||||
}
|
||||
|
||||
refElement.done(isStaticImport ?
|
||||
myJavaElementTypeContainer.IMPORT_STATIC_REFERENCE : myJavaElementTypeContainer.JAVA_CODE_REFERENCE);
|
||||
if (isStaticImport) {
|
||||
refElement.done(myJavaElementTypeContainer.IMPORT_STATIC_REFERENCE);
|
||||
}
|
||||
else if (isModuleImport) {
|
||||
refElement.done(myJavaElementTypeContainer.IMPORT_MODULE_REFERENCE);
|
||||
}
|
||||
else {
|
||||
refElement.done(myJavaElementTypeContainer.JAVA_CODE_REFERENCE);
|
||||
}
|
||||
return refElement;
|
||||
}
|
||||
|
||||
|
||||
@@ -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.psi.impl.source;
|
||||
|
||||
import com.intellij.psi.tree.IElementType;
|
||||
@@ -75,6 +75,8 @@ public abstract class AbstractBasicJavaElementTypeFactory {
|
||||
|
||||
public final IElementType IMPORT_STATIC_STATEMENT;
|
||||
|
||||
public final IElementType IMPORT_MODULE_STATEMENT;
|
||||
|
||||
public final IElementType MODIFIER_LIST;
|
||||
|
||||
public final IElementType ANNOTATION;
|
||||
@@ -85,6 +87,8 @@ public abstract class AbstractBasicJavaElementTypeFactory {
|
||||
|
||||
public final IElementType IMPORT_STATIC_REFERENCE;
|
||||
|
||||
public final IElementType IMPORT_MODULE_REFERENCE;
|
||||
|
||||
public final IElementType TYPE;
|
||||
|
||||
public final IElementType DIAMOND_TYPE;
|
||||
@@ -264,11 +268,13 @@ public abstract class AbstractBasicJavaElementTypeFactory {
|
||||
IElementType IMPORT_LIST,
|
||||
IElementType IMPORT_STATEMENT,
|
||||
IElementType IMPORT_STATIC_STATEMENT,
|
||||
IElementType IMPORT_MODULE_STATEMENT,
|
||||
IElementType MODIFIER_LIST,
|
||||
IElementType ANNOTATION,
|
||||
IElementType NAME_VALUE_PAIR,
|
||||
IElementType LITERAL_EXPRESSION,
|
||||
IElementType IMPORT_STATIC_REFERENCE,
|
||||
IElementType IMPORT_MODULE_REFERENCE,
|
||||
IElementType TYPE,
|
||||
IElementType DIAMOND_TYPE,
|
||||
IElementType REFERENCE_PARAMETER_LIST,
|
||||
@@ -376,11 +382,13 @@ public abstract class AbstractBasicJavaElementTypeFactory {
|
||||
this.IMPORT_LIST = IMPORT_LIST;
|
||||
this.IMPORT_STATEMENT = IMPORT_STATEMENT;
|
||||
this.IMPORT_STATIC_STATEMENT = IMPORT_STATIC_STATEMENT;
|
||||
this.IMPORT_MODULE_STATEMENT = IMPORT_MODULE_STATEMENT;
|
||||
this.MODIFIER_LIST = MODIFIER_LIST;
|
||||
this.ANNOTATION = ANNOTATION;
|
||||
this.NAME_VALUE_PAIR = NAME_VALUE_PAIR;
|
||||
this.LITERAL_EXPRESSION = LITERAL_EXPRESSION;
|
||||
this.IMPORT_STATIC_REFERENCE = IMPORT_STATIC_REFERENCE;
|
||||
this.IMPORT_MODULE_REFERENCE = IMPORT_MODULE_REFERENCE;
|
||||
this.TYPE = TYPE;
|
||||
this.DIAMOND_TYPE = DIAMOND_TYPE;
|
||||
this.REFERENCE_PARAMETER_LIST = REFERENCE_PARAMETER_LIST;
|
||||
|
||||
@@ -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.psi.impl.source;
|
||||
|
||||
import com.intellij.psi.JavaDocTokenType;
|
||||
@@ -95,7 +95,8 @@ public interface BasicElementTypes extends JavaTokenType, JavaDocTokenType, Basi
|
||||
BASIC_PROVIDES_STATEMENT);
|
||||
|
||||
ParentAwareTokenSet BASIC_IMPORT_STATEMENT_BASE_BIT_SET = ParentAwareTokenSet.create(BASIC_IMPORT_STATEMENT,
|
||||
BASIC_IMPORT_STATIC_STATEMENT);
|
||||
BASIC_IMPORT_STATIC_STATEMENT,
|
||||
BASIC_IMPORT_MODULE_STATEMENT);
|
||||
TokenSet BASIC_CLASS_KEYWORD_BIT_SET =
|
||||
TokenSet.create(CLASS_KEYWORD, INTERFACE_KEYWORD, ENUM_KEYWORD, RECORD_KEYWORD);
|
||||
ParentAwareTokenSet BASIC_MEMBER_BIT_SET = ParentAwareTokenSet.create(BASIC_CLASS, BASIC_FIELD, BASIC_ENUM_CONSTANT,
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
// 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.psi.impl.source;
|
||||
|
||||
import com.intellij.lang.*;
|
||||
@@ -40,6 +41,7 @@ public interface BasicJavaElementType {
|
||||
IElementType BASIC_IMPORT_LIST = new IJavaElementType("IMPORT_LIST");
|
||||
IElementType BASIC_IMPORT_STATEMENT = new IJavaElementType("IMPORT_STATEMENT");
|
||||
IElementType BASIC_IMPORT_STATIC_STATEMENT = new IJavaElementType("IMPORT_STATIC_STATEMENT");
|
||||
IElementType BASIC_IMPORT_MODULE_STATEMENT = new IJavaElementType("IMPORT_MODULE_STATEMENT");
|
||||
IElementType BASIC_MODIFIER_LIST = new IJavaElementType("MODIFIER_LIST");
|
||||
IElementType BASIC_ANNOTATION = new IJavaElementType("ANNOTATION");
|
||||
IElementType BASIC_NAME_VALUE_PAIR = new IJavaElementType("NAME_VALUE_PAIR", true);
|
||||
@@ -70,6 +72,7 @@ public interface BasicJavaElementType {
|
||||
IElementType BASIC_PERMITS_LIST = new IJavaElementType("PERMITS_LIST", true);
|
||||
|
||||
IElementType BASIC_IMPORT_STATIC_REFERENCE = new IJavaElementType("IMPORT_STATIC_REFERENCE");
|
||||
IElementType BASIC_IMPORT_MODULE_REFERENCE = new IJavaElementType("IMPORT_MODULE_REFERENCE");
|
||||
IElementType BASIC_TYPE = new IJavaElementType("TYPE");
|
||||
IElementType BASIC_DIAMOND_TYPE = new IJavaElementType("DIAMOND_TYPE");
|
||||
IElementType BASIC_REFERENCE_PARAMETER_LIST = new IJavaElementType("REFERENCE_PARAMETER_LIST", true);
|
||||
|
||||
Reference in New Issue
Block a user