mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
[javadoc] Remove fqn-based lookup in JavaDocFragmentAnchorCache
IJ-MR-174748 GitOrigin-RevId: 66fecf99f6c3990aa8e4c35bb796413d83909119
This commit is contained in:
committed by
intellij-monorepo-bot
parent
39361e8124
commit
c6cc5e8224
+2
-3
@@ -139,9 +139,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 String fqn = classRef == null ? null : classRef.getQualifiedName();
|
||||
if (fqn != null) {
|
||||
for (JavaDocFragmentData anchor : JavaDocFragmentAnchorCacheKt.getJavaDocFragmentsForClass(position.getProject(), fqn)) {
|
||||
if (classRef != null) {
|
||||
for (JavaDocFragmentData anchor : JavaDocFragmentAnchorCacheKt.getJavaDocFragmentsForClass(position.getProject(), classRef)) {
|
||||
result.addElement(LookupElementBuilder.create(anchor.getName()).withIcon(AllIcons.Nodes.Related));
|
||||
}
|
||||
}
|
||||
|
||||
+7
-16
@@ -3,13 +3,10 @@ package com.intellij.codeInsight.javadoc
|
||||
|
||||
import com.intellij.openapi.components.Service
|
||||
import com.intellij.openapi.components.service
|
||||
import com.intellij.openapi.project.DumbService
|
||||
import com.intellij.openapi.project.Project
|
||||
import com.intellij.psi.JavaPsiFacade
|
||||
import com.intellij.psi.PsiClass
|
||||
import com.intellij.psi.impl.source.javadoc.PsiDocFragmentName
|
||||
import com.intellij.psi.javadoc.PsiDocComment
|
||||
import com.intellij.psi.search.GlobalSearchScope
|
||||
import com.intellij.psi.util.CachedValueProvider.Result
|
||||
import com.intellij.psi.util.CachedValuesManager
|
||||
import com.intellij.psi.util.PsiModificationTracker
|
||||
@@ -28,10 +25,7 @@ private class JavaDocFragmentCacheService {
|
||||
// Matches any HTML opening tag with an id attribute
|
||||
private val ID_PATTERN: Pattern = Pattern.compile("<[a-zA-Z0-9\\-]*[^>] id=[\"']?([^\"'> ]+)[\"']?[^>]*>", Pattern.CASE_INSENSITIVE)
|
||||
|
||||
fun getAnchors(project: Project, fqn: String): LinkedHashSet<JavaDocFragmentData> {
|
||||
val psiClass = JavaPsiFacade.getInstance(project).findClass(fqn, GlobalSearchScope.projectScope(project))
|
||||
?: return LinkedHashSet()
|
||||
|
||||
fun getAnchors(project: Project, psiClass: PsiClass): LinkedHashSet<JavaDocFragmentData> {
|
||||
val manager = CachedValuesManager.getManager(project)
|
||||
return manager.getCachedValue(psiClass) {
|
||||
val result = LinkedHashSet<JavaDocFragmentData>().apply {
|
||||
@@ -67,10 +61,10 @@ private class JavaDocFragmentCacheService {
|
||||
}
|
||||
|
||||
/**
|
||||
* Resolves all fragment data for the class corresponding to the given fully qualified name.
|
||||
* Resolves all fragment data for the class corresponding to the given [PsiClass].
|
||||
*/
|
||||
fun getJavaDocFragmentsForClass(project: Project, fqn: String): LinkedHashSet<JavaDocFragmentData> {
|
||||
return project.service<JavaDocFragmentCacheService>().getAnchors(project, fqn)
|
||||
fun getJavaDocFragmentsForClass(project: Project, psiClass: PsiClass): LinkedHashSet<JavaDocFragmentData> {
|
||||
return project.service<JavaDocFragmentCacheService>().getAnchors(project, psiClass)
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -78,12 +72,9 @@ fun getJavaDocFragmentsForClass(project: Project, fqn: String): LinkedHashSet<Ja
|
||||
* returns the fragment data and its containing class if found.
|
||||
*/
|
||||
fun resolveJavaDocFragment(project: Project, fragmentName: PsiDocFragmentName): Pair<PsiClass, JavaDocFragmentData>? {
|
||||
if (DumbService.getInstance(project).isDumb) return null
|
||||
|
||||
val psiClass = fragmentName.getScope()
|
||||
val fqn = psiClass?.qualifiedName ?: return null
|
||||
|
||||
val data = getJavaDocFragmentsForClass(project, fqn).firstOrNull { data: JavaDocFragmentData? -> data!!.name == fragmentName.text }
|
||||
val psiClass = fragmentName.getScope() ?: return null
|
||||
val data = getJavaDocFragmentsForClass(project, psiClass)
|
||||
.firstOrNull { data: JavaDocFragmentData? -> data!!.name == fragmentName.text }
|
||||
?: return null
|
||||
|
||||
return psiClass to data
|
||||
|
||||
@@ -153,10 +153,8 @@ public final class JavaDocUtil {
|
||||
String refTextCorrected,
|
||||
int fragmentIndex,
|
||||
@NotNull PsiManager manager) {
|
||||
String fqn = aClass.getQualifiedName();
|
||||
if (fqn == null) { return null; }
|
||||
String fragmentName = refTextCorrected.substring(fragmentIndex + 2);
|
||||
for (JavaDocFragmentData fragmentData : JavaDocFragmentAnchorCacheKt.getJavaDocFragmentsForClass(manager.getProject(), fqn)) {
|
||||
for (JavaDocFragmentData fragmentData : JavaDocFragmentAnchorCacheKt.getJavaDocFragmentsForClass(manager.getProject(), aClass)) {
|
||||
if (fragmentName.equals(fragmentData.getName())) {
|
||||
PsiElement ref = PsiUtilCore.getElementAtOffset(aClass.getContainingFile(), fragmentData.getOffset());
|
||||
PsiDocComment docComment = PsiTreeUtil.getParentOfType(ref, PsiDocComment.class, false);
|
||||
|
||||
-1
@@ -138,7 +138,6 @@ public class JavadocCompletionTest extends LightFixtureCompletionTestCase {
|
||||
assertTrue(getLookupElementStrings().containsAll(Arrays.asList("foo", "myName")));
|
||||
}
|
||||
|
||||
@NeedsIndex.Full
|
||||
public void testSee7() {
|
||||
configureByFile("See7.java");
|
||||
assertTrue(getLookupElementStrings().containsAll(Arrays.asList("my-id1", "my-id2", "my-id3", "my-id4")));
|
||||
|
||||
+7
-1
@@ -4,6 +4,9 @@ package com.intellij.java.indexing;
|
||||
import com.intellij.codeInsight.javadoc.JavaDocFragmentAnchorCacheKt;
|
||||
import com.intellij.codeInsight.javadoc.JavaDocFragmentData;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.psi.JavaPsiFacade;
|
||||
import com.intellij.psi.PsiClass;
|
||||
import com.intellij.psi.search.GlobalSearchScope;
|
||||
import com.intellij.testFramework.LightJavaCodeInsightTestCase;
|
||||
import org.intellij.lang.annotations.Language;
|
||||
|
||||
@@ -35,7 +38,10 @@ public class JavaDocFragmentAnchorCacheTest extends LightJavaCodeInsightTestCase
|
||||
|
||||
Project project = getProject();
|
||||
|
||||
Collection<JavaDocFragmentData> anchors = JavaDocFragmentAnchorCacheKt.getJavaDocFragmentsForClass(project, "p.A");
|
||||
PsiClass psiClass = JavaPsiFacade.getInstance(project).findClass("p.A", GlobalSearchScope.projectScope(project));
|
||||
assertNotNull(psiClass);
|
||||
|
||||
Collection<JavaDocFragmentData> anchors = JavaDocFragmentAnchorCacheKt.getJavaDocFragmentsForClass(project, psiClass);
|
||||
assertNotNull(anchors);
|
||||
assertContainsElements(anchors,
|
||||
new JavaDocFragmentData("equivalenceRelation", 25),
|
||||
|
||||
Reference in New Issue
Block a user