IJPL-7 store element range marker in source navigation request for further usage

GitOrigin-RevId: 0e8b8b86a1b121946b8162642cc2d2aca4d46bd8
This commit is contained in:
Daniil Ovchinnikov
2023-05-13 20:42:43 +00:00
committed by intellij-monorepo-bot
parent 2f66683e48
commit 6e71daf3a7
4 changed files with 21 additions and 5 deletions
@@ -30,7 +30,7 @@ interface NavigationRequest {
@RequiresBackgroundThread
@JvmStatic
fun sourceNavigationRequest(project: Project, file: VirtualFile, offset: Int): NavigationRequest? {
return NavigationRequests.getInstance().sourceNavigationRequest(project, file, offset)
return NavigationRequests.getInstance().sourceNavigationRequest(project, file, offset, elementRange = null)
}
/**
@@ -42,7 +42,12 @@ interface NavigationRequest {
@JvmStatic
fun sourceNavigationRequest(file: PsiFile, elementRange: TextRange): NavigationRequest? {
val virtualFile = file.virtualFile ?: return null
return NavigationRequests.getInstance().sourceNavigationRequest(file.project, virtualFile, offset = elementRange.startOffset)
return NavigationRequests.getInstance().sourceNavigationRequest(
file.project,
virtualFile,
offset = elementRange.startOffset,
elementRange,
)
}
/**
@@ -3,6 +3,7 @@ package com.intellij.platform.backend.navigation
import com.intellij.openapi.application.ApplicationManager
import com.intellij.openapi.project.Project
import com.intellij.openapi.util.TextRange
import com.intellij.openapi.vfs.VirtualFile
import com.intellij.pom.Navigatable
import com.intellij.psi.PsiDirectory
@@ -22,7 +23,7 @@ interface NavigationRequests {
@RequiresReadLock
@RequiresBackgroundThread
fun sourceNavigationRequest(project: Project, file: VirtualFile, offset: Int): NavigationRequest?
fun sourceNavigationRequest(project: Project, file: VirtualFile, offset: Int, elementRange: TextRange?): NavigationRequest?
@RequiresReadLock
@RequiresBackgroundThread
@@ -5,7 +5,9 @@ import com.intellij.codeInsight.navigation.NavigationUtil.shouldOpenAsNative
import com.intellij.ide.util.EditSourceUtil
import com.intellij.openapi.application.ApplicationManager
import com.intellij.openapi.editor.LazyRangeMarkerFactory
import com.intellij.openapi.fileEditor.FileDocumentManager
import com.intellij.openapi.project.Project
import com.intellij.openapi.util.TextRange
import com.intellij.openapi.vfs.VirtualFile
import com.intellij.platform.backend.navigation.NavigationRequest
import com.intellij.platform.backend.navigation.NavigationRequests
@@ -18,7 +20,7 @@ import com.intellij.psi.util.PsiUtilCore
internal class NavigationRequestsImpl : NavigationRequests {
override fun sourceNavigationRequest(project: Project, file: VirtualFile, offset: Int): NavigationRequest? {
override fun sourceNavigationRequest(project: Project, file: VirtualFile, offset: Int, elementRange: TextRange?): NavigationRequest? {
ApplicationManager.getApplication().assertReadAccessAllowed()
ApplicationManager.getApplication().assertIsNonDispatchThread()
if (!file.isValid) {
@@ -31,7 +33,13 @@ internal class NavigationRequestsImpl : NavigationRequests {
else {
null
}
return SourceNavigationRequest(file, offsetMarker)
val elementRangeMarker = if (elementRange != null) {
FileDocumentManager.getInstance().getDocument(file, project)?.createRangeMarker(elementRange)
}
else {
null
}
return SourceNavigationRequest(file, offsetMarker, elementRangeMarker)
}
override fun directoryNavigationRequest(directory: PsiDirectory): NavigationRequest? {
@@ -77,6 +85,7 @@ internal class NavigationRequestsImpl : NavigationRequests {
navigationElement.project,
virtualFile,
navigationElement.textOffset, // this triggers decompiler if [virtualFile] corresponds to a .class file
navigationElement.textRange,
)
}
}
@@ -12,6 +12,7 @@ import org.jetbrains.annotations.ApiStatus.Internal
class SourceNavigationRequest internal constructor(
val file: VirtualFile,
val offsetMarker: RangeMarker?,
val elementRangeMarker: RangeMarker?,
) : NavigationRequest
@Internal