mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
[java] IDEA-365317 integrate JavaElementType
GitOrigin-RevId: c383a28a2aa8a36ea6f80dce165e443ea28a8ce5
This commit is contained in:
committed by
intellij-monorepo-bot
parent
de186d1625
commit
e34ee2c23e
+6
-250
@@ -1,50 +1,19 @@
|
||||
// Copyright 2000-2025 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.java.syntax.element.JavaSyntaxTokenType;
|
||||
import com.intellij.java.syntax.lexer.JavaLexer;
|
||||
import com.intellij.java.syntax.parser.JavaParser;
|
||||
import com.intellij.java.syntax.parser.ReferenceParser;
|
||||
import com.intellij.lang.ASTNode;
|
||||
import com.intellij.lang.Language;
|
||||
import com.intellij.lang.LighterASTNode;
|
||||
import com.intellij.lang.LighterLazyParseableNode;
|
||||
import com.intellij.lang.java.JavaLanguage;
|
||||
import com.intellij.lang.java.parser.BasicJavaParserUtil;
|
||||
import com.intellij.lang.java.parser.PsiSyntaxBuilderWithLanguageLevel;
|
||||
import com.intellij.openapi.progress.ProgressManager;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.platform.syntax.lexer.Lexer;
|
||||
import com.intellij.platform.syntax.lexer.TokenList;
|
||||
import com.intellij.platform.syntax.parser.SyntaxTreeBuilder;
|
||||
import com.intellij.platform.syntax.psi.ParsingDiagnostics;
|
||||
import com.intellij.platform.syntax.psi.PsiSyntaxBuilder;
|
||||
import com.intellij.platform.syntax.util.parser.SyntaxBuilderUtil;
|
||||
import com.intellij.pom.java.LanguageLevel;
|
||||
import com.intellij.psi.PsiElement;
|
||||
import com.intellij.psi.PsiFile;
|
||||
import com.intellij.psi.impl.source.tree.CompositePsiElement;
|
||||
import com.intellij.psi.impl.source.tree.ICodeFragmentElementType;
|
||||
import com.intellij.psi.tree.*;
|
||||
import com.intellij.psi.tree.IElementType;
|
||||
import com.intellij.psi.tree.ParentAwareTokenSet;
|
||||
import com.intellij.psi.tree.java.IJavaElementType;
|
||||
import com.intellij.util.diff.FlyweightCapableTreeStructure;
|
||||
import org.jetbrains.annotations.ApiStatus;
|
||||
import org.jetbrains.annotations.NonNls;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.Set;
|
||||
import java.util.function.Function;
|
||||
import java.util.function.Supplier;
|
||||
|
||||
|
||||
/**
|
||||
* @deprecated Use the new Java syntax library instead.
|
||||
* See {@link com.intellij.java.syntax.parser.JavaParser}
|
||||
* This class is planned to be removed.
|
||||
* As a temporary solution, use {@link com.intellij.psi.impl.java.stubs.JavaStubElementTypes} and
|
||||
* {@link com.intellij.psi.impl.source.tree.JavaElementType}.
|
||||
* See {@link com.intellij.java.syntax.parser.JavaParser}
|
||||
* This class is planned to be removed.
|
||||
* As a temporary solution, use {@link com.intellij.psi.impl.java.stubs.JavaStubElementTypes} and
|
||||
* {@link com.intellij.psi.impl.source.tree.JavaElementType}.
|
||||
*/
|
||||
@Deprecated
|
||||
@ApiStatus.ScheduledForRemoval
|
||||
@@ -233,217 +202,4 @@ public interface BasicJavaElementType {
|
||||
BASIC_ENUM_CONSTANT, BASIC_ENUM_CONSTANT_INITIALIZER, BASIC_FIELD,
|
||||
BASIC_METHOD, BASIC_RECORD_COMPONENT,
|
||||
BASIC_TYPE_PARAMETER);
|
||||
|
||||
|
||||
/**
|
||||
* @deprecated Use the new Java syntax library instead.
|
||||
* See {@link com.intellij.java.syntax.parser.JavaParser}
|
||||
* This class is planned to be removed.
|
||||
* As a temporary solution, use {@link com.intellij.psi.impl.source.tree.JavaElementType.JavaCompositeElementType}.
|
||||
*/
|
||||
@Deprecated
|
||||
@ApiStatus.ScheduledForRemoval
|
||||
class JavaCompositeElementType extends IJavaElementType implements ICompositeElementType, ParentProviderElementType {
|
||||
private final Supplier<? extends ASTNode> myConstructor;
|
||||
private final Set<IElementType> myParentElementTypes;
|
||||
|
||||
public JavaCompositeElementType(@NonNls @NotNull String debugName,
|
||||
@NotNull Supplier<? extends ASTNode> constructor,
|
||||
@NotNull IElementType parentElementType) {
|
||||
this(debugName, constructor, false, parentElementType);
|
||||
}
|
||||
|
||||
public JavaCompositeElementType(@NonNls @NotNull String debugName,
|
||||
@NotNull Supplier<? extends ASTNode> constructor,
|
||||
boolean leftBound,
|
||||
@NotNull IElementType parentElementType) {
|
||||
super(debugName, leftBound);
|
||||
myConstructor = constructor;
|
||||
myParentElementTypes = Collections.singleton(parentElementType);
|
||||
}
|
||||
|
||||
@Override
|
||||
public @NotNull ASTNode createCompositeNode() {
|
||||
return myConstructor.get();
|
||||
}
|
||||
|
||||
@Override
|
||||
public @NotNull Set<IElementType> getParents() {
|
||||
return myParentElementTypes;
|
||||
}
|
||||
}
|
||||
|
||||
@ApiStatus.Internal
|
||||
final class JavaDummyElementType extends ILazyParseableElementType implements ICompositeElementType, ParentProviderElementType {
|
||||
private static final Set<IElementType> PARENT_ELEMENT_TYPES = Collections.singleton(BASIC_DUMMY_ELEMENT);
|
||||
|
||||
public JavaDummyElementType() {
|
||||
super("DUMMY_ELEMENT", JavaLanguage.INSTANCE);
|
||||
}
|
||||
|
||||
@Override
|
||||
public @NotNull ASTNode createCompositeNode() {
|
||||
return new CompositePsiElement(this) {
|
||||
};
|
||||
}
|
||||
|
||||
@Override
|
||||
public @Nullable ASTNode parseContents(final @NotNull ASTNode chameleon) {
|
||||
assert chameleon instanceof BasicJavaDummyElement : chameleon;
|
||||
final BasicJavaDummyElement dummyElement = (BasicJavaDummyElement)chameleon;
|
||||
return BasicJavaParserUtil.parseFragment(chameleon, dummyElement.getParser(), dummyElement.consumeAll(),
|
||||
dummyElement.getLanguageLevel()
|
||||
);
|
||||
}
|
||||
|
||||
@Override
|
||||
public @NotNull Set<IElementType> getParents() {
|
||||
return PARENT_ELEMENT_TYPES;
|
||||
}
|
||||
}
|
||||
|
||||
abstract class FrontBackICodeBlockElementType extends IErrorCounterReparseableElementType
|
||||
implements ICompositeElementType, ILightLazyParseableElementType, ParentProviderElementType {
|
||||
private static final Set<IElementType> PARENT_ELEMENT_TYPES = Collections.singleton(BASIC_CODE_BLOCK);
|
||||
private final Function<PsiElement, LanguageLevel> languageLevelFunction;
|
||||
private final Function<PsiFile, TokenList> psiAsLexer;
|
||||
|
||||
public FrontBackICodeBlockElementType(@NotNull Function<PsiElement, LanguageLevel> function,
|
||||
@NotNull Function<PsiFile, TokenList> lexer) {
|
||||
super("CODE_BLOCK", JavaLanguage.INSTANCE);
|
||||
languageLevelFunction = function;
|
||||
psiAsLexer = lexer;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ASTNode parseContents(final @NotNull ASTNode chameleon) {
|
||||
PsiSyntaxBuilderWithLanguageLevel
|
||||
builderAndLevel = BasicJavaParserUtil.createSyntaxBuilder(chameleon, languageLevelFunction, psiAsLexer);
|
||||
PsiSyntaxBuilder psiSyntaxBuilder = builderAndLevel.getBuilder();
|
||||
LanguageLevel level = builderAndLevel.getLanguageLevel();
|
||||
long startTime = System.nanoTime();
|
||||
SyntaxTreeBuilder builder = psiSyntaxBuilder.getSyntaxTreeBuilder();
|
||||
new JavaParser(level).getStatementParser().parseCodeBlockDeep(builder, true);
|
||||
ASTNode node = psiSyntaxBuilder.getTreeBuilt().getFirstChildNode();
|
||||
ParsingDiagnostics.registerParse(builder, getLanguage(), System.nanoTime() - startTime);
|
||||
return node;
|
||||
}
|
||||
|
||||
@Override
|
||||
public @NotNull FlyweightCapableTreeStructure<LighterASTNode> parseContents(final @NotNull LighterLazyParseableNode chameleon) {
|
||||
PsiSyntaxBuilderWithLanguageLevel builderAndLevel = BasicJavaParserUtil.createSyntaxBuilder(chameleon, languageLevelFunction);
|
||||
PsiSyntaxBuilder psiSyntaxBuilder = builderAndLevel.getBuilder();
|
||||
LanguageLevel level = builderAndLevel.getLanguageLevel();
|
||||
long startTime = System.nanoTime();
|
||||
SyntaxTreeBuilder builder = psiSyntaxBuilder.getSyntaxTreeBuilder();
|
||||
new JavaParser(level).getStatementParser().parseCodeBlockDeep(builder, true);
|
||||
FlyweightCapableTreeStructure<LighterASTNode> tree = psiSyntaxBuilder.getLightTree();
|
||||
ParsingDiagnostics.registerParse(builder, getLanguage(), System.nanoTime() - startTime);
|
||||
return tree;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getErrorsCount(final CharSequence seq, Language fileLanguage, final Project project) {
|
||||
Lexer lexer = new JavaLexer(LanguageLevel.HIGHEST);
|
||||
boolean hasProperBraceBalance = SyntaxBuilderUtil.hasProperBraceBalance(
|
||||
seq, lexer, JavaSyntaxTokenType.LBRACE, JavaSyntaxTokenType.RBRACE,
|
||||
() -> ProgressManager.checkCanceled()
|
||||
);
|
||||
return hasProperBraceBalance ? NO_ERRORS : FATAL_ERROR;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean reuseCollapsedTokens() {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public @NotNull Set<IElementType> getParents() {
|
||||
return PARENT_ELEMENT_TYPES;
|
||||
}
|
||||
}
|
||||
|
||||
class FrontBackTypeTextElementType extends ICodeFragmentElementType implements ParentProviderElementType {
|
||||
private final int myFlags;
|
||||
private final Set<IElementType> myParentElementTypes;
|
||||
|
||||
public FrontBackTypeTextElementType(@NonNls String debugName, int flags, @NotNull IElementType parentElementType) {
|
||||
super(debugName, JavaLanguage.INSTANCE);
|
||||
myFlags = flags;
|
||||
myParentElementTypes = Collections.singleton(parentElementType);
|
||||
}
|
||||
|
||||
private final BasicJavaParserUtil.ParserWrapper myParser = new BasicJavaParserUtil.ParserWrapper() {
|
||||
@Override
|
||||
public void parse(@NotNull SyntaxTreeBuilder builder, @NotNull LanguageLevel languageLevel) {
|
||||
int flags = ReferenceParser.EAT_LAST_DOT | ReferenceParser.ELLIPSIS | ReferenceParser.WILDCARD | myFlags;
|
||||
new JavaParser(languageLevel).getReferenceParser().parseType(builder, flags);
|
||||
}
|
||||
};
|
||||
|
||||
@Override
|
||||
public @Nullable ASTNode parseContents(final @NotNull ASTNode chameleon) {
|
||||
return BasicJavaParserUtil.parseFragmentWithHighestLanguageLevel(chameleon, myParser, JavaLexer::new);
|
||||
}
|
||||
|
||||
@Override
|
||||
public @NotNull Set<IElementType> getParents() {
|
||||
return myParentElementTypes;
|
||||
}
|
||||
}
|
||||
|
||||
class StatementThinCodeFragmentElementType extends ThinCodeFragmentElementType {
|
||||
public StatementThinCodeFragmentElementType() {
|
||||
super("STATEMENTS", (builder, languageLevel) -> {
|
||||
new JavaParser(languageLevel).getStatementParser().parseStatements(builder);
|
||||
}, BASIC_STATEMENTS);
|
||||
}
|
||||
}
|
||||
|
||||
class MemberThinCodeFragmentElementType extends ThinCodeFragmentElementType {
|
||||
public MemberThinCodeFragmentElementType() {
|
||||
super("MEMBERS", (builder, languageLevel) -> {
|
||||
new JavaParser(languageLevel).getDeclarationParser().parseClassBodyDeclarations(builder, false);
|
||||
}, BASIC_MEMBERS);
|
||||
}
|
||||
}
|
||||
|
||||
class ExpressionThinCodeFragmentElementType extends ThinCodeFragmentElementType {
|
||||
public ExpressionThinCodeFragmentElementType() {
|
||||
super("EXPRESSION_TEXT", (builder, languageLevel) -> {
|
||||
new JavaParser(languageLevel).getExpressionParser().parse(builder);
|
||||
}, BASIC_EXPRESSION_TEXT);
|
||||
}
|
||||
}
|
||||
|
||||
class ReferenceThinCodeFragmentElementType extends ThinCodeFragmentElementType {
|
||||
public ReferenceThinCodeFragmentElementType() {
|
||||
super("REFERENCE_TEXT", (builder, languageLevel) -> {
|
||||
new JavaParser(languageLevel).getReferenceParser().parseJavaCodeReference(builder, false, true, false, false);
|
||||
}, BASIC_REFERENCE_TEXT);
|
||||
}
|
||||
}
|
||||
|
||||
class ThinCodeFragmentElementType extends ICodeFragmentElementType implements ParentProviderElementType {
|
||||
private final BasicJavaParserUtil.ParserWrapper myParser;
|
||||
private final Set<IElementType> parentElementTypes;
|
||||
|
||||
private ThinCodeFragmentElementType(@NotNull String debugName,
|
||||
@NotNull BasicJavaParserUtil.ParserWrapper parser,
|
||||
@NotNull IElementType parentElementType) {
|
||||
super(debugName, JavaLanguage.INSTANCE);
|
||||
myParser = parser;
|
||||
this.parentElementTypes = Collections.singleton(parentElementType);
|
||||
}
|
||||
|
||||
@Override
|
||||
public @Nullable ASTNode parseContents(final @NotNull ASTNode chameleon) {
|
||||
return BasicJavaParserUtil.parseFragmentWithHighestLanguageLevel(chameleon, myParser, JavaLexer::new);
|
||||
}
|
||||
|
||||
@Override
|
||||
public @NotNull Set<IElementType> getParents() {
|
||||
return parentElementTypes;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,37 +1,65 @@
|
||||
// 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.tree;
|
||||
|
||||
import com.intellij.java.syntax.element.JavaSyntaxTokenType;
|
||||
import com.intellij.java.syntax.lexer.JavaLexer;
|
||||
import com.intellij.java.syntax.parser.JavaParser;
|
||||
import com.intellij.java.syntax.parser.ReferenceParser;
|
||||
import com.intellij.lang.ASTNode;
|
||||
import com.intellij.lang.Language;
|
||||
import com.intellij.lang.LighterASTNode;
|
||||
import com.intellij.lang.LighterLazyParseableNode;
|
||||
import com.intellij.lang.java.JavaLanguage;
|
||||
import com.intellij.lang.java.parser.JavaParserUtil;
|
||||
import com.intellij.lang.java.parser.PsiSyntaxBuilderWithLanguageLevel;
|
||||
import com.intellij.openapi.progress.ProgressManager;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.platform.syntax.lexer.Lexer;
|
||||
import com.intellij.platform.syntax.lexer.TokenList;
|
||||
import com.intellij.platform.syntax.parser.SyntaxTreeBuilder;
|
||||
import com.intellij.platform.syntax.psi.ParsingDiagnostics;
|
||||
import com.intellij.platform.syntax.psi.PsiSyntaxBuilder;
|
||||
import com.intellij.platform.syntax.util.parser.SyntaxBuilderUtil;
|
||||
import com.intellij.pom.java.LanguageLevel;
|
||||
import com.intellij.psi.PsiElement;
|
||||
import com.intellij.psi.PsiFile;
|
||||
import com.intellij.psi.impl.java.stubs.JavaStubElementTypes;
|
||||
import com.intellij.psi.impl.source.*;
|
||||
import com.intellij.psi.impl.source.tree.java.*;
|
||||
import com.intellij.psi.tree.IElementType;
|
||||
import com.intellij.psi.tree.ILazyParseableElementType;
|
||||
import com.intellij.psi.tree.*;
|
||||
import com.intellij.psi.tree.java.IJavaElementType;
|
||||
import com.intellij.psi.util.PsiUtil;
|
||||
import com.intellij.util.diff.FlyweightCapableTreeStructure;
|
||||
import org.jetbrains.annotations.ApiStatus;
|
||||
import org.jetbrains.annotations.NonNls;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import java.util.function.Function;
|
||||
import java.util.function.Supplier;
|
||||
|
||||
import static com.intellij.psi.impl.source.BasicJavaElementType.*;
|
||||
|
||||
/**
|
||||
* @see com.intellij.java.syntax.element.JavaSyntaxElementType
|
||||
*/
|
||||
public interface JavaElementType {
|
||||
class JavaCompositeElementType extends BasicJavaElementType.JavaCompositeElementType {
|
||||
public JavaCompositeElementType(@NotNull String debugName,
|
||||
@NotNull Supplier<? extends ASTNode> constructor,
|
||||
@NotNull IElementType parentElementType) {
|
||||
super(debugName, constructor, parentElementType);
|
||||
class JavaCompositeElementType extends IJavaElementType implements ICompositeElementType {
|
||||
private final Supplier<? extends ASTNode> myConstructor;
|
||||
|
||||
public JavaCompositeElementType(@NonNls @NotNull String debugName,
|
||||
@NotNull Supplier<? extends ASTNode> constructor) {
|
||||
this(debugName, constructor, false);
|
||||
}
|
||||
|
||||
public JavaCompositeElementType(@NotNull String debugName,
|
||||
public JavaCompositeElementType(@NonNls @NotNull String debugName,
|
||||
@NotNull Supplier<? extends ASTNode> constructor,
|
||||
boolean leftBound,
|
||||
@NotNull IElementType parentElementType) {
|
||||
super(debugName, constructor, leftBound, parentElementType);
|
||||
boolean leftBound) {
|
||||
super(debugName, leftBound);
|
||||
myConstructor = constructor;
|
||||
}
|
||||
|
||||
@Override
|
||||
public @NotNull ASTNode createCompositeNode() {
|
||||
return myConstructor.get();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -76,148 +104,87 @@ public interface JavaElementType {
|
||||
IElementType PACKAGE_STATEMENT = JavaStubElementTypes.PACKAGE_STATEMENT;
|
||||
|
||||
IElementType IMPORT_STATIC_REFERENCE =
|
||||
new JavaCompositeElementType("IMPORT_STATIC_REFERENCE", () -> new PsiImportStaticReferenceElementImpl(),
|
||||
BASIC_IMPORT_STATIC_REFERENCE);
|
||||
IElementType TYPE = new JavaCompositeElementType("TYPE", () -> new PsiTypeElementImpl(), BASIC_TYPE);
|
||||
new JavaCompositeElementType("IMPORT_STATIC_REFERENCE", () -> new PsiImportStaticReferenceElementImpl());
|
||||
IElementType TYPE = new JavaCompositeElementType("TYPE", () -> new PsiTypeElementImpl());
|
||||
IElementType DIAMOND_TYPE =
|
||||
new JavaCompositeElementType("DIAMOND_TYPE", () -> new PsiDiamondTypeElementImpl(), BASIC_DIAMOND_TYPE);
|
||||
new JavaCompositeElementType("DIAMOND_TYPE", () -> new PsiDiamondTypeElementImpl());
|
||||
IElementType REFERENCE_PARAMETER_LIST =
|
||||
new JavaCompositeElementType("REFERENCE_PARAMETER_LIST", () -> new PsiReferenceParameterListImpl(), true,
|
||||
BASIC_REFERENCE_PARAMETER_LIST);
|
||||
IElementType JAVA_CODE_REFERENCE = new JavaCompositeElementType("JAVA_CODE_REFERENCE", () -> new PsiJavaCodeReferenceElementImpl(),
|
||||
BASIC_JAVA_CODE_REFERENCE);
|
||||
IElementType LOCAL_VARIABLE = new JavaCompositeElementType("LOCAL_VARIABLE", () -> new PsiLocalVariableImpl(),
|
||||
BASIC_LOCAL_VARIABLE);
|
||||
IElementType REFERENCE_EXPRESSION = new JavaCompositeElementType("REFERENCE_EXPRESSION", () -> new PsiReferenceExpressionImpl(),
|
||||
BASIC_REFERENCE_EXPRESSION);
|
||||
IElementType THIS_EXPRESSION = new JavaCompositeElementType("THIS_EXPRESSION", () -> new PsiThisExpressionImpl(),
|
||||
BASIC_THIS_EXPRESSION);
|
||||
IElementType SUPER_EXPRESSION = new JavaCompositeElementType("SUPER_EXPRESSION", () -> new PsiSuperExpressionImpl(),
|
||||
BASIC_SUPER_EXPRESSION);
|
||||
IElementType PARENTH_EXPRESSION = new JavaCompositeElementType("PARENTH_EXPRESSION", () -> new PsiParenthesizedExpressionImpl(),
|
||||
BASIC_PARENTH_EXPRESSION);
|
||||
IElementType METHOD_CALL_EXPRESSION = new JavaCompositeElementType("METHOD_CALL_EXPRESSION", () -> new PsiMethodCallExpressionImpl(),
|
||||
BASIC_METHOD_CALL_EXPRESSION);
|
||||
IElementType TYPE_CAST_EXPRESSION = new JavaCompositeElementType("TYPE_CAST_EXPRESSION", () -> new PsiTypeCastExpressionImpl(),
|
||||
BASIC_TYPE_CAST_EXPRESSION);
|
||||
IElementType PREFIX_EXPRESSION = new JavaCompositeElementType("PREFIX_EXPRESSION", () -> new PsiPrefixExpressionImpl(),
|
||||
BASIC_PREFIX_EXPRESSION);
|
||||
IElementType POSTFIX_EXPRESSION = new JavaCompositeElementType("POSTFIX_EXPRESSION", () -> new PsiPostfixExpressionImpl(),
|
||||
BASIC_POSTFIX_EXPRESSION);
|
||||
IElementType BINARY_EXPRESSION = new JavaCompositeElementType("BINARY_EXPRESSION", () -> new PsiBinaryExpressionImpl(),
|
||||
BASIC_BINARY_EXPRESSION);
|
||||
IElementType POLYADIC_EXPRESSION = new JavaCompositeElementType("POLYADIC_EXPRESSION", () -> new PsiPolyadicExpressionImpl(),
|
||||
BASIC_POLYADIC_EXPRESSION);
|
||||
IElementType CONDITIONAL_EXPRESSION = new JavaCompositeElementType("CONDITIONAL_EXPRESSION", () -> new PsiConditionalExpressionImpl(),
|
||||
BASIC_CONDITIONAL_EXPRESSION);
|
||||
IElementType ASSIGNMENT_EXPRESSION = new JavaCompositeElementType("ASSIGNMENT_EXPRESSION", () -> new PsiAssignmentExpressionImpl(),
|
||||
BASIC_ASSIGNMENT_EXPRESSION);
|
||||
IElementType NEW_EXPRESSION = new JavaCompositeElementType("NEW_EXPRESSION", () -> new PsiNewExpressionImpl(),
|
||||
BASIC_NEW_EXPRESSION);
|
||||
IElementType ARRAY_ACCESS_EXPRESSION = new JavaCompositeElementType("ARRAY_ACCESS_EXPRESSION", () -> new PsiArrayAccessExpressionImpl(),
|
||||
BASIC_ARRAY_ACCESS_EXPRESSION);
|
||||
new JavaCompositeElementType("REFERENCE_PARAMETER_LIST", () -> new PsiReferenceParameterListImpl(), true);
|
||||
IElementType JAVA_CODE_REFERENCE = new JavaCompositeElementType("JAVA_CODE_REFERENCE", () -> new PsiJavaCodeReferenceElementImpl());
|
||||
IElementType LOCAL_VARIABLE = new JavaCompositeElementType("LOCAL_VARIABLE", () -> new PsiLocalVariableImpl());
|
||||
IElementType REFERENCE_EXPRESSION = new JavaCompositeElementType("REFERENCE_EXPRESSION", () -> new PsiReferenceExpressionImpl());
|
||||
IElementType THIS_EXPRESSION = new JavaCompositeElementType("THIS_EXPRESSION", () -> new PsiThisExpressionImpl());
|
||||
IElementType SUPER_EXPRESSION = new JavaCompositeElementType("SUPER_EXPRESSION", () -> new PsiSuperExpressionImpl());
|
||||
IElementType PARENTH_EXPRESSION = new JavaCompositeElementType("PARENTH_EXPRESSION", () -> new PsiParenthesizedExpressionImpl());
|
||||
IElementType METHOD_CALL_EXPRESSION = new JavaCompositeElementType("METHOD_CALL_EXPRESSION", () -> new PsiMethodCallExpressionImpl());
|
||||
IElementType TYPE_CAST_EXPRESSION = new JavaCompositeElementType("TYPE_CAST_EXPRESSION", () -> new PsiTypeCastExpressionImpl());
|
||||
IElementType PREFIX_EXPRESSION = new JavaCompositeElementType("PREFIX_EXPRESSION", () -> new PsiPrefixExpressionImpl());
|
||||
IElementType POSTFIX_EXPRESSION = new JavaCompositeElementType("POSTFIX_EXPRESSION", () -> new PsiPostfixExpressionImpl());
|
||||
IElementType BINARY_EXPRESSION = new JavaCompositeElementType("BINARY_EXPRESSION", () -> new PsiBinaryExpressionImpl());
|
||||
IElementType POLYADIC_EXPRESSION = new JavaCompositeElementType("POLYADIC_EXPRESSION", () -> new PsiPolyadicExpressionImpl());
|
||||
IElementType CONDITIONAL_EXPRESSION = new JavaCompositeElementType("CONDITIONAL_EXPRESSION", () -> new PsiConditionalExpressionImpl());
|
||||
IElementType ASSIGNMENT_EXPRESSION = new JavaCompositeElementType("ASSIGNMENT_EXPRESSION", () -> new PsiAssignmentExpressionImpl());
|
||||
IElementType NEW_EXPRESSION = new JavaCompositeElementType("NEW_EXPRESSION", () -> new PsiNewExpressionImpl());
|
||||
IElementType ARRAY_ACCESS_EXPRESSION = new JavaCompositeElementType("ARRAY_ACCESS_EXPRESSION", () -> new PsiArrayAccessExpressionImpl());
|
||||
IElementType ARRAY_INITIALIZER_EXPRESSION =
|
||||
new JavaCompositeElementType("ARRAY_INITIALIZER_EXPRESSION", () -> new PsiArrayInitializerExpressionImpl(),
|
||||
BASIC_ARRAY_INITIALIZER_EXPRESSION);
|
||||
IElementType INSTANCE_OF_EXPRESSION = new JavaCompositeElementType("INSTANCE_OF_EXPRESSION", () -> new PsiInstanceOfExpressionImpl(),
|
||||
BASIC_INSTANCE_OF_EXPRESSION);
|
||||
new JavaCompositeElementType("ARRAY_INITIALIZER_EXPRESSION", () -> new PsiArrayInitializerExpressionImpl());
|
||||
IElementType INSTANCE_OF_EXPRESSION = new JavaCompositeElementType("INSTANCE_OF_EXPRESSION", () -> new PsiInstanceOfExpressionImpl());
|
||||
IElementType CLASS_OBJECT_ACCESS_EXPRESSION =
|
||||
new JavaCompositeElementType("CLASS_OBJECT_ACCESS_EXPRESSION", () -> new PsiClassObjectAccessExpressionImpl(),
|
||||
BASIC_CLASS_OBJECT_ACCESS_EXPRESSION);
|
||||
IElementType TEMPLATE_EXPRESSION = new JavaCompositeElementType("TEMPLATE_EXPRESSION", () -> new PsiTemplateExpressionImpl(),
|
||||
BASIC_TEMPLATE_EXPRESSION);
|
||||
IElementType TEMPLATE = new JavaCompositeElementType("TEMPLATE", () -> new PsiTemplateImpl(),
|
||||
BASIC_TEMPLATE);
|
||||
IElementType EMPTY_EXPRESSION = new JavaCompositeElementType("EMPTY_EXPRESSION", () -> new PsiEmptyExpressionImpl(), true,
|
||||
BASIC_EMPTY_EXPRESSION);
|
||||
IElementType EXPRESSION_LIST = new JavaCompositeElementType("EXPRESSION_LIST", () -> new PsiExpressionListImpl(), true,
|
||||
BASIC_EXPRESSION_LIST);
|
||||
IElementType EMPTY_STATEMENT = new JavaCompositeElementType("EMPTY_STATEMENT", () -> new PsiEmptyStatementImpl(),
|
||||
BASIC_EMPTY_STATEMENT);
|
||||
IElementType BLOCK_STATEMENT = new JavaCompositeElementType("BLOCK_STATEMENT", () -> new PsiBlockStatementImpl(),
|
||||
BASIC_BLOCK_STATEMENT);
|
||||
IElementType EXPRESSION_STATEMENT = new JavaCompositeElementType("EXPRESSION_STATEMENT", () -> new PsiExpressionStatementImpl(),
|
||||
BASIC_EXPRESSION_STATEMENT);
|
||||
new JavaCompositeElementType("CLASS_OBJECT_ACCESS_EXPRESSION", () -> new PsiClassObjectAccessExpressionImpl());
|
||||
IElementType TEMPLATE_EXPRESSION = new JavaCompositeElementType("TEMPLATE_EXPRESSION", () -> new PsiTemplateExpressionImpl());
|
||||
IElementType TEMPLATE = new JavaCompositeElementType("TEMPLATE", () -> new PsiTemplateImpl());
|
||||
IElementType EMPTY_EXPRESSION = new JavaCompositeElementType("EMPTY_EXPRESSION", () -> new PsiEmptyExpressionImpl(), true);
|
||||
IElementType EXPRESSION_LIST = new JavaCompositeElementType("EXPRESSION_LIST", () -> new PsiExpressionListImpl(), true);
|
||||
IElementType EMPTY_STATEMENT = new JavaCompositeElementType("EMPTY_STATEMENT", () -> new PsiEmptyStatementImpl());
|
||||
IElementType BLOCK_STATEMENT = new JavaCompositeElementType("BLOCK_STATEMENT", () -> new PsiBlockStatementImpl());
|
||||
IElementType EXPRESSION_STATEMENT = new JavaCompositeElementType("EXPRESSION_STATEMENT", () -> new PsiExpressionStatementImpl());
|
||||
IElementType EXPRESSION_LIST_STATEMENT =
|
||||
new JavaCompositeElementType("EXPRESSION_LIST_STATEMENT", () -> new PsiExpressionListStatementImpl(),
|
||||
BASIC_EXPRESSION_LIST_STATEMENT);
|
||||
IElementType DECLARATION_STATEMENT = new JavaCompositeElementType("DECLARATION_STATEMENT", () -> new PsiDeclarationStatementImpl(),
|
||||
BASIC_DECLARATION_STATEMENT);
|
||||
IElementType IF_STATEMENT = new JavaCompositeElementType("IF_STATEMENT", () -> new PsiIfStatementImpl(),
|
||||
BASIC_IF_STATEMENT);
|
||||
IElementType WHILE_STATEMENT = new JavaCompositeElementType("WHILE_STATEMENT", () -> new PsiWhileStatementImpl(),
|
||||
BASIC_WHILE_STATEMENT);
|
||||
IElementType FOR_STATEMENT = new JavaCompositeElementType("FOR_STATEMENT", () -> new PsiForStatementImpl(),
|
||||
BASIC_FOR_STATEMENT);
|
||||
IElementType FOREACH_STATEMENT = new JavaCompositeElementType("FOREACH_STATEMENT", () -> new PsiForeachStatementImpl(),
|
||||
BASIC_FOREACH_STATEMENT);
|
||||
new JavaCompositeElementType("EXPRESSION_LIST_STATEMENT", () -> new PsiExpressionListStatementImpl());
|
||||
IElementType DECLARATION_STATEMENT = new JavaCompositeElementType("DECLARATION_STATEMENT", () -> new PsiDeclarationStatementImpl());
|
||||
IElementType IF_STATEMENT = new JavaCompositeElementType("IF_STATEMENT", () -> new PsiIfStatementImpl());
|
||||
IElementType WHILE_STATEMENT = new JavaCompositeElementType("WHILE_STATEMENT", () -> new PsiWhileStatementImpl());
|
||||
IElementType FOR_STATEMENT = new JavaCompositeElementType("FOR_STATEMENT", () -> new PsiForStatementImpl());
|
||||
IElementType FOREACH_STATEMENT = new JavaCompositeElementType("FOREACH_STATEMENT", () -> new PsiForeachStatementImpl());
|
||||
IElementType FOREACH_PATTERN_STATEMENT =
|
||||
new JavaCompositeElementType("FOREACH_PATTERN_STATEMENT", () -> new PsiForeachPatternStatementImpl(),
|
||||
BASIC_FOREACH_PATTERN_STATEMENT);
|
||||
IElementType DO_WHILE_STATEMENT = new JavaCompositeElementType("DO_WHILE_STATEMENT", () -> new PsiDoWhileStatementImpl(),
|
||||
BASIC_DO_WHILE_STATEMENT);
|
||||
IElementType SWITCH_STATEMENT = new JavaCompositeElementType("SWITCH_STATEMENT", () -> new PsiSwitchStatementImpl(),
|
||||
BASIC_SWITCH_STATEMENT);
|
||||
IElementType SWITCH_EXPRESSION = new JavaCompositeElementType("SWITCH_EXPRESSION", () -> new PsiSwitchExpressionImpl(),
|
||||
BASIC_SWITCH_EXPRESSION);
|
||||
IElementType SWITCH_LABEL_STATEMENT = new JavaCompositeElementType("SWITCH_LABEL_STATEMENT", () -> new PsiSwitchLabelStatementImpl(),
|
||||
BASIC_SWITCH_LABEL_STATEMENT);
|
||||
IElementType SWITCH_LABELED_RULE = new JavaCompositeElementType("SWITCH_LABELED_RULE", () -> new PsiSwitchLabeledRuleStatementImpl(),
|
||||
BASIC_SWITCH_LABELED_RULE);
|
||||
IElementType BREAK_STATEMENT = new JavaCompositeElementType("BREAK_STATEMENT", () -> new PsiBreakStatementImpl(),
|
||||
BASIC_BREAK_STATEMENT);
|
||||
IElementType YIELD_STATEMENT = new JavaCompositeElementType("YIELD_STATEMENT", () -> new PsiYieldStatementImpl(),
|
||||
BASIC_YIELD_STATEMENT);
|
||||
IElementType CONTINUE_STATEMENT = new JavaCompositeElementType("CONTINUE_STATEMENT", () -> new PsiContinueStatementImpl(),
|
||||
BASIC_CONTINUE_STATEMENT);
|
||||
IElementType RETURN_STATEMENT = new JavaCompositeElementType("RETURN_STATEMENT", () -> new PsiReturnStatementImpl(),
|
||||
BASIC_RETURN_STATEMENT);
|
||||
IElementType THROW_STATEMENT = new JavaCompositeElementType("THROW_STATEMENT", () -> new PsiThrowStatementImpl(),
|
||||
BASIC_THROW_STATEMENT);
|
||||
IElementType SYNCHRONIZED_STATEMENT = new JavaCompositeElementType("SYNCHRONIZED_STATEMENT", () -> new PsiSynchronizedStatementImpl(),
|
||||
BASIC_SYNCHRONIZED_STATEMENT);
|
||||
IElementType TRY_STATEMENT = new JavaCompositeElementType("TRY_STATEMENT", () -> new PsiTryStatementImpl(),
|
||||
BASIC_TRY_STATEMENT);
|
||||
IElementType RESOURCE_LIST = new JavaCompositeElementType("RESOURCE_LIST", () -> new PsiResourceListImpl(),
|
||||
BASIC_RESOURCE_LIST);
|
||||
IElementType RESOURCE_VARIABLE = new JavaCompositeElementType("RESOURCE_VARIABLE", () -> new PsiResourceVariableImpl(),
|
||||
BASIC_RESOURCE_VARIABLE);
|
||||
IElementType RESOURCE_EXPRESSION = new JavaCompositeElementType("RESOURCE_EXPRESSION", () -> new PsiResourceExpressionImpl(),
|
||||
BASIC_RESOURCE_EXPRESSION);
|
||||
IElementType CATCH_SECTION = new JavaCompositeElementType("CATCH_SECTION", () -> new PsiCatchSectionImpl(),
|
||||
BASIC_CATCH_SECTION);
|
||||
IElementType LABELED_STATEMENT = new JavaCompositeElementType("LABELED_STATEMENT", () -> new PsiLabeledStatementImpl(),
|
||||
BASIC_LABELED_STATEMENT);
|
||||
IElementType ASSERT_STATEMENT = new JavaCompositeElementType("ASSERT_STATEMENT", () -> new PsiAssertStatementImpl(),
|
||||
BASIC_ASSERT_STATEMENT);
|
||||
new JavaCompositeElementType("FOREACH_PATTERN_STATEMENT", () -> new PsiForeachPatternStatementImpl());
|
||||
IElementType DO_WHILE_STATEMENT = new JavaCompositeElementType("DO_WHILE_STATEMENT", () -> new PsiDoWhileStatementImpl());
|
||||
IElementType SWITCH_STATEMENT = new JavaCompositeElementType("SWITCH_STATEMENT", () -> new PsiSwitchStatementImpl());
|
||||
IElementType SWITCH_EXPRESSION = new JavaCompositeElementType("SWITCH_EXPRESSION", () -> new PsiSwitchExpressionImpl());
|
||||
IElementType SWITCH_LABEL_STATEMENT = new JavaCompositeElementType("SWITCH_LABEL_STATEMENT", () -> new PsiSwitchLabelStatementImpl());
|
||||
IElementType SWITCH_LABELED_RULE = new JavaCompositeElementType("SWITCH_LABELED_RULE", () -> new PsiSwitchLabeledRuleStatementImpl());
|
||||
IElementType BREAK_STATEMENT = new JavaCompositeElementType("BREAK_STATEMENT", () -> new PsiBreakStatementImpl());
|
||||
IElementType YIELD_STATEMENT = new JavaCompositeElementType("YIELD_STATEMENT", () -> new PsiYieldStatementImpl());
|
||||
IElementType CONTINUE_STATEMENT = new JavaCompositeElementType("CONTINUE_STATEMENT", () -> new PsiContinueStatementImpl());
|
||||
IElementType RETURN_STATEMENT = new JavaCompositeElementType("RETURN_STATEMENT", () -> new PsiReturnStatementImpl());
|
||||
IElementType THROW_STATEMENT = new JavaCompositeElementType("THROW_STATEMENT", () -> new PsiThrowStatementImpl());
|
||||
IElementType SYNCHRONIZED_STATEMENT = new JavaCompositeElementType("SYNCHRONIZED_STATEMENT", () -> new PsiSynchronizedStatementImpl());
|
||||
IElementType TRY_STATEMENT = new JavaCompositeElementType("TRY_STATEMENT", () -> new PsiTryStatementImpl());
|
||||
IElementType RESOURCE_LIST = new JavaCompositeElementType("RESOURCE_LIST", () -> new PsiResourceListImpl());
|
||||
IElementType RESOURCE_VARIABLE = new JavaCompositeElementType("RESOURCE_VARIABLE", () -> new PsiResourceVariableImpl());
|
||||
IElementType RESOURCE_EXPRESSION = new JavaCompositeElementType("RESOURCE_EXPRESSION", () -> new PsiResourceExpressionImpl());
|
||||
IElementType CATCH_SECTION = new JavaCompositeElementType("CATCH_SECTION", () -> new PsiCatchSectionImpl());
|
||||
IElementType LABELED_STATEMENT = new JavaCompositeElementType("LABELED_STATEMENT", () -> new PsiLabeledStatementImpl());
|
||||
IElementType ASSERT_STATEMENT = new JavaCompositeElementType("ASSERT_STATEMENT", () -> new PsiAssertStatementImpl());
|
||||
IElementType ANNOTATION_ARRAY_INITIALIZER =
|
||||
new JavaCompositeElementType("ANNOTATION_ARRAY_INITIALIZER", () -> new PsiArrayInitializerMemberValueImpl(),
|
||||
BASIC_ANNOTATION_ARRAY_INITIALIZER);
|
||||
IElementType RECEIVER_PARAMETER = new JavaCompositeElementType("RECEIVER", () -> new PsiReceiverParameterImpl(),
|
||||
BASIC_RECEIVER_PARAMETER);
|
||||
IElementType MODULE_REFERENCE = new JavaCompositeElementType("MODULE_REFERENCE", () -> new PsiJavaModuleReferenceElementImpl(),
|
||||
BASIC_MODULE_REFERENCE);
|
||||
new JavaCompositeElementType("ANNOTATION_ARRAY_INITIALIZER", () -> new PsiArrayInitializerMemberValueImpl());
|
||||
IElementType RECEIVER_PARAMETER = new JavaCompositeElementType("RECEIVER", () -> new PsiReceiverParameterImpl());
|
||||
IElementType MODULE_REFERENCE = new JavaCompositeElementType("MODULE_REFERENCE", () -> new PsiJavaModuleReferenceElementImpl());
|
||||
IElementType UNNAMED_PATTERN =
|
||||
new JavaCompositeElementType("UNNAMED_PATTERN", () -> new PsiUnnamedPatternImpl(), BASIC_UNNAMED_PATTERN);
|
||||
new JavaCompositeElementType("UNNAMED_PATTERN", () -> new PsiUnnamedPatternImpl());
|
||||
IElementType TYPE_TEST_PATTERN =
|
||||
new JavaCompositeElementType("TYPE_TEST_PATTERN", () -> new PsiTypeTestPatternImpl(), BASIC_TYPE_TEST_PATTERN);
|
||||
new JavaCompositeElementType("TYPE_TEST_PATTERN", () -> new PsiTypeTestPatternImpl());
|
||||
IElementType PATTERN_VARIABLE =
|
||||
new JavaCompositeElementType("PATTERN_VARIABLE", () -> new PsiPatternVariableImpl(), BASIC_PATTERN_VARIABLE);
|
||||
new JavaCompositeElementType("PATTERN_VARIABLE", () -> new PsiPatternVariableImpl());
|
||||
IElementType DECONSTRUCTION_PATTERN =
|
||||
new JavaCompositeElementType("DECONSTRUCTION_PATTERN", () -> new PsiDeconstructionPatternImpl(),
|
||||
BASIC_DECONSTRUCTION_PATTERN);
|
||||
new JavaCompositeElementType("DECONSTRUCTION_PATTERN", () -> new PsiDeconstructionPatternImpl());
|
||||
IElementType DECONSTRUCTION_LIST =
|
||||
new JavaCompositeElementType("DECONSTRUCTION_LIST", () -> new PsiDeconstructionListImpl(),
|
||||
BASIC_DECONSTRUCTION_LIST);
|
||||
new JavaCompositeElementType("DECONSTRUCTION_LIST", () -> new PsiDeconstructionListImpl());
|
||||
IElementType DECONSTRUCTION_PATTERN_VARIABLE =
|
||||
new JavaCompositeElementType("DECONSTRUCTION_PATTERN_VARIABLE", () -> new PsiDeconstructionPatternVariableImpl(),
|
||||
BASIC_DECONSTRUCTION_PATTERN_VARIABLE);
|
||||
new JavaCompositeElementType("DECONSTRUCTION_PATTERN_VARIABLE", () -> new PsiDeconstructionPatternVariableImpl());
|
||||
IElementType DEFAULT_CASE_LABEL_ELEMENT =
|
||||
new JavaCompositeElementType("DEFAULT_CASE_LABEL_ELEMENT", () -> new PsiDefaultLabelElementImpl(),
|
||||
BASIC_DEFAULT_CASE_LABEL_ELEMENT);
|
||||
new JavaCompositeElementType("DEFAULT_CASE_LABEL_ELEMENT", () -> new PsiDefaultLabelElementImpl());
|
||||
IElementType CASE_LABEL_ELEMENT_LIST =
|
||||
new JavaCompositeElementType("CASE_LABEL_ELEMENT_LIST", () -> new PsiCaseLabelElementListImpl(),
|
||||
BASIC_CASE_LABEL_ELEMENT_LIST);
|
||||
new JavaCompositeElementType("CASE_LABEL_ELEMENT_LIST", () -> new PsiCaseLabelElementListImpl());
|
||||
|
||||
ILazyParseableElementType CODE_BLOCK = new FrontBackICodeBlockElementType(PsiUtil::getLanguageLevel,
|
||||
JavaParserUtil::obtainTokens) {
|
||||
@@ -237,10 +204,156 @@ public interface JavaElementType {
|
||||
IElementType EXPRESSION_TEXT = new ExpressionThinCodeFragmentElementType();
|
||||
IElementType REFERENCE_TEXT = new ReferenceThinCodeFragmentElementType();
|
||||
IElementType TYPE_WITH_DISJUNCTIONS_TEXT = new FrontBackTypeTextElementType("TYPE_WITH_DISJUNCTIONS_TEXT",
|
||||
ReferenceParser.DISJUNCTIONS,
|
||||
BASIC_TYPE_WITH_DISJUNCTIONS_TEXT);
|
||||
ReferenceParser.DISJUNCTIONS);
|
||||
IElementType TYPE_WITH_CONJUNCTIONS_TEXT = new FrontBackTypeTextElementType("TYPE_WITH_CONJUNCTIONS_TEXT",
|
||||
ReferenceParser.DISJUNCTIONS,
|
||||
BASIC_TYPE_WITH_CONJUNCTIONS_TEXT);
|
||||
ReferenceParser.DISJUNCTIONS);
|
||||
IElementType DUMMY_ELEMENT = new JavaDummyElementType();
|
||||
|
||||
@ApiStatus.Internal
|
||||
final class JavaDummyElementType extends ILazyParseableElementType implements ICompositeElementType {
|
||||
|
||||
public JavaDummyElementType() {
|
||||
super("DUMMY_ELEMENT", JavaLanguage.INSTANCE);
|
||||
}
|
||||
|
||||
@Override
|
||||
public @NotNull ASTNode createCompositeNode() {
|
||||
return new CompositePsiElement(this) {
|
||||
};
|
||||
}
|
||||
|
||||
@Override
|
||||
public @Nullable ASTNode parseContents(final @NotNull ASTNode chameleon) {
|
||||
assert chameleon instanceof JavaDummyElement : chameleon;
|
||||
final JavaDummyElement dummyElement = (JavaDummyElement)chameleon;
|
||||
return JavaParserUtil.parseFragment(chameleon, dummyElement.getParser(), dummyElement.consumeAll(),
|
||||
dummyElement.getLanguageLevel()
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
abstract class FrontBackICodeBlockElementType extends IErrorCounterReparseableElementType
|
||||
implements ICompositeElementType, ILightLazyParseableElementType {
|
||||
private final Function<PsiElement, LanguageLevel> languageLevelFunction;
|
||||
private final Function<PsiFile, TokenList> psiAsLexer;
|
||||
|
||||
public FrontBackICodeBlockElementType(@NotNull Function<PsiElement, LanguageLevel> function,
|
||||
@NotNull Function<PsiFile, TokenList> lexer) {
|
||||
super("CODE_BLOCK", JavaLanguage.INSTANCE);
|
||||
languageLevelFunction = function;
|
||||
psiAsLexer = lexer;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ASTNode parseContents(final @NotNull ASTNode chameleon) {
|
||||
PsiSyntaxBuilderWithLanguageLevel
|
||||
builderAndLevel = JavaParserUtil.createSyntaxBuilder(chameleon, languageLevelFunction, psiAsLexer);
|
||||
PsiSyntaxBuilder psiSyntaxBuilder = builderAndLevel.getBuilder();
|
||||
LanguageLevel level = builderAndLevel.getLanguageLevel();
|
||||
long startTime = System.nanoTime();
|
||||
SyntaxTreeBuilder builder = psiSyntaxBuilder.getSyntaxTreeBuilder();
|
||||
new JavaParser(level).getStatementParser().parseCodeBlockDeep(builder, true);
|
||||
ASTNode node = psiSyntaxBuilder.getTreeBuilt().getFirstChildNode();
|
||||
ParsingDiagnostics.registerParse(builder, getLanguage(), System.nanoTime() - startTime);
|
||||
return node;
|
||||
}
|
||||
|
||||
@Override
|
||||
public @NotNull FlyweightCapableTreeStructure<LighterASTNode> parseContents(final @NotNull LighterLazyParseableNode chameleon) {
|
||||
PsiSyntaxBuilderWithLanguageLevel builderAndLevel = JavaParserUtil.createSyntaxBuilder(chameleon, languageLevelFunction);
|
||||
PsiSyntaxBuilder psiSyntaxBuilder = builderAndLevel.getBuilder();
|
||||
LanguageLevel level = builderAndLevel.getLanguageLevel();
|
||||
long startTime = System.nanoTime();
|
||||
SyntaxTreeBuilder builder = psiSyntaxBuilder.getSyntaxTreeBuilder();
|
||||
new JavaParser(level).getStatementParser().parseCodeBlockDeep(builder, true);
|
||||
FlyweightCapableTreeStructure<LighterASTNode> tree = psiSyntaxBuilder.getLightTree();
|
||||
ParsingDiagnostics.registerParse(builder, getLanguage(), System.nanoTime() - startTime);
|
||||
return tree;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getErrorsCount(final CharSequence seq, Language fileLanguage, final Project project) {
|
||||
Lexer lexer = new JavaLexer(LanguageLevel.HIGHEST);
|
||||
boolean hasProperBraceBalance = SyntaxBuilderUtil.hasProperBraceBalance(
|
||||
seq, lexer, JavaSyntaxTokenType.LBRACE, JavaSyntaxTokenType.RBRACE,
|
||||
() -> ProgressManager.checkCanceled()
|
||||
);
|
||||
return hasProperBraceBalance ? NO_ERRORS : FATAL_ERROR;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean reuseCollapsedTokens() {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
class FrontBackTypeTextElementType extends ICodeFragmentElementType {
|
||||
private final int myFlags;
|
||||
|
||||
public FrontBackTypeTextElementType(@NonNls String debugName, int flags) {
|
||||
super(debugName, JavaLanguage.INSTANCE);
|
||||
myFlags = flags;
|
||||
}
|
||||
|
||||
private final JavaParserUtil.ParserWrapper myParser = new JavaParserUtil.ParserWrapper() {
|
||||
@Override
|
||||
public void parse(@NotNull SyntaxTreeBuilder builder, @NotNull LanguageLevel languageLevel) {
|
||||
int flags = ReferenceParser.EAT_LAST_DOT | ReferenceParser.ELLIPSIS | ReferenceParser.WILDCARD | myFlags;
|
||||
new JavaParser(languageLevel).getReferenceParser().parseType(builder, flags);
|
||||
}
|
||||
};
|
||||
|
||||
@Override
|
||||
public @Nullable ASTNode parseContents(final @NotNull ASTNode chameleon) {
|
||||
return JavaParserUtil.parseFragmentWithHighestLanguageLevel(chameleon, myParser, JavaLexer::new);
|
||||
}
|
||||
}
|
||||
|
||||
class StatementThinCodeFragmentElementType extends JavaElementType.ThinCodeFragmentElementType {
|
||||
public StatementThinCodeFragmentElementType() {
|
||||
super("STATEMENTS", (builder, languageLevel) -> {
|
||||
new JavaParser(languageLevel).getStatementParser().parseStatements(builder);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
class MemberThinCodeFragmentElementType extends JavaElementType.ThinCodeFragmentElementType {
|
||||
public MemberThinCodeFragmentElementType() {
|
||||
super("MEMBERS", (builder, languageLevel) -> {
|
||||
new JavaParser(languageLevel).getDeclarationParser().parseClassBodyDeclarations(builder, false);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
class ExpressionThinCodeFragmentElementType extends JavaElementType.ThinCodeFragmentElementType {
|
||||
public ExpressionThinCodeFragmentElementType() {
|
||||
super("EXPRESSION_TEXT", (builder, languageLevel) -> {
|
||||
new JavaParser(languageLevel).getExpressionParser().parse(builder);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
class ReferenceThinCodeFragmentElementType extends JavaElementType.ThinCodeFragmentElementType {
|
||||
public ReferenceThinCodeFragmentElementType() {
|
||||
super("REFERENCE_TEXT", (builder, languageLevel) -> {
|
||||
new JavaParser(languageLevel).getReferenceParser().parseJavaCodeReference(builder, false, true, false, false);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
class ThinCodeFragmentElementType extends ICodeFragmentElementType {
|
||||
private final JavaParserUtil.ParserWrapper myParser;
|
||||
|
||||
private ThinCodeFragmentElementType(@NotNull String debugName,
|
||||
@NotNull JavaParserUtil.ParserWrapper parser) {
|
||||
super(debugName, JavaLanguage.INSTANCE);
|
||||
myParser = parser;
|
||||
}
|
||||
|
||||
@Override
|
||||
public @Nullable ASTNode parseContents(final @NotNull ASTNode chameleon) {
|
||||
return JavaParserUtil.parseFragmentWithHighestLanguageLevel(chameleon, myParser, JavaLexer::new);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user