mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
IDEA-372093 Structure view: endless loading after start of IDEA
GitOrigin-RevId: 5a00096980eefcad6391d3b821e4075b09d7a1ac
This commit is contained in:
committed by
intellij-monorepo-bot
parent
547ccd707c
commit
7441aaf87d
@@ -164,9 +164,13 @@ class StructureViewWrapperImpl(
|
||||
}
|
||||
}
|
||||
}
|
||||
if (ExperimentalUI.isNewUI() && myStructureView is StructureViewComponent) {
|
||||
val additional = (myStructureView as StructureViewComponent).dotsActions
|
||||
myToolWindow.setAdditionalGearActions(additional)
|
||||
if (ExperimentalUI.isNewUI()) {
|
||||
(myStructureView as? StructureViewComponent)?.let {
|
||||
myToolWindow.setAdditionalGearActions(it.dotsActions)
|
||||
}
|
||||
(myStructureView as? StructureViewComposite)?.structureViews?.forEach {
|
||||
(it.structureView as? StructureViewComponent)?.let { sv -> myToolWindow.setAdditionalGearActions(sv.dotsActions) }
|
||||
}
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
@@ -34,6 +34,7 @@
|
||||
- f:getModel():java.lang.Object
|
||||
- f:getParent():com.intellij.ide.structureView.logical.model.LogicalStructureAssembledModel
|
||||
- f:getProject():com.intellij.openapi.project.Project
|
||||
- f:hasChildren():Z
|
||||
- hashCode():I
|
||||
*f:com.intellij.ide.structureView.logical.model.LogicalStructureAssembledModel$Companion
|
||||
- f:getInstance(com.intellij.openapi.project.Project,java.lang.Object):com.intellij.ide.structureView.logical.model.LogicalStructureAssembledModel
|
||||
|
||||
+2
-2
@@ -7,7 +7,7 @@ import com.intellij.ide.structureView.logical.impl.LogicalStructureViewService.C
|
||||
import com.intellij.idea.AppMode
|
||||
import com.intellij.openapi.application.ApplicationManager
|
||||
import com.intellij.openapi.application.EDT
|
||||
import com.intellij.openapi.application.readAction
|
||||
import com.intellij.openapi.application.smartReadAction
|
||||
import com.intellij.openapi.application.writeIntentReadAction
|
||||
import com.intellij.openapi.client.currentSession
|
||||
import com.intellij.openapi.editor.Editor
|
||||
@@ -45,7 +45,7 @@ class PhysicalAndLogicalStructureViewBuilder(
|
||||
}
|
||||
|
||||
override suspend fun createStructureViewSuspend(fileEditor: FileEditor?, project: Project): StructureView {
|
||||
val logicalBuilder = readAction {
|
||||
val logicalBuilder = smartReadAction(project) {
|
||||
getInstance(psiFile.project).getLogicalStructureBuilder(psiFile)
|
||||
}
|
||||
return withContext(Dispatchers.EDT) {
|
||||
|
||||
+6
-2
@@ -1,10 +1,13 @@
|
||||
// Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
|
||||
package com.intellij.ide.structureView.logical.impl
|
||||
|
||||
import com.intellij.ide.structureView.StructureViewBuilder
|
||||
import com.intellij.ide.structureView.StructureViewModel
|
||||
import com.intellij.ide.structureView.TreeBasedStructureViewBuilder
|
||||
import com.intellij.ide.structureView.logical.model.LogicalStructureAssembledModel
|
||||
import com.intellij.ide.structureView.*
|
||||
import com.intellij.openapi.components.Service
|
||||
import com.intellij.openapi.editor.Editor
|
||||
import com.intellij.openapi.progress.ProcessCanceledException
|
||||
import com.intellij.openapi.project.Project
|
||||
import com.intellij.psi.PsiFile
|
||||
|
||||
@@ -22,7 +25,8 @@ class LogicalStructureViewService(
|
||||
val assembledModel = LogicalStructureAssembledModel.getInstance(project, psiFile)
|
||||
try {
|
||||
if (assembledModel.getChildren().isEmpty()) return null
|
||||
} catch (_: Throwable) {
|
||||
} catch (e: Throwable) {
|
||||
if (e is ProcessCanceledException) throw e
|
||||
return null
|
||||
}
|
||||
return object: TreeBasedStructureViewBuilder() {
|
||||
|
||||
+10
@@ -43,6 +43,16 @@ class LogicalStructureAssembledModel<T> private constructor(
|
||||
return result
|
||||
}
|
||||
|
||||
fun hasChildren(): Boolean {
|
||||
if (model is LogicalContainer<*> && model.getElements().isNotEmpty()) {
|
||||
return true
|
||||
}
|
||||
for (provider in LogicalStructureElementsProvider.getProviders(model!!)) {
|
||||
if (provider is ExternalElementsProvider<*, *> || provider.getElements(model).isNotEmpty()) return true
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
fun getLogicalPsiDescriptions(): Set<LogicalPsiDescription> {
|
||||
return model?.let { getLogicalPsiDescriptions(it) } ?: emptySet()
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user