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
GitOrigin-RevId: ea7a098ef33476d53dd8bf061810835510885466
This commit is contained in:
committed by
intellij-monorepo-bot
parent
985f40d088
commit
c60037c8b3
+4
-1
@@ -37,4 +37,7 @@ class JavaLangLevelProjectCustomDataSynchronizer : ProjectCustomDataSynchronizer
|
||||
class LanguageLevelHolder(val languageLevel: LanguageLevel)
|
||||
|
||||
@Serializable
|
||||
class NullableLanguageLevelHolder(val languageLevel: LanguageLevel?)
|
||||
class NullableLanguageLevelHolder(val languageLevel: LanguageLevel?)
|
||||
|
||||
@Serializable
|
||||
class ClassFileInformation(val isClassFile: Boolean?)
|
||||
|
||||
@@ -2811,6 +2811,7 @@
|
||||
<postStartupActivity implementation="com.intellij.ide.FileNotInSourceRootChecker"/>
|
||||
|
||||
<virtualFileCustomDataProvider implementation="com.intellij.openapi.roots.impl.JavaLangLevelVirtualFileCustomDataProvider"/>
|
||||
<virtualFileCustomDataProvider implementation="com.intellij.openapi.roots.impl.JavaClassVirtualFileCustomDataProvider"/>
|
||||
|
||||
<spellchecker.dictionary.checker implementation="com.intellij.java.frameworks.MavenDictionaryChecker"/>
|
||||
|
||||
|
||||
+49
@@ -0,0 +1,49 @@
|
||||
// Copyright 2000-2023 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
|
||||
package com.intellij.openapi.roots.impl
|
||||
|
||||
import com.intellij.ide.highlighter.JavaClassFileType
|
||||
import com.intellij.java.frontback.psi.impl.ClassFileInformation
|
||||
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.util.concurrency.annotations.RequiresReadLock
|
||||
import kotlinx.coroutines.flow.Flow
|
||||
import kotlinx.coroutines.flow.FlowCollector
|
||||
import kotlinx.coroutines.flow.emptyFlow
|
||||
import kotlin.reflect.KType
|
||||
import kotlin.reflect.typeOf
|
||||
|
||||
class JavaClassVirtualFileCustomDataProvider : VirtualFileCustomDataProvider<ClassFileInformation> {
|
||||
companion object {
|
||||
val LOG = logger<JavaClassVirtualFileCustomDataProvider>()
|
||||
}
|
||||
|
||||
override val id: String = "javaClassVirtualFile"
|
||||
|
||||
override val dataType: KType
|
||||
get() = typeOf<ClassFileInformation>()
|
||||
|
||||
override fun getValues(project: Project, virtualFile: VirtualFile): Flow<ClassFileInformation> {
|
||||
if (virtualFile.fileType != JavaClassFileType.INSTANCE) return emptyFlow()
|
||||
return object : Flow<ClassFileInformation> {
|
||||
override suspend fun collect(collector: FlowCollector<ClassFileInformation>) {
|
||||
collector.emit(readAction {
|
||||
createClassFileInformation(project, virtualFile)
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@RequiresReadLock
|
||||
private fun createClassFileInformation(
|
||||
project: Project,
|
||||
virtualFile: VirtualFile,
|
||||
): ClassFileInformation {
|
||||
val fileIndex = FileIndexFacade.getInstance(project)
|
||||
val isOutOfLibrary = !fileIndex.isInLibraryClasses(virtualFile) && fileIndex.isInSource(virtualFile)
|
||||
return ClassFileInformation(!isOutOfLibrary)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user