Optimize Imports shouldn't lead to stub/PSI mismatch on record keyword inside import list

GitOrigin-RevId: 9cffe8feec30d275f97c98c8d9bae290547bc1cd
This commit is contained in:
Peter Gromov
2020-04-27 20:00:42 +00:00
committed by intellij-monorepo-bot
parent 143416a5e5
commit d81527a685
3 changed files with 23 additions and 2 deletions
@@ -408,7 +408,7 @@ public class DeclarationParser {
return parseFieldOrLocalVariable(builder, declaration, declarationStart, context);
}
private static boolean isRecordToken(PsiBuilder builder, IElementType tokenType) {
static boolean isRecordToken(PsiBuilder builder, IElementType tokenType) {
return tokenType == JavaTokenType.IDENTIFIER && PsiKeyword.RECORD.equals(builder.getTokenText()) &&
builder.lookAhead(1) == JavaTokenType.IDENTIFIER &&
getLanguageLevel(builder).isAtLeast(LanguageLevel.JDK_14_PREVIEW);
@@ -86,7 +86,7 @@ public class FileParser {
private static boolean stopImportListParsing(PsiBuilder b) {
IElementType type = b.getTokenType();
if (IMPORT_LIST_STOPPER_SET.contains(type)) return true;
if (IMPORT_LIST_STOPPER_SET.contains(type) || DeclarationParser.isRecordToken(b, type)) return true;
if (type == JavaTokenType.IDENTIFIER) {
String text = b.getTokenText();
if (PsiKeyword.OPEN.equals(text) || PsiKeyword.MODULE.equals(text)) return true;
@@ -27,7 +27,9 @@ import com.intellij.psi.codeStyle.JavaCodeStyleSettings;
import com.intellij.psi.codeStyle.PackageEntry;
import com.intellij.psi.codeStyle.PackageEntryTable;
import com.intellij.psi.codeStyle.modifier.CodeStyleSettingsModifier;
import com.intellij.testFramework.LightProjectDescriptor;
import com.intellij.testFramework.ServiceContainerUtil;
import org.jetbrains.annotations.NotNull;
public class OptimizeImportsTest extends OptimizeImportsTestCase {
static final String BASE_PATH = PathManagerEx.getTestDataPath() + "/psi/optimizeImports";
@@ -91,6 +93,25 @@ public class OptimizeImportsTest extends OptimizeImportsTestCase {
myFixture.checkResult("class Foo {}");
}
@Override
protected @NotNull LightProjectDescriptor getProjectDescriptor() {
return JAVA_14;
}
public void testNoStubPsiMismatchOnRecordInsideImportList() {
myFixture.enableInspections(new UnusedImportInspection());
myFixture.configureByText("a.java", "import java.ut<caret>il.List;\n" +
"record foo.bar.Goo;\n" +
"import java.util.Collection;\n\n" +
"class Foo {}");
myFixture.launchAction(myFixture.findSingleIntention("Optimize imports"));
// whatever: main thing it didn't throw
myFixture.checkResult("record foo.bar.Goo;\n" +
"import java.util.Collection;\n\n" +
"class Foo {}");
}
public void testPerFileImportSettings() {
CodeStyle.dropTemporarySettings(getProject());
MockCodeStyleSettingsModifier modifier = new MockCodeStyleSettingsModifier(