diff --git a/plugins/markdown/core/backend/resources/intellij.markdown.backend.xml b/plugins/markdown/core/backend/resources/intellij.markdown.backend.xml index 084ed35c13f4..960c80349259 100644 --- a/plugins/markdown/core/backend/resources/intellij.markdown.backend.xml +++ b/plugins/markdown/core/backend/resources/intellij.markdown.backend.xml @@ -6,5 +6,7 @@ + \ No newline at end of file diff --git a/plugins/markdown/core/backend/src/org/intellij/plugins/markdown/backend/providers/ProjectStructureProvider.kt b/plugins/markdown/core/backend/src/org/intellij/plugins/markdown/backend/providers/ProjectStructureProvider.kt new file mode 100644 index 000000000000..9d330056ca8b --- /dev/null +++ b/plugins/markdown/core/backend/src/org/intellij/plugins/markdown/backend/providers/ProjectStructureProvider.kt @@ -0,0 +1,14 @@ +package org.intellij.plugins.markdown.backend.providers + +import com.intellij.platform.rpc.backend.RemoteApiProvider +import fleet.rpc.remoteApiDescriptor +import org.intellij.plugins.markdown.backend.services.ProjectStructureRemoteApiImpl +import org.intellij.plugins.markdown.service.ProjectStructureRemoteApi + +private class ProjectStructureProvider : RemoteApiProvider { + override fun RemoteApiProvider.Sink.remoteApis() { + remoteApi(remoteApiDescriptor()) { + ProjectStructureRemoteApiImpl() + } + } +} \ No newline at end of file diff --git a/plugins/markdown/core/backend/src/org/intellij/plugins/markdown/backend/services/ProjectStructureRemoteApiImpl.kt b/plugins/markdown/core/backend/src/org/intellij/plugins/markdown/backend/services/ProjectStructureRemoteApiImpl.kt new file mode 100644 index 000000000000..2147918b6d63 --- /dev/null +++ b/plugins/markdown/core/backend/src/org/intellij/plugins/markdown/backend/services/ProjectStructureRemoteApiImpl.kt @@ -0,0 +1,38 @@ +package org.intellij.plugins.markdown.backend.services + +import com.intellij.ide.vfs.VirtualFileId +import com.intellij.ide.vfs.rpcId +import com.intellij.ide.vfs.virtualFile +import com.intellij.openapi.diagnostic.Logger +import com.intellij.openapi.project.BaseProjectDirectories +import com.intellij.openapi.vfs.VfsUtil +import com.intellij.openapi.vfs.VirtualFile +import com.intellij.platform.project.ProjectId +import com.intellij.platform.project.findProject +import org.intellij.plugins.markdown.service.ProjectStructureRemoteApi +import java.io.File +import java.net.URL + +class ProjectStructureRemoteApiImpl : ProjectStructureRemoteApi { + private fun getBaseDirectory(projectId: ProjectId, virtualFileId: VirtualFileId) : VirtualFile?{ + val project = projectId.findProject() + val virtualFile = virtualFileId.virtualFile() ?: return null + val baseDirectory = BaseProjectDirectories.getInstance(project).getBaseDirectoryFor(virtualFile) + return baseDirectory + } + + override suspend fun getFileByResourceName(resourceName: String, virtualFileId: VirtualFileId?, projectId: ProjectId?): VirtualFileId? { + if (projectId == null || virtualFileId == null) return null + val projectRoot = getBaseDirectory(projectId, virtualFileId) + val resource = if (resourceName.startsWith("file:/")) { + VfsUtil.findFileByIoFile(File(URL(resourceName).path), true) + } else { + projectRoot?.findFileByRelativePath(resourceName) + } ?: return null + return resource.rpcId() + } + + companion object { + private val logger: Logger = Logger.getInstance(ProjectStructureRemoteApiImpl::class.java) + } +} \ No newline at end of file diff --git a/plugins/markdown/core/resources/META-INF/plugin.xml b/plugins/markdown/core/resources/META-INF/plugin.xml index 376dcec1855d..395de9aa3672 100644 --- a/plugins/markdown/core/resources/META-INF/plugin.xml +++ b/plugins/markdown/core/resources/META-INF/plugin.xml @@ -398,6 +398,7 @@ + { + suspend fun getFileByResourceName(resourceName: String, virtualFileId: VirtualFileId?, projectId: ProjectId?): VirtualFileId? + + companion object { + @JvmStatic + suspend fun getInstance(): ProjectStructureRemoteApi { + return RemoteApiProviderService.resolve(remoteApiDescriptor()) + } + } +} \ No newline at end of file