follow up on IJ-CR-183248

GitOrigin-RevId: 12861b2510d3b76e30b83d7bb60250ffb9f78535
This commit is contained in:
Andrey Zaytsev
2025-11-27 13:43:52 +00:00
committed by intellij-monorepo-bot
parent 1e1c2e28c9
commit 9a8cd1e52d
4 changed files with 73 additions and 4 deletions
@@ -24,7 +24,7 @@ public class RegExpParsingTest extends ParsingTestCase {
@Override
protected void setUp() throws Exception {
super.setUp();
project.registerService(SmartPointerManager.class, new MockSmartPointerManager());
project.registerService(SmartPointerManager.class, new MockSmartPointerManager(project));
}
@Override
@@ -1,6 +1,7 @@
// 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.smartPointers;
import com.intellij.openapi.Disposable;
import com.intellij.openapi.editor.Document;
import com.intellij.openapi.editor.event.DocumentEvent;
import com.intellij.openapi.editor.impl.FrozenDocument;
@@ -16,8 +17,15 @@ import org.jetbrains.annotations.Nullable;
import java.util.List;
/**
* All implementers of {@link SmartPointerManager} should extend this class.
* One should not downcast {@link SmartPointerManager} to {@link SmartPointerManagerImpl}.
* Even though these methods are solely used by smart pointer implementations,
* this abstract class is necessary for Analyzer to be able to redirect them to the right SmartPointerManagerImpl.
* The lifetimes of smart pointers and the actual SmartPointerManagerImpl may differ.
*/
@ApiStatus.Internal
public abstract class SmartPointerManagerEx extends SmartPointerManager {
public abstract class SmartPointerManagerEx extends SmartPointerManager implements Disposable {
public abstract void fastenBelts(@NotNull VirtualFile file);
public abstract @NotNull <E extends PsiElement> SmartPsiElementPointer<E> createSmartPsiElementPointer(@NotNull E element,
@@ -30,7 +30,7 @@ import java.util.concurrent.ConcurrentMap;
import static com.intellij.reference.SoftReference.dereference;
public final class SmartPointerManagerImpl extends SmartPointerManagerEx implements Disposable {
public final class SmartPointerManagerImpl extends SmartPointerManagerEx {
private static final Logger LOG = Logger.getInstance(SmartPointerManagerImpl.class);
private final Project myProject;
private final PsiDocumentManagerEx myPsiDocManager;
@@ -1,16 +1,30 @@
// 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.mock;
import com.intellij.openapi.editor.Document;
import com.intellij.openapi.editor.event.DocumentEvent;
import com.intellij.openapi.editor.impl.FrozenDocument;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.Segment;
import com.intellij.openapi.util.TextRange;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.psi.*;
import com.intellij.psi.impl.PsiDocumentManagerEx;
import com.intellij.psi.impl.smartPointers.SmartPointerManagerEx;
import com.intellij.psi.impl.smartPointers.SmartPointerTracker;
import com.intellij.util.IncorrectOperationException;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
public class MockSmartPointerManager extends SmartPointerManager {
import java.util.List;
public class MockSmartPointerManager extends SmartPointerManagerEx {
private final Project myProject;
public MockSmartPointerManager(@NotNull Project project) {
myProject = project;
}
@Override
public @NotNull SmartPsiFileRange createSmartPsiFileRangePointer(@NotNull PsiFile psiFile, @NotNull TextRange range) {
throw new IncorrectOperationException();
@@ -65,4 +79,51 @@ public class MockSmartPointerManager extends SmartPointerManager {
public void removePointer(@NotNull SmartPsiElementPointer<?> pointer) {
}
@Override
public void fastenBelts(@NotNull VirtualFile file) {
}
@Override
public @NotNull <E extends PsiElement> SmartPsiElementPointer<E> createSmartPsiElementPointer(@NotNull E element,
PsiFile containingFile,
boolean forInjected) {
return createSmartPsiElementPointer(element);
}
@Override
public @NotNull SmartPsiFileRange createSmartPsiFileRangePointer(@NotNull PsiFile file, @NotNull TextRange range, boolean forInjected) {
throw new UnsupportedOperationException("createSmartPsiFileRangePointer not implemented in mock");
}
@Override
public @Nullable SmartPointerTracker getTracker(@NotNull VirtualFile file) {
return null;
}
@Override
public void updatePointers(@NotNull Document document, @NotNull FrozenDocument frozen, @NotNull List<? extends DocumentEvent> events) {
}
@Override
public void updatePointerTargetsAfterReparse(@NotNull VirtualFile file) {
}
@Override
public @NotNull Project getProject() {
return myProject;
}
@Override
public @NotNull PsiDocumentManagerEx getPsiDocumentManager() {
return (PsiDocumentManagerEx)PsiDocumentManager.getInstance(myProject);
}
@Override
public void dispose() {
}
}