diff --git a/platform/core-api/src/com/intellij/platform/backend/navigation/NavigationRequest.kt b/platform/core-api/src/com/intellij/platform/backend/navigation/NavigationRequest.kt index 1ef151ad4996..c670879c383d 100644 --- a/platform/core-api/src/com/intellij/platform/backend/navigation/NavigationRequest.kt +++ b/platform/core-api/src/com/intellij/platform/backend/navigation/NavigationRequest.kt @@ -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, + ) } /** diff --git a/platform/core-api/src/com/intellij/platform/backend/navigation/NavigationRequests.kt b/platform/core-api/src/com/intellij/platform/backend/navigation/NavigationRequests.kt index e9fb7e3a6d90..d4fc807b6b56 100644 --- a/platform/core-api/src/com/intellij/platform/backend/navigation/NavigationRequests.kt +++ b/platform/core-api/src/com/intellij/platform/backend/navigation/NavigationRequests.kt @@ -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 diff --git a/platform/lang-impl/src/com/intellij/platform/backend/navigation/impl/NavigationRequestsImpl.kt b/platform/lang-impl/src/com/intellij/platform/backend/navigation/impl/NavigationRequestsImpl.kt index 253ecf95a281..06be9e44197b 100644 --- a/platform/lang-impl/src/com/intellij/platform/backend/navigation/impl/NavigationRequestsImpl.kt +++ b/platform/lang-impl/src/com/intellij/platform/backend/navigation/impl/NavigationRequestsImpl.kt @@ -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, ) } } diff --git a/platform/lang-impl/src/com/intellij/platform/backend/navigation/impl/requests.kt b/platform/lang-impl/src/com/intellij/platform/backend/navigation/impl/requests.kt index d63f67d95be3..4996df854312 100644 --- a/platform/lang-impl/src/com/intellij/platform/backend/navigation/impl/requests.kt +++ b/platform/lang-impl/src/com/intellij/platform/backend/navigation/impl/requests.kt @@ -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