[java] Store name in implicit class stub index

Otherwise, implicit class (compact source file) stub indices won't be updated on operations like rename because the name of the implicit class is not encoded in the serialized index. #IDEA-385917 Fixed


(cherry picked from commit 531b7245cddac513e5f6a732c99a3a51771e1682)

IJ-MR-191658

GitOrigin-RevId: 544e7f127fb5cd852c65adec87aa3d6a4ffde114
This commit is contained in:
Bart van Helvert
2026-02-16 11:17:32 +00:00
committed by intellij-monorepo-bot
parent 922a65e590
commit 7ae9d9feec
4 changed files with 28 additions and 4 deletions
@@ -6,6 +6,7 @@ import com.intellij.codeInspection.dataFlow.JavaMethodContractUtil;
import com.intellij.openapi.application.Application;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.application.ReadAction;
import com.intellij.openapi.application.WriteAction;
import com.intellij.openapi.command.WriteCommandAction;
import com.intellij.openapi.editor.Document;
import com.intellij.openapi.util.Computable;
@@ -30,6 +31,7 @@ import com.intellij.psi.PsiParameter;
import com.intellij.psi.PsiParameterList;
import com.intellij.psi.PsiReferenceExpression;
import com.intellij.psi.PsiType;
import com.intellij.psi.impl.java.stubs.index.JavaImplicitClassIndex;
import com.intellij.psi.impl.source.PsiClassImpl;
import com.intellij.psi.impl.source.PsiFieldImpl;
import com.intellij.psi.impl.source.PsiFileImpl;
@@ -483,6 +485,19 @@ public class JavaStubsTest extends LightJavaCodeInsightFixtureTestCase {
PsiTestUtil.checkStubsMatchText(psiFile);
}
public void test_implicit_class_index_updated_after_file_rename() throws Exception {
PsiFile psiFile = myFixture.addFileToProject("Hello.java", "void main() {}");
GlobalSearchScope scope = GlobalSearchScope.allScope(getProject());
assertFalse(JavaImplicitClassIndex.getInstance().getElements("Hello", getProject(), scope).isEmpty());
assertTrue(JavaImplicitClassIndex.getInstance().getElements("World", getProject(), scope).isEmpty());
WriteAction.run(() -> psiFile.getVirtualFile().rename(this, "World.java"));
assertTrue(JavaImplicitClassIndex.getInstance().getElements("Hello", getProject(), scope).isEmpty());
assertFalse(JavaImplicitClassIndex.getInstance().getElements("World", getProject(), scope).isEmpty());
}
public void test_array_type_use_annotation_stubbing() {
myFixture.addClass("""
import java.lang.annotation.*;