From f89994558fb924abb46d31863ea2c8240ba638ef Mon Sep 17 00:00:00 2001 From: Max Medvedev Date: Sat, 15 Mar 2025 19:09:30 +0100 Subject: [PATCH] IDEA-359853 update java parser tests GitOrigin-RevId: 193dcd64366ee4cf583967ce77852830a21342de --- .../AbstractBasicJavaParsingTestCase.java | 10 +- ...tractBasicJavaParsingTestConfigurator.java | 9 +- .../java/parser/JavaParsingTestCase.java | 92 ------------------- .../parser/JavaParsingTestConfigurator.java | 76 ++++++++++----- .../parser/partial/AnnotationParserTest.java | 4 +- .../parser/partial/DeclarationParserTest.java | 4 +- .../parser/partial/ExpressionParserTest.java | 6 +- .../java/parser/partial/FileParserTest.java | 4 +- .../java/parser/partial/ModuleParserTest.java | 4 +- .../parser/partial/PatternParserTest.java | 8 +- .../parser/partial/ReferenceParserTest.java | 12 +-- .../parser/partial/StatementParserTest.java | 6 +- .../testFramework/ParsingTestCase.java | 10 +- 13 files changed, 94 insertions(+), 151 deletions(-) diff --git a/java/java-frontback-tests/testSrc/com/intellij/java/parser/AbstractBasicJavaParsingTestCase.java b/java/java-frontback-tests/testSrc/com/intellij/java/parser/AbstractBasicJavaParsingTestCase.java index 6ac0d5f143b9..d5d2212467b1 100644 --- a/java/java-frontback-tests/testSrc/com/intellij/java/parser/AbstractBasicJavaParsingTestCase.java +++ b/java/java-frontback-tests/testSrc/com/intellij/java/parser/AbstractBasicJavaParsingTestCase.java @@ -4,8 +4,10 @@ package com.intellij.java.parser; import com.intellij.PathJavaTestUtil; import com.intellij.lang.Language; import com.intellij.lang.LanguageExtension; -import com.intellij.lang.PsiBuilder; +import com.intellij.lang.java.JavaLanguage; +import com.intellij.lang.java.parser.BasicJavaParserUtil; import com.intellij.platform.backend.workspace.WorkspaceModelTopics; +import com.intellij.platform.syntax.psi.LanguageSyntaxDefinitions; import com.intellij.pom.java.LanguageLevel; import com.intellij.psi.PsiFile; import com.intellij.psi.impl.DebugUtil; @@ -14,7 +16,6 @@ import com.intellij.testFramework.TestDataFile; import org.jetbrains.annotations.NotNull; import java.io.IOException; -import java.util.function.Consumer; public abstract class AbstractBasicJavaParsingTestCase extends ParsingTestCase { @@ -34,6 +35,7 @@ public abstract class AbstractBasicJavaParsingTestCase extends ParsingTestCase { protected void setUp() throws Exception { super.setUp(); getProject().registerService(WorkspaceModelTopics.class, new WorkspaceModelTopics()); + addExplicit(LanguageSyntaxDefinitions.getINSTANCE(), JavaLanguage.INSTANCE, myConfigurator.getJavaSyntaxDefinition()); myConfigurator.setUp(this); } @@ -54,7 +56,7 @@ public abstract class AbstractBasicJavaParsingTestCase extends ParsingTestCase { } - protected void doParserTest(Consumer parser) { + protected void doParserTest(BasicJavaParserUtil.@NotNull ParserWrapper parser) { String name = getTestName(false); try { doParserTest(loadFile(name + "." + myFileExt), parser); @@ -78,7 +80,7 @@ public abstract class AbstractBasicJavaParsingTestCase extends ParsingTestCase { DebugUtil.nodeTreeAsElementTypeToString(file.getNode(), !skipSpaces()).trim()); } - protected void doParserTest(String text, Consumer parser) { + protected void doParserTest(String text, BasicJavaParserUtil.@NotNull ParserWrapper parser) { String name = getTestName(false); myFile = myConfigurator.createPsiFile(this, name, text, parser); try { diff --git a/java/java-frontback-tests/testSrc/com/intellij/java/parser/AbstractBasicJavaParsingTestConfigurator.java b/java/java-frontback-tests/testSrc/com/intellij/java/parser/AbstractBasicJavaParsingTestConfigurator.java index 98cfe88fa345..4f6b2f4b99e5 100644 --- a/java/java-frontback-tests/testSrc/com/intellij/java/parser/AbstractBasicJavaParsingTestConfigurator.java +++ b/java/java-frontback-tests/testSrc/com/intellij/java/parser/AbstractBasicJavaParsingTestConfigurator.java @@ -2,16 +2,17 @@ package com.intellij.java.parser; import com.intellij.lang.ParserDefinition; -import com.intellij.lang.PsiBuilder; +import com.intellij.lang.java.parser.BasicJavaParserUtil; +import com.intellij.platform.syntax.psi.LanguageSyntaxDefinition; import com.intellij.pom.java.LanguageLevel; import com.intellij.psi.PsiFile; import org.jetbrains.annotations.NotNull; -import java.util.function.Consumer; - public interface AbstractBasicJavaParsingTestConfigurator { ParserDefinition getJavaParserDefinition(); + LanguageSyntaxDefinition getJavaSyntaxDefinition(); + void setUp(@NotNull AbstractBasicJavaParsingTestCase thinJavaParsingTestCase); void configure(@NotNull PsiFile file); @@ -20,7 +21,7 @@ public interface AbstractBasicJavaParsingTestConfigurator { PsiFile createPsiFile(@NotNull AbstractBasicJavaParsingTestCase thinJavaParsingTestCase, @NotNull String name, @NotNull String text, - @NotNull Consumer parser); + @NotNull BasicJavaParserUtil.ParserWrapper parser); boolean checkPsi(); diff --git a/java/java-tests/testSrc/com/intellij/java/parser/JavaParsingTestCase.java b/java/java-tests/testSrc/com/intellij/java/parser/JavaParsingTestCase.java index 43d161d85db9..a380fa0fa540 100644 --- a/java/java-tests/testSrc/com/intellij/java/parser/JavaParsingTestCase.java +++ b/java/java-tests/testSrc/com/intellij/java/parser/JavaParsingTestCase.java @@ -2,42 +2,22 @@ package com.intellij.java.parser; import com.intellij.JavaTestUtil; -import com.intellij.ide.highlighter.JavaFileType; -import com.intellij.lang.ASTNode; import com.intellij.lang.LanguageASTFactory; import com.intellij.lang.ParserDefinition; -import com.intellij.lang.PsiBuilder; import com.intellij.lang.java.JavaLanguage; -import com.intellij.lang.java.JavaParserDefinition; -import com.intellij.lang.java.parser.JavaParserUtil; import com.intellij.openapi.roots.LanguageLevelProjectExtension; import com.intellij.openapi.roots.impl.LanguageLevelProjectExtensionImpl; import com.intellij.pom.java.LanguageLevel; -import com.intellij.psi.FileViewProvider; import com.intellij.psi.PsiFile; -import com.intellij.psi.PsiManager; -import com.intellij.psi.SingleRootFileViewProvider; -import com.intellij.psi.impl.source.PsiJavaFileImpl; -import com.intellij.psi.impl.source.tree.FileElement; import com.intellij.psi.impl.source.tree.JavaASTFactory; -import com.intellij.psi.tree.IFileElementType; import com.intellij.psi.util.PsiUtil; -import com.intellij.testFramework.LightVirtualFile; import com.intellij.testFramework.ParsingTestCase; import com.intellij.platform.backend.workspace.WorkspaceModelTopics; import org.jetbrains.annotations.NotNull; -import java.io.IOException; -import java.util.function.Consumer; - public abstract class JavaParsingTestCase extends ParsingTestCase { private LanguageLevel myLanguageLevel; - @SuppressWarnings("JUnitTestCaseWithNonTrivialConstructors") - public JavaParsingTestCase(String dataPath) { - this(dataPath, "java", new JavaParserDefinition()); - } - public JavaParsingTestCase(String dataPath, String fileExt, ParserDefinition... parserDefinitions) { super("psi/" + dataPath, fileExt, parserDefinitions); } @@ -61,76 +41,4 @@ public abstract class JavaParsingTestCase extends ParsingTestCase { protected void setLanguageLevel(@NotNull LanguageLevel languageLevel) { myLanguageLevel = languageLevel; } - - protected void doParserTest(Consumer parser) { - String name = getTestName(false); - try { - doParserTest(loadFile(name + "." + myFileExt), parser); - } - catch (IOException e) { - throw new RuntimeException(e); - } - } - - protected void doParserTest(String text, Consumer parser) { - String name = getTestName(false); - myFile = createPsiFile(name, text, parser); - myFile.putUserData(PsiUtil.FILE_LANGUAGE_LEVEL_KEY, myLanguageLevel); - try { - checkResult(name, myFile); - } - catch (IOException e) { - throw new RuntimeException(e); - } - } - - private static IFileElementType TEST_FILE_ELEMENT_TYPE = null; - private static Consumer TEST_PARSER; - - private PsiFile createPsiFile(String name, String text, Consumer parser) { - if (TEST_FILE_ELEMENT_TYPE == null) { - TEST_FILE_ELEMENT_TYPE = new MyIFileElementType(); - } - - TEST_PARSER = parser; - - LightVirtualFile virtualFile = new LightVirtualFile(name + '.' + myFileExt, JavaFileType.INSTANCE, text, -1); - FileViewProvider viewProvider = new SingleRootFileViewProvider(PsiManager.getInstance(getProject()), virtualFile, true); - return new PsiJavaFileImpl(viewProvider) { - @NotNull - @Override - protected FileElement createFileElement(@NotNull CharSequence text) { - return new FileElement(TEST_FILE_ELEMENT_TYPE, text); - } - }; - } - - private static PsiBuilder createBuilder(ASTNode chameleon) { - PsiBuilder builder = JavaParserUtil.createBuilder(chameleon); - builder.setDebugMode(true); - return builder; - } - - private static class MyIFileElementType extends IFileElementType { - MyIFileElementType() { - super("test.java.file", JavaLanguage.INSTANCE); - } - - @Override - public ASTNode parseContents(@NotNull ASTNode chameleon) { - PsiBuilder builder = createBuilder(chameleon); - - PsiBuilder.Marker root = builder.mark(); - TEST_PARSER.accept(builder); - if (!builder.eof()) { - PsiBuilder.Marker unparsed = builder.mark(); - while (!builder.eof()) builder.advanceLexer(); - unparsed.error("Unparsed tokens"); - } - root.done(this); - - ASTNode rootNode = builder.getTreeBuilt(); - return rootNode.getFirstChildNode(); - } - } } \ No newline at end of file diff --git a/java/java-tests/testSrc/com/intellij/java/parser/JavaParsingTestConfigurator.java b/java/java-tests/testSrc/com/intellij/java/parser/JavaParsingTestConfigurator.java index 6189835c4cfe..e1f13166f4c8 100644 --- a/java/java-tests/testSrc/com/intellij/java/parser/JavaParsingTestConfigurator.java +++ b/java/java-tests/testSrc/com/intellij/java/parser/JavaParsingTestConfigurator.java @@ -3,15 +3,18 @@ package com.intellij.java.parser; import com.intellij.JavaTestUtil; import com.intellij.ide.highlighter.JavaFileType; -import com.intellij.lang.ASTNode; -import com.intellij.lang.LanguageASTFactory; -import com.intellij.lang.ParserDefinition; -import com.intellij.lang.PsiBuilder; +import com.intellij.java.frontback.psi.impl.syntax.JavaSyntaxDefinitionExtension; +import com.intellij.lang.*; import com.intellij.lang.java.JavaLanguage; import com.intellij.lang.java.JavaParserDefinition; +import com.intellij.lang.java.parser.BasicJavaParserUtil; import com.intellij.lang.java.parser.JavaParserUtil; +import com.intellij.lang.java.syntax.JavaElementTypeConverterExtension; import com.intellij.openapi.roots.LanguageLevelProjectExtension; import com.intellij.openapi.roots.impl.LanguageLevelProjectExtensionImpl; +import com.intellij.platform.syntax.SyntaxElementType; +import com.intellij.platform.syntax.parser.SyntaxTreeBuilder; +import com.intellij.platform.syntax.psi.*; import com.intellij.pom.java.LanguageLevel; import com.intellij.psi.FileViewProvider; import com.intellij.psi.PsiFile; @@ -23,10 +26,9 @@ import com.intellij.psi.impl.source.tree.JavaASTFactory; import com.intellij.psi.tree.IFileElementType; import com.intellij.psi.util.PsiUtil; import com.intellij.testFramework.LightVirtualFile; +import kotlin.Pair; import org.jetbrains.annotations.NotNull; -import java.util.function.Consumer; - public class JavaParsingTestConfigurator implements AbstractBasicJavaParsingTestConfigurator { private LanguageLevel myLanguageLevel = JavaTestUtil.getMaxRegisteredLanguageLevel(); @@ -35,28 +37,42 @@ public class JavaParsingTestConfigurator implements AbstractBasicJavaParsingTest return new JavaParserDefinition(); } + @Override + public LanguageSyntaxDefinition getJavaSyntaxDefinition() { + return new JavaSyntaxDefinitionExtension(); + } + @Override public void setUp(@NotNull AbstractBasicJavaParsingTestCase thinJavaParsingTestCase) { thinJavaParsingTestCase.getProject() .registerService(LanguageLevelProjectExtension.class, new LanguageLevelProjectExtensionImpl(thinJavaParsingTestCase.getProject())); - thinJavaParsingTestCase.addExplicit(LanguageASTFactory.INSTANCE, JavaLanguage.INSTANCE, new JavaASTFactory()); + + JavaLanguage language = JavaLanguage.INSTANCE; + LanguageASTFactory languageASTFactory = LanguageASTFactory.INSTANCE; + thinJavaParsingTestCase.addExplicit(languageASTFactory, language, new JavaASTFactory()); + LanguageExtension elementTypeConverters = ElementTypeConverters.getInstance(); + + thinJavaParsingTestCase.addExplicit(elementTypeConverters, language, new JavaElementTypeConverterExtension()); + thinJavaParsingTestCase.addExplicit(elementTypeConverters, language, new JavaTestElementTypeConverterExtension()); + + thinJavaParsingTestCase.clearCachesOfLanguageExtension(language, languageASTFactory); + thinJavaParsingTestCase.clearCachesOfLanguageExtension(language, elementTypeConverters); } @Override public void configure(@NotNull PsiFile file) { file.putUserData(PsiUtil.FILE_LANGUAGE_LEVEL_KEY, myLanguageLevel); + LANGUAGE_LEVEL = myLanguageLevel; } - private static IFileElementType TEST_FILE_ELEMENT_TYPE = null; - private static Consumer TEST_PARSER; + private static final MyIFileElementType myTestFileElementType = new MyIFileElementType(); + private static final SyntaxElementType mySyntaxElementType = new SyntaxElementType("test.java.file"); + private static BasicJavaParserUtil.ParserWrapper TEST_PARSER; + private static LanguageLevel LANGUAGE_LEVEL; @Override - public @NotNull PsiFile createPsiFile(@NotNull AbstractBasicJavaParsingTestCase thinJavaParsingTestCase, @NotNull String name, @NotNull String text, @NotNull Consumer parser) { - if (TEST_FILE_ELEMENT_TYPE == null) { - TEST_FILE_ELEMENT_TYPE = new MyIFileElementType(); - } - + public @NotNull PsiFile createPsiFile(@NotNull AbstractBasicJavaParsingTestCase thinJavaParsingTestCase, @NotNull String name, @NotNull String text, BasicJavaParserUtil.@NotNull ParserWrapper parser) { TEST_PARSER = parser; LightVirtualFile virtualFile = new LightVirtualFile(name + '.' + "java", JavaFileType.INSTANCE, text, -1); @@ -66,7 +82,7 @@ public class JavaParsingTestConfigurator implements AbstractBasicJavaParsingTest @NotNull @Override protected FileElement createFileElement(@NotNull CharSequence text) { - return new FileElement(TEST_FILE_ELEMENT_TYPE, text); + return new FileElement(myTestFileElementType, text); } }; configure(file); @@ -79,12 +95,12 @@ public class JavaParsingTestConfigurator implements AbstractBasicJavaParsingTest } @Override - public void setLanguageLevel(@NotNull LanguageLevel level) { + public void setLanguageLevel(@NotNull com.intellij.pom.java.LanguageLevel level) { myLanguageLevel = level; } - private static PsiBuilder createBuilder(ASTNode chameleon) { - PsiBuilder builder = JavaParserUtil.createBuilder(chameleon); + private static PsiSyntaxBuilder createBuilder(ASTNode chameleon) { + PsiSyntaxBuilder builder = JavaParserUtil.createSyntaxBuilder(chameleon).getFirst(); builder.setDebugMode(true); return builder; } @@ -96,19 +112,29 @@ public class JavaParsingTestConfigurator implements AbstractBasicJavaParsingTest @Override public ASTNode parseContents(@NotNull ASTNode chameleon) { - PsiBuilder builder = createBuilder(chameleon); - - PsiBuilder.Marker root = builder.mark(); - TEST_PARSER.accept(builder); + PsiSyntaxBuilder psiBuilder = createBuilder(chameleon); + SyntaxTreeBuilder builder = psiBuilder.getSyntaxTreeBuilder(); + SyntaxTreeBuilder.Marker root = builder.mark(); + TEST_PARSER.parse(builder, LANGUAGE_LEVEL); if (!builder.eof()) { - PsiBuilder.Marker unparsed = builder.mark(); + SyntaxTreeBuilder.@NotNull Marker unparsed = builder.mark(); while (!builder.eof()) builder.advanceLexer(); unparsed.error("Unparsed tokens"); } - root.done(this); + root.done(mySyntaxElementType); - ASTNode rootNode = builder.getTreeBuilt(); + ASTNode rootNode = psiBuilder.getTreeBuilt(); return rootNode.getFirstChildNode(); } } + + private static class JavaTestElementTypeConverterExtension implements ElementTypeConverterFactory { + public static final @NotNull ElementTypeConverter CONVERTER = + ElementTypeConverterKt.elementTypeConverterOf(new Pair<>(mySyntaxElementType, myTestFileElementType)); + + @Override + public @NotNull ElementTypeConverter getElementTypeConverter() { + return CONVERTER; + } + } } diff --git a/java/java-tests/testSrc/com/intellij/java/parser/partial/AnnotationParserTest.java b/java/java-tests/testSrc/com/intellij/java/parser/partial/AnnotationParserTest.java index 8993b74b4476..a3719034406e 100644 --- a/java/java-tests/testSrc/com/intellij/java/parser/partial/AnnotationParserTest.java +++ b/java/java-tests/testSrc/com/intellij/java/parser/partial/AnnotationParserTest.java @@ -16,7 +16,7 @@ package com.intellij.java.parser.partial; import com.intellij.java.parser.JavaParsingTestConfigurator; -import com.intellij.lang.java.parser.JavaParser; +import com.intellij.java.syntax.parser.JavaParser; public class AnnotationParserTest extends AbstractBasicAnnotationParserTest { public AnnotationParserTest() { @@ -25,6 +25,6 @@ public class AnnotationParserTest extends AbstractBasicAnnotationParserTest { @Override protected void doParserTest(String text) { - doParserTest(text, builder -> JavaParser.INSTANCE.getDeclarationParser().parseAnnotations(builder)); + doParserTest(text, (builder, languageLevel) -> new JavaParser(languageLevel).getDeclarationParser().parseAnnotations(builder)); } } \ No newline at end of file diff --git a/java/java-tests/testSrc/com/intellij/java/parser/partial/DeclarationParserTest.java b/java/java-tests/testSrc/com/intellij/java/parser/partial/DeclarationParserTest.java index 883b5a7ffb1c..183470e512d4 100644 --- a/java/java-tests/testSrc/com/intellij/java/parser/partial/DeclarationParserTest.java +++ b/java/java-tests/testSrc/com/intellij/java/parser/partial/DeclarationParserTest.java @@ -2,7 +2,7 @@ package com.intellij.java.parser.partial; import com.intellij.java.parser.JavaParsingTestConfigurator; -import com.intellij.lang.java.parser.JavaParser; +import com.intellij.java.syntax.parser.JavaParser; public class DeclarationParserTest extends AbstractBasicDeclarationParserTest { @@ -12,6 +12,6 @@ public class DeclarationParserTest extends AbstractBasicDeclarationParserTest { @Override protected void doParserTest(String text, boolean isAnnotation, boolean isEnum) { - doParserTest(text, builder -> JavaParser.INSTANCE.getDeclarationParser().parseClassBodyWithBraces(builder, isAnnotation, isEnum)); + doParserTest(text, (builder, languageLevel) -> new JavaParser(languageLevel).getDeclarationParser().parseClassBodyWithBraces(builder, isAnnotation, isEnum)); } } \ No newline at end of file diff --git a/java/java-tests/testSrc/com/intellij/java/parser/partial/ExpressionParserTest.java b/java/java-tests/testSrc/com/intellij/java/parser/partial/ExpressionParserTest.java index 9dff039e3e3a..375a7ff9bbe1 100644 --- a/java/java-tests/testSrc/com/intellij/java/parser/partial/ExpressionParserTest.java +++ b/java/java-tests/testSrc/com/intellij/java/parser/partial/ExpressionParserTest.java @@ -2,7 +2,7 @@ package com.intellij.java.parser.partial; import com.intellij.java.parser.JavaParsingTestConfigurator; -import com.intellij.lang.java.parser.JavaParser; +import com.intellij.java.syntax.parser.JavaParser; public class ExpressionParserTest extends AbstractBasicExpressionParserTest { public ExpressionParserTest() { @@ -11,11 +11,11 @@ public class ExpressionParserTest extends AbstractBasicExpressionParserTest { @Override protected void doParserTest(String text) { - doParserTest(text, builder -> JavaParser.INSTANCE.getExpressionParser().parse(builder)); + doParserTest(text, (builder, languageLevel) -> new JavaParser(languageLevel).getExpressionParser().parse(builder)); } @Override protected void doParserTest() { - doParserTest(builder -> JavaParser.INSTANCE.getExpressionParser().parse(builder)); + doParserTest((builder, languageLevel) -> new JavaParser(languageLevel).getExpressionParser().parse(builder)); } } \ No newline at end of file diff --git a/java/java-tests/testSrc/com/intellij/java/parser/partial/FileParserTest.java b/java/java-tests/testSrc/com/intellij/java/parser/partial/FileParserTest.java index 75ab21591cca..2f351e3172f8 100644 --- a/java/java-tests/testSrc/com/intellij/java/parser/partial/FileParserTest.java +++ b/java/java-tests/testSrc/com/intellij/java/parser/partial/FileParserTest.java @@ -16,7 +16,7 @@ package com.intellij.java.parser.partial; import com.intellij.java.parser.JavaParsingTestConfigurator; -import com.intellij.lang.java.parser.JavaParser; +import com.intellij.java.syntax.parser.JavaParser; public class FileParserTest extends AbstractBasicFileParserTest { public FileParserTest() { @@ -25,6 +25,6 @@ public class FileParserTest extends AbstractBasicFileParserTest { @Override protected void doParserTest(String text) { - doParserTest(text, builder -> JavaParser.INSTANCE.getFileParser().parse(builder)); + doParserTest(text, (builder, languageLevel) -> new JavaParser(languageLevel).getFileParser().parse(builder)); } } \ No newline at end of file diff --git a/java/java-tests/testSrc/com/intellij/java/parser/partial/ModuleParserTest.java b/java/java-tests/testSrc/com/intellij/java/parser/partial/ModuleParserTest.java index 0677f7537363..2d51b5263bcc 100644 --- a/java/java-tests/testSrc/com/intellij/java/parser/partial/ModuleParserTest.java +++ b/java/java-tests/testSrc/com/intellij/java/parser/partial/ModuleParserTest.java @@ -16,7 +16,7 @@ package com.intellij.java.parser.partial; import com.intellij.java.parser.JavaParsingTestConfigurator; -import com.intellij.lang.java.parser.JavaParser; +import com.intellij.java.syntax.parser.JavaParser; public class ModuleParserTest extends AbstractBasicModuleParserTest { public ModuleParserTest() { @@ -25,6 +25,6 @@ public class ModuleParserTest extends AbstractBasicModuleParserTest { @Override protected void doParserTest(String text) { - doParserTest(text, builder -> JavaParser.INSTANCE.getFileParser().parse(builder)); + doParserTest(text, (builder, languageLevel) -> new JavaParser(languageLevel).getFileParser().parse(builder)); } } \ No newline at end of file diff --git a/java/java-tests/testSrc/com/intellij/java/parser/partial/PatternParserTest.java b/java/java-tests/testSrc/com/intellij/java/parser/partial/PatternParserTest.java index ed37ad69fe2c..e25d42a1d659 100644 --- a/java/java-tests/testSrc/com/intellij/java/parser/partial/PatternParserTest.java +++ b/java/java-tests/testSrc/com/intellij/java/parser/partial/PatternParserTest.java @@ -2,8 +2,8 @@ package com.intellij.java.parser.partial; import com.intellij.java.parser.JavaParsingTestConfigurator; -import com.intellij.lang.java.parser.JavaParser; -import com.intellij.lang.java.parser.PatternParser; +import com.intellij.java.syntax.parser.JavaParser; +import com.intellij.java.syntax.parser.PatternParser; public class PatternParserTest extends AbstractBasicPatternParserTest { public PatternParserTest() { @@ -12,8 +12,8 @@ public class PatternParserTest extends AbstractBasicPatternParserTest { @Override protected void doParserTest(String text) { - doParserTest(text, builder -> { - PatternParser parser = JavaParser.INSTANCE.getPatternParser(); + doParserTest(text, (builder, languageLevel) -> { + PatternParser parser = new JavaParser(languageLevel).getPatternParser(); if (!parser.isPattern(builder)) { throw new IllegalArgumentException("Pattern is not expected"); } diff --git a/java/java-tests/testSrc/com/intellij/java/parser/partial/ReferenceParserTest.java b/java/java-tests/testSrc/com/intellij/java/parser/partial/ReferenceParserTest.java index bd77716cde71..a318d098dbc0 100644 --- a/java/java-tests/testSrc/com/intellij/java/parser/partial/ReferenceParserTest.java +++ b/java/java-tests/testSrc/com/intellij/java/parser/partial/ReferenceParserTest.java @@ -2,8 +2,8 @@ package com.intellij.java.parser.partial; import com.intellij.java.parser.JavaParsingTestConfigurator; -import com.intellij.lang.java.parser.BasicReferenceParser; -import com.intellij.lang.java.parser.JavaParser; +import com.intellij.java.syntax.parser.JavaParser; +import com.intellij.java.syntax.parser.ReferenceParser; public class ReferenceParserTest extends AbstractBasicReferenceParserTest { public ReferenceParserTest() { @@ -12,17 +12,17 @@ public class ReferenceParserTest extends AbstractBasicReferenceParserTest { @Override protected void doRefParserTest(String text, boolean incomplete) { - doParserTest(text, builder -> JavaParser.INSTANCE.getReferenceParser().parseJavaCodeReference(builder, incomplete, false, false, false)); + doParserTest(text, (builder, languageLevel) -> new JavaParser(languageLevel).getReferenceParser().parseJavaCodeReference(builder, incomplete, false, false, false)); } @Override protected void doTypeParserTest(String text) { - int flags = BasicReferenceParser.ELLIPSIS | BasicReferenceParser.DIAMONDS | BasicReferenceParser.DISJUNCTIONS; - doParserTest(text, builder -> JavaParser.INSTANCE.getReferenceParser().parseType(builder, flags)); + int flags = ReferenceParser.ELLIPSIS | ReferenceParser.DIAMONDS | ReferenceParser.DISJUNCTIONS; + doParserTest(text, (builder, languageLevel) -> new JavaParser(languageLevel).getReferenceParser().parseType(builder, flags)); } @Override protected void doTypeParamsParserTest(String text) { - doParserTest(text, builder -> JavaParser.INSTANCE.getReferenceParser().parseTypeParameters(builder)); + doParserTest(text, (builder, languageLevel) -> new JavaParser(languageLevel).getReferenceParser().parseTypeParameters(builder)); } } \ No newline at end of file diff --git a/java/java-tests/testSrc/com/intellij/java/parser/partial/StatementParserTest.java b/java/java-tests/testSrc/com/intellij/java/parser/partial/StatementParserTest.java index 122d3783a275..bc81e6937f1f 100644 --- a/java/java-tests/testSrc/com/intellij/java/parser/partial/StatementParserTest.java +++ b/java/java-tests/testSrc/com/intellij/java/parser/partial/StatementParserTest.java @@ -2,7 +2,7 @@ package com.intellij.java.parser.partial; import com.intellij.java.parser.JavaParsingTestConfigurator; -import com.intellij.lang.java.parser.JavaParser; +import com.intellij.java.syntax.parser.JavaParser; public class StatementParserTest extends AbstractBasicStatementParserTest { public StatementParserTest() { @@ -11,11 +11,11 @@ public class StatementParserTest extends AbstractBasicStatementParserTest { @Override protected void doBlockParserTest(String text) { - doParserTest(text, builder -> JavaParser.INSTANCE.getStatementParser().parseCodeBlockDeep(builder, true)); + doParserTest(text, (builder, languageLevel) -> new JavaParser(languageLevel).getStatementParser().parseCodeBlockDeep(builder, true)); } @Override protected void doParserTest(String text) { - doParserTest(text, builder -> JavaParser.INSTANCE.getStatementParser().parseStatements(builder)); + doParserTest(text, (builder, languageLevel) -> new JavaParser(languageLevel).getStatementParser().parseStatements(builder)); } } \ No newline at end of file diff --git a/platform/testFramework/src/com/intellij/testFramework/ParsingTestCase.java b/platform/testFramework/src/com/intellij/testFramework/ParsingTestCase.java index 822e6680a94b..d3b1e7e500e6 100644 --- a/platform/testFramework/src/com/intellij/testFramework/ParsingTestCase.java +++ b/platform/testFramework/src/com/intellij/testFramework/ParsingTestCase.java @@ -46,6 +46,7 @@ import com.intellij.util.SystemProperties; import com.intellij.util.containers.ContainerUtil; import com.intellij.util.messages.MessageBus; import com.intellij.util.pico.DefaultPicoContainer; +import org.jetbrains.annotations.ApiStatus; import org.jetbrains.annotations.NotNull; import org.picocontainer.ComponentAdapter; @@ -156,8 +157,13 @@ public abstract class ParsingTestCase extends UsefulTestCase { return definition; } }); - LanguageParserDefinitions.INSTANCE.clearCache(language); - disposeOnTearDown(() -> LanguageParserDefinitions.INSTANCE.clearCache(language)); + clearCachesOfLanguageExtension(language, LanguageParserDefinitions.INSTANCE); + } + + @ApiStatus.Internal + public final void clearCachesOfLanguageExtension(Language language, LanguageExtension instance) { + instance.clearCache(language); + disposeOnTearDown(() -> instance.clearCache(language)); } public void configureFromParserDefinition(@NotNull ParserDefinition definition, String extension) {