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:
Krystian Gajewski
2025-08-26 10:39:05 +00:00
committed by intellij-monorepo-bot
parent 23b4143e72
commit 63486e1268
3 changed files with 17 additions and 0 deletions

View File

@@ -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">

View File

@@ -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

View File

@@ -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?
}