mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-04-20 13:31:28 +07:00
add bytecode viewer api for finding class files
Merge-request: IJ-MR-173547 Merged-by: Krystian Gajewski <krystiang2015@gmail.com> GitOrigin-RevId: 7f8f2f5b7184432f419306c0fd159611f1b84c8c
This commit is contained in:
committed by
intellij-monorepo-bot
parent
23b4143e72
commit
63486e1268
@@ -19,6 +19,7 @@
|
||||
|
||||
<extensionPoints>
|
||||
<extensionPoint name="classSearcher" interface="com.intellij.byteCodeViewer.ClassSearcher" dynamic="true"/>
|
||||
<extensionPoint name="classFileFinder" interface="com.intellij.byteCodeViewer.BytecodeViewerClassFileFinder" dynamic="true"/>
|
||||
</extensionPoints>
|
||||
|
||||
<extensions defaultExtensionNs="com.intellij">
|
||||
|
||||
@@ -21,6 +21,7 @@ import java.util.*
|
||||
|
||||
public object ByteCodeViewerManager {
|
||||
private val CLASS_SEARCHER_EP = ExtensionPointName<ClassSearcher>("ByteCodeViewer.classSearcher")
|
||||
private val CLASS_FINDER_EP = ExtensionPointName<BytecodeViewerClassFileFinder>("ByteCodeViewer.classFileFinder")
|
||||
|
||||
private fun PsiClass.containingClassFileClass(): PsiClass {
|
||||
return parentsOfType<PsiClass>(withSelf = true)
|
||||
@@ -30,6 +31,12 @@ public object ByteCodeViewerManager {
|
||||
|
||||
public fun findClassFile(aClass: PsiClass): VirtualFile? {
|
||||
val fileClass = aClass.containingClassFileClass()
|
||||
for (finder in CLASS_FINDER_EP.extensionList) {
|
||||
val vFile = finder.findClass(aClass, fileClass)
|
||||
if (vFile != null) {
|
||||
return vFile
|
||||
}
|
||||
}
|
||||
val file = fileClass.originalElement.containingFile.virtualFile ?: return null
|
||||
val fileIndex = ProjectFileIndex.getInstance(aClass.project)
|
||||
val jvmClassName = ClassUtil.getBinaryClassName(aClass) ?: return null
|
||||
|
||||
@@ -0,0 +1,9 @@
|
||||
// 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.byteCodeViewer
|
||||
|
||||
import com.intellij.openapi.vfs.VirtualFile
|
||||
import com.intellij.psi.PsiClass
|
||||
|
||||
public interface BytecodeViewerClassFileFinder {
|
||||
public fun findClass(element: PsiClass, containing: PsiClass?): VirtualFile?
|
||||
}
|
||||
Reference in New Issue
Block a user