mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-04-19 13:02:30 +07:00
[workspace file index] don't fail if a method from SyntheticLibrary incorrectly returned null (EA-1410276)
'getSourceRoots', 'getBinaryRoots' and 'getExcludedRoots' methods in SyntheticLibrary are marked as '@NotNull', but some implementations in external plugins return null from them. Now such violations will be reported as errors mentioning the problematic plugin, but code in NonIncrementalContributors won't fail. GitOrigin-RevId: fae1b11b3fc7e228950597bf1cf3c8cc93092aac
This commit is contained in:
committed by
intellij-monorepo-bot
parent
5607d63c25
commit
c1d98069be
@@ -10,6 +10,7 @@ import com.intellij.openapi.roots.AdditionalLibraryRootsProvider
|
||||
import com.intellij.openapi.roots.JavaSyntheticLibrary
|
||||
import com.intellij.openapi.roots.ModuleRootManager
|
||||
import com.intellij.openapi.roots.OrderRootType
|
||||
import com.intellij.openapi.roots.SyntheticLibrary
|
||||
import com.intellij.openapi.roots.impl.DirectoryIndexExcludePolicy
|
||||
import com.intellij.openapi.roots.impl.RootFileValidityChecker
|
||||
import com.intellij.openapi.vfs.VirtualFile
|
||||
@@ -149,7 +150,7 @@ internal class NonIncrementalContributors(private val project: Project) {
|
||||
continue
|
||||
}
|
||||
|
||||
fun registerRoots(files: MutableCollection<VirtualFile>, kind: WorkspaceFileKind, fileSetData: WorkspaceFileSetData) {
|
||||
fun registerRoots(files: Collection<VirtualFile>, kind: WorkspaceFileKind, fileSetData: WorkspaceFileSetData) {
|
||||
files.forEach { root ->
|
||||
RootFileValidityChecker.correctRoot(root, library, provider)?.let {
|
||||
result.putValue(it, WorkspaceFileSetImpl(it, kind, NonIncrementalMarker, EntityStorageKind.MAIN, fileSetData))
|
||||
@@ -157,9 +158,12 @@ internal class NonIncrementalContributors(private val project: Project) {
|
||||
}
|
||||
}
|
||||
//todo use comparisonId for incremental updates?
|
||||
registerRoots(library.sourceRoots, WorkspaceFileKind.EXTERNAL_SOURCE, if (library is JavaSyntheticLibrary) LibrarySourceRootFileSetData(null, "") else SyntheticLibrarySourceRootData)
|
||||
registerRoots(library.binaryRoots, WorkspaceFileKind.EXTERNAL, if (library is JavaSyntheticLibrary) LibraryRootFileSetData(null, "") else DummyWorkspaceFileSetData)
|
||||
library.excludedRoots.forEach {
|
||||
val sourceRoots = checkNotNull(library.sourceRoots, "getSourceRoots()", library) ?: emptyList<VirtualFile>()
|
||||
registerRoots(sourceRoots, WorkspaceFileKind.EXTERNAL_SOURCE, if (library is JavaSyntheticLibrary) LibrarySourceRootFileSetData(null, "") else SyntheticLibrarySourceRootData)
|
||||
val binaryRoots = checkNotNull(library.binaryRoots, "getBinaryRoots()", library) ?: emptyList<VirtualFile>()
|
||||
registerRoots(binaryRoots, WorkspaceFileKind.EXTERNAL, if (library is JavaSyntheticLibrary) LibraryRootFileSetData(null, "") else DummyWorkspaceFileSetData)
|
||||
val excludedRoots = checkNotNull(library.excludedRoots, "getExcludedRoots()", library) ?: emptySet<VirtualFile>()
|
||||
excludedRoots.forEach {
|
||||
result.putValue(it, ExcludedFileSet.ByFileKind(WorkspaceFileKindMask.EXTERNAL, NonIncrementalMarker))
|
||||
}
|
||||
library.unitedExcludeCondition?.let { condition ->
|
||||
@@ -172,6 +176,13 @@ internal class NonIncrementalContributors(private val project: Project) {
|
||||
}
|
||||
return result
|
||||
}
|
||||
|
||||
private fun <T> checkNotNull(result: T?, methodName: String, library: SyntheticLibrary): T? {
|
||||
if (result == null) {
|
||||
PluginException.logPluginError(LOG, "Contract violation: SyntheticLibrary::$methodName is marked as '@NotNull', but its implementation in $library returned 'null'", null, library.javaClass)
|
||||
}
|
||||
return result
|
||||
}
|
||||
|
||||
@RequiresWriteLock
|
||||
fun resetCache() {
|
||||
|
||||
Reference in New Issue
Block a user