From 7ae9d9feec5d2fff25d79981c53073170c61b506 Mon Sep 17 00:00:00 2001 From: Bart van Helvert Date: Fri, 13 Feb 2026 14:29:39 +0100 Subject: [PATCH] [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 --- .../serializers/JavaClassStubSerializer.java | 6 +++--- .../stubs/factories/JavaClassStubFactory.java | 9 +++++++++ .../psi/impl/source/JavaFileElementType.java | 2 +- .../com/intellij/java/psi/JavaStubsTest.java | 15 +++++++++++++++ 4 files changed, 28 insertions(+), 4 deletions(-) diff --git a/java/java-indexing-impl/src/com/intellij/psi/impl/java/stubs/serializers/JavaClassStubSerializer.java b/java/java-indexing-impl/src/com/intellij/psi/impl/java/stubs/serializers/JavaClassStubSerializer.java index 4b75bea503e6..c98a297f8b2d 100644 --- a/java/java-indexing-impl/src/com/intellij/psi/impl/java/stubs/serializers/JavaClassStubSerializer.java +++ b/java/java-indexing-impl/src/com/intellij/psi/impl/java/stubs/serializers/JavaClassStubSerializer.java @@ -71,9 +71,9 @@ public class JavaClassStubSerializer implements StubSerializer stub, @NotNull IndexSink sink) { if (stub.isImplicit()) { - StubElement parent = stub.getParentStub(); - if (parent instanceof PsiJavaFileStub) { - sink.occurrence(JavaStubIndexKeys.IMPLICIT_CLASSES, JavaImplicitClassUtil.getJvmName(((PsiJavaFileStub)parent).getPsi().getName())); + String name = stub.getName(); + if (name != null) { + sink.occurrence(JavaStubIndexKeys.IMPLICIT_CLASSES, name); } return; } diff --git a/java/java-psi-impl/src/com/intellij/psi/impl/java/stubs/factories/JavaClassStubFactory.java b/java/java-psi-impl/src/com/intellij/psi/impl/java/stubs/factories/JavaClassStubFactory.java index 0280d1ddd41d..bce02e138158 100644 --- a/java/java-psi-impl/src/com/intellij/psi/impl/java/stubs/factories/JavaClassStubFactory.java +++ b/java/java-psi-impl/src/com/intellij/psi/impl/java/stubs/factories/JavaClassStubFactory.java @@ -5,6 +5,7 @@ import com.intellij.lang.LighterAST; import com.intellij.lang.LighterASTNode; import com.intellij.psi.JavaTokenType; import com.intellij.psi.PsiClass; +import com.intellij.psi.PsiJavaFile; import com.intellij.psi.impl.cache.RecordUtil; import com.intellij.psi.impl.java.stubs.JavaClassElementType; import com.intellij.psi.impl.java.stubs.JavaStubElementType; @@ -18,6 +19,7 @@ import com.intellij.psi.impl.source.tree.LightTreeUtil; import com.intellij.psi.stubs.LightStubElementFactory; import com.intellij.psi.stubs.StubElement; import com.intellij.psi.tree.IElementType; +import com.intellij.psi.util.JavaImplicitClassUtil; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -107,6 +109,13 @@ public class JavaClassStubFactory implements LightStubElementFactory 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.*;