mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
[java] IDEA-355048 Support binary files (.class) in split mode.
- support kotlin compiled classes GitOrigin-RevId: 8a1ec87426603d017068bb2f311edb105fa5e977
This commit is contained in:
committed by
intellij-monorepo-bot
parent
c60037c8b3
commit
858aaf9898
+2
-1
@@ -78,7 +78,8 @@ public final class ClassFileDecompilers {
|
||||
public final ExtensionPointName<Decompiler> EP_NAME = new ExtensionPointName<>("com.intellij.psi.classFileDecompiler");
|
||||
|
||||
private ClassFileDecompilers() {
|
||||
EP_NAME.addChangeListener(() -> BinaryFileTypeDecompilers.getInstance().notifyDecompilerSetChange(), null);
|
||||
Runnable runnable = () -> BinaryFileTypeDecompilers.getInstance().notifyDecompilerSetChange();
|
||||
EP_NAME.addChangeListener(runnable, null);
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
+5
-1
@@ -40,4 +40,8 @@ class LanguageLevelHolder(val languageLevel: LanguageLevel)
|
||||
class NullableLanguageLevelHolder(val languageLevel: LanguageLevel?)
|
||||
|
||||
@Serializable
|
||||
class ClassFileInformation(val isClassFile: Boolean?)
|
||||
enum class ClassFileInformationType {
|
||||
JAVA_CLASS_FILE, JAVA_CLASS_FILE_OUTSIDE
|
||||
}
|
||||
@Serializable
|
||||
class ClassFileInformation(val classFileInformationType: ClassFileInformationType?)
|
||||
|
||||
+6
-1
@@ -3,12 +3,15 @@ package com.intellij.openapi.roots.impl
|
||||
|
||||
import com.intellij.ide.highlighter.JavaClassFileType
|
||||
import com.intellij.java.frontback.psi.impl.ClassFileInformation
|
||||
import com.intellij.java.frontback.psi.impl.ClassFileInformationType
|
||||
import com.intellij.openapi.application.readAction
|
||||
import com.intellij.openapi.diagnostic.logger
|
||||
import com.intellij.openapi.project.Project
|
||||
import com.intellij.openapi.roots.FileIndexFacade
|
||||
import com.intellij.openapi.vfs.VirtualFile
|
||||
import com.intellij.openapi.vfs.VirtualFileCustomDataProvider
|
||||
import com.intellij.psi.ClassFileViewProvider
|
||||
import com.intellij.psi.impl.PsiManagerEx
|
||||
import com.intellij.util.concurrency.annotations.RequiresReadLock
|
||||
import kotlinx.coroutines.flow.Flow
|
||||
import kotlinx.coroutines.flow.FlowCollector
|
||||
@@ -28,6 +31,8 @@ class JavaClassVirtualFileCustomDataProvider : VirtualFileCustomDataProvider<Cla
|
||||
|
||||
override fun getValues(project: Project, virtualFile: VirtualFile): Flow<ClassFileInformation> {
|
||||
if (virtualFile.fileType != JavaClassFileType.INSTANCE) return emptyFlow()
|
||||
val viewProvider = PsiManagerEx.getInstanceEx(project).fileManager.findViewProvider(virtualFile)
|
||||
if(viewProvider !is ClassFileViewProvider) return emptyFlow()
|
||||
return object : Flow<ClassFileInformation> {
|
||||
override suspend fun collect(collector: FlowCollector<ClassFileInformation>) {
|
||||
collector.emit(readAction {
|
||||
@@ -44,6 +49,6 @@ class JavaClassVirtualFileCustomDataProvider : VirtualFileCustomDataProvider<Cla
|
||||
): ClassFileInformation {
|
||||
val fileIndex = FileIndexFacade.getInstance(project)
|
||||
val isOutOfLibrary = !fileIndex.isInLibraryClasses(virtualFile) && fileIndex.isInSource(virtualFile)
|
||||
return ClassFileInformation(!isOutOfLibrary)
|
||||
return ClassFileInformation(if (isOutOfLibrary) ClassFileInformationType.JAVA_CLASS_FILE_OUTSIDE else ClassFileInformationType.JAVA_CLASS_FILE)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user