[javadoc] Add interfaces for fragment reference PSI elements

IJ-MR-174748

GitOrigin-RevId: 0db4a62e4216d01f52e49dfbe68f94654709c097
This commit is contained in:
Louis Vignier
2025-09-17 19:25:19 +00:00
committed by intellij-monorepo-bot
parent c6cc5e8224
commit 3cf7c13a11
15 changed files with 54 additions and 33 deletions
@@ -21,9 +21,9 @@ import com.intellij.packageDependencies.DependencyValidationManager;
import com.intellij.packageDependencies.DependencyValidationManagerImpl;
import com.intellij.psi.*;
import com.intellij.psi.impl.light.LightRecordField;
import com.intellij.psi.impl.source.javadoc.PsiDocFragmentName;
import com.intellij.psi.impl.source.tree.ElementType;
import com.intellij.psi.impl.source.tree.TreeUtil;
import com.intellij.psi.javadoc.PsiDocFragmentName;
import com.intellij.psi.search.scope.packageSet.NamedScope;
import com.intellij.psi.search.scope.packageSet.NamedScopesHolder;
import com.intellij.psi.search.scope.packageSet.PackageSet;
@@ -397,7 +397,7 @@ public final class HighlightNamesUtil {
}
static HighlightInfo highlightFragmentReference(@NotNull PsiDocFragmentName fragmentName) {
return nameBuilder(JavaHighlightInfoTypes.LOCAL_VARIABLE).range((PsiElement)fragmentName).create();
return nameBuilder(JavaHighlightInfoTypes.LOCAL_VARIABLE).range(fragmentName).create();
}
public static @NotNull @NlsSafe String formatClass(@NotNull PsiClass aClass) {
@@ -11,8 +11,8 @@ import com.intellij.openapi.project.IndexNotReadyException;
import com.intellij.openapi.project.Project;
import com.intellij.pom.java.LanguageLevel;
import com.intellij.psi.*;
import com.intellij.psi.impl.source.javadoc.PsiDocFragmentName;
import com.intellij.psi.impl.source.javadoc.PsiDocMethodOrFieldRef;
import com.intellij.psi.javadoc.PsiDocFragmentName;
import com.intellij.psi.javadoc.PsiDocTagValue;
import com.intellij.psi.util.PsiTreeUtil;
import com.intellij.psi.util.PsiUtil;
@@ -38,8 +38,6 @@ import com.intellij.psi.codeStyle.CodeStyleSettings;
import com.intellij.psi.codeStyle.JavaCodeStyleManager;
import com.intellij.psi.filters.TrueFilter;
import com.intellij.psi.impl.JavaConstantExpressionEvaluator;
import com.intellij.psi.impl.source.javadoc.PsiDocFragmentName;
import com.intellij.psi.impl.source.javadoc.PsiDocFragmentRef;
import com.intellij.psi.impl.source.javadoc.PsiDocMethodOrFieldRef;
import com.intellij.psi.impl.source.javadoc.PsiDocParamRef;
import com.intellij.psi.javadoc.*;
@@ -138,7 +136,8 @@ public final class JavaDocCompletionContributor extends CompletionContributor im
}
else if (position.getParent() instanceof PsiDocFragmentName docFragmentName) {
final PsiElement parent = docFragmentName.getParent();
final PsiClass classRef = parent instanceof PsiDocFragmentRef ? ((PsiDocFragmentRef)docFragmentName.getParent()).getScope() : null;
final PsiClass classRef = parent instanceof PsiDocFragmentRef
? ((PsiDocFragmentRef)docFragmentName.getParent()).getScope() : null;
if (classRef != null) {
for (JavaDocFragmentData anchor : JavaDocFragmentAnchorCacheKt.getJavaDocFragmentsForClass(position.getProject(), classRef)) {
result.addElement(LookupElementBuilder.create(anchor.getName()).withIcon(AllIcons.Nodes.Related));
@@ -47,7 +47,6 @@ import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.pom.java.LanguageLevel;
import com.intellij.psi.*;
import com.intellij.psi.impl.JavaConstantExpressionEvaluator;
import com.intellij.psi.impl.source.javadoc.PsiDocFragmentRef;
import com.intellij.psi.impl.source.javadoc.PsiDocMethodOrFieldRef;
import com.intellij.psi.impl.source.javadoc.PsiSnippetDocTagImpl;
import com.intellij.psi.impl.source.tree.ElementType;
@@ -19,7 +19,6 @@ import com.intellij.openapi.util.text.HtmlChunk;
import com.intellij.openapi.util.text.StringUtil;
import com.intellij.pom.java.JavaFeature;
import com.intellij.psi.*;
import com.intellij.psi.impl.source.javadoc.PsiDocFragmentRef;
import com.intellij.psi.impl.source.javadoc.PsiDocParamRef;
import com.intellij.psi.impl.source.tree.JavaDocElementType;
import com.intellij.psi.javadoc.*;
@@ -43,7 +43,6 @@ import com.intellij.psi.codeStyle.arrangement.MemberOrderService;
import com.intellij.psi.impl.compiled.ClsClassImpl;
import com.intellij.psi.impl.compiled.ClsElementImpl;
import com.intellij.psi.impl.source.codeStyle.ImportHelper;
import com.intellij.psi.impl.source.javadoc.PsiDocFragmentName;
import com.intellij.psi.impl.source.javadoc.PsiSnippetAttributeValueImpl;
import com.intellij.psi.javadoc.*;
import com.intellij.psi.search.GlobalSearchScope;
@@ -0,0 +1,18 @@
// 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.javadoc;
import com.intellij.psi.PsiClass;
import com.intellij.psi.PsiElement;
import org.jetbrains.annotations.Nullable;
/**
* Represents the name of a fragment reference, for instance {@code my-id} in {@code Foo##my-id}.
*/
public interface PsiDocFragmentName extends PsiElement {
/**
* Returns the class that contains the fragment reference.
*/
@Nullable PsiClass getScope();
}
@@ -0,0 +1,17 @@
// 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.javadoc;
import com.intellij.psi.PsiClass;
import org.jetbrains.annotations.Nullable;
/**
* Represents a fragment reference, for instance {@code Foo##my-id}.
*/
public interface PsiDocFragmentRef extends PsiDocTagValue {
/**
* Returns the class that contains the fragment reference.
*/
@Nullable PsiClass getScope();
}
@@ -5,8 +5,8 @@ import com.intellij.openapi.components.Service
import com.intellij.openapi.components.service
import com.intellij.openapi.project.Project
import com.intellij.psi.PsiClass
import com.intellij.psi.impl.source.javadoc.PsiDocFragmentName
import com.intellij.psi.javadoc.PsiDocComment
import com.intellij.psi.javadoc.PsiDocFragmentName
import com.intellij.psi.util.CachedValueProvider.Result
import com.intellij.psi.util.CachedValuesManager
import com.intellij.psi.util.PsiModificationTracker
@@ -9,9 +9,9 @@ import com.intellij.openapi.util.text.StringUtil;
import com.intellij.pom.java.LanguageLevel;
import com.intellij.psi.*;
import com.intellij.psi.codeStyle.JavaFileCodeStyleFacade;
import com.intellij.psi.impl.source.javadoc.PsiDocFragmentRef;
import com.intellij.psi.impl.source.javadoc.PsiDocMethodOrFieldRef;
import com.intellij.psi.javadoc.PsiDocComment;
import com.intellij.psi.javadoc.PsiDocFragmentRef;
import com.intellij.psi.javadoc.PsiDocTagValue;
import com.intellij.psi.search.GlobalSearchScope;
import com.intellij.psi.templateLanguages.TemplateLanguageUtil;
@@ -9,7 +9,7 @@ import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.pom.java.LanguageLevel;
import com.intellij.psi.*;
import com.intellij.psi.impl.JavaPsiImplementationHelper;
import com.intellij.psi.impl.source.javadoc.PsiDocFragmentName;
import com.intellij.psi.javadoc.PsiDocFragmentName;
import com.intellij.psi.javadoc.PsiDocToken;
import com.intellij.psi.javadoc.PsiSnippetAttributeValue;
import com.intellij.psi.util.PsiUtil;
@@ -7,7 +7,7 @@ import com.intellij.openapi.project.Project;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.pom.java.LanguageLevel;
import com.intellij.psi.*;
import com.intellij.psi.impl.source.javadoc.PsiDocFragmentName;
import com.intellij.psi.javadoc.PsiDocFragmentName;
import com.intellij.psi.javadoc.PsiDocToken;
import com.intellij.psi.javadoc.PsiSnippetAttributeValue;
import org.jetbrains.annotations.NotNull;
@@ -2,38 +2,27 @@
package com.intellij.psi.impl.source.javadoc;
import com.intellij.model.psi.PsiSymbolReference;
import com.intellij.psi.JavaElementVisitor;
import com.intellij.psi.PsiClass;
import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiElementVisitor;
import com.intellij.psi.impl.JavaPsiImplementationHelper;
import com.intellij.psi.impl.source.Constants;
import com.intellij.psi.impl.source.tree.CompositePsiElement;
import com.intellij.psi.javadoc.PsiDocTagValue;
import com.intellij.psi.javadoc.PsiDocFragmentName;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.util.Collection;
import java.util.Collections;
public class PsiDocFragmentName extends CompositePsiElement implements PsiDocTagValue, Constants {
public PsiDocFragmentName() {
public class PsiDocFragmentNameImpl extends CompositePsiElement implements PsiDocFragmentName, Constants {
public PsiDocFragmentNameImpl() {
super(DOC_FRAGMENT_NAME);
}
@Override
public void accept(@NotNull PsiElementVisitor visitor) {
if (visitor instanceof JavaElementVisitor) {
((JavaElementVisitor)visitor).visitDocTagValue(this);
}
else {
visitor.visitElement(this);
}
}
public @Nullable PsiClass getScope() {
final PsiElement parent = getParent();
return parent instanceof PsiDocFragmentRef ? ((PsiDocFragmentRef)parent).getScope() : null;
return parent instanceof PsiDocFragmentRefImpl ? ((PsiDocFragmentRefImpl)parent).getScope() : null;
}
@Override
@@ -6,12 +6,12 @@ import com.intellij.psi.PsiClass;
import com.intellij.psi.PsiElementVisitor;
import com.intellij.psi.impl.source.Constants;
import com.intellij.psi.impl.source.tree.CompositePsiElement;
import com.intellij.psi.javadoc.PsiDocTagValue;
import com.intellij.psi.javadoc.PsiDocFragmentRef;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
public class PsiDocFragmentRef extends CompositePsiElement implements PsiDocTagValue, Constants {
public PsiDocFragmentRef() {
public class PsiDocFragmentRefImpl extends CompositePsiElement implements PsiDocFragmentRef, Constants {
public PsiDocFragmentRefImpl() {
super(DOC_FRAGMENT_REF);
}
@@ -25,6 +25,7 @@ public class PsiDocFragmentRef extends CompositePsiElement implements PsiDocTagV
}
}
@Override
public @Nullable PsiClass getScope() {
return PsiDocMethodOrFieldRef.getScope(this);
}
@@ -44,8 +44,8 @@ public interface JavaDocElementType {
IElementType DOC_TAG = new JavaDocCompositeElementType("DOC_TAG", () -> new PsiDocTagImpl(), BasicJavaDocElementType.BASIC_DOC_TAG);
IElementType DOC_INLINE_TAG = new JavaDocCompositeElementType("DOC_INLINE_TAG", () -> new PsiInlineDocTagImpl(), BasicJavaDocElementType.BASIC_DOC_INLINE_TAG);
IElementType DOC_METHOD_OR_FIELD_REF = new JavaDocCompositeElementType("DOC_METHOD_OR_FIELD_REF", () -> new PsiDocMethodOrFieldRef(), BasicJavaDocElementType.BASIC_DOC_METHOD_OR_FIELD_REF);
IElementType DOC_FRAGMENT_REF = new JavaDocCompositeElementType("DOC_FRAGMENT_REF", () -> new PsiDocFragmentRef(), BasicJavaDocElementType.BASIC_DOC_FRAGMENT_REF);
IElementType DOC_FRAGMENT_NAME = new JavaDocCompositeElementType("DOC_FRAGMENT_NAME", () -> new PsiDocFragmentName(), BasicJavaDocElementType.BASIC_DOC_FRAGMENT_NAME);
IElementType DOC_FRAGMENT_REF = new JavaDocCompositeElementType("DOC_FRAGMENT_REF", () -> new PsiDocFragmentRefImpl(), BasicJavaDocElementType.BASIC_DOC_FRAGMENT_REF);
IElementType DOC_FRAGMENT_NAME = new JavaDocCompositeElementType("DOC_FRAGMENT_NAME", () -> new PsiDocFragmentNameImpl(), BasicJavaDocElementType.BASIC_DOC_FRAGMENT_NAME);
IElementType DOC_PARAMETER_REF = new JavaDocCompositeElementType("DOC_PARAMETER_REF", () -> new PsiDocParamRef(), BasicJavaDocElementType.BASIC_DOC_PARAMETER_REF);
IElementType DOC_TAG_VALUE_ELEMENT = new JavaDocParentProviderElementType("DOC_TAG_VALUE_ELEMENT", BasicJavaDocElementType.BASIC_DOC_TAG_VALUE_ELEMENT);
IElementType DOC_SNIPPET_TAG = new JavaDocCompositeElementType("DOC_SNIPPET_TAG", () -> new PsiSnippetDocTagImpl(), BasicJavaDocElementType.BASIC_DOC_SNIPPET_TAG);