IDEA-367518 Spring Structure: no logical structure for decompiled library class

GitOrigin-RevId: 8fa8264394ddb82391d62fbe414eed96c55ebe5a
This commit is contained in:
Anton Kozub
2025-02-27 01:23:15 +00:00
committed by intellij-monorepo-bot
parent 589e9df373
commit 8e2c5f8ccb
3 changed files with 19 additions and 13 deletions
@@ -3,6 +3,7 @@ package com.intellij.ide.highlighter;
import com.intellij.ide.structureView.StructureViewBuilder;
import com.intellij.ide.structureView.StructureViewBuilderProvider;
import com.intellij.ide.structureView.logical.PhysicalAndLogicalStructureViewBuilder;
import com.intellij.lang.LanguageStructureViewBuilder;
import com.intellij.lang.PsiStructureViewFactory;
import com.intellij.openapi.fileTypes.FileType;
@@ -28,7 +29,8 @@ public class JavaClsStructureViewBuilderProvider implements StructureViewBuilder
if (psiFile != null) {
PsiStructureViewFactory factory = LanguageStructureViewBuilder.getInstance().forLanguage(psiFile.getLanguage());
if (factory != null) {
return factory.getStructureViewBuilder(psiFile);
StructureViewBuilder physicalBuilder = factory.getStructureViewBuilder(psiFile);
return PhysicalAndLogicalStructureViewBuilder.Companion.wrapPhysicalBuilderIfPossible(physicalBuilder, psiFile);
}
}
}
@@ -4,16 +4,12 @@ package com.intellij.ide.highlighter;
import com.intellij.ide.structureView.StructureViewBuilder;
import com.intellij.ide.structureView.StructureViewBuilderProvider;
import com.intellij.ide.structureView.TreeBasedStructureViewBuilder;
import com.intellij.ide.structureView.logical.PhysicalAndLogicalStructureViewBuilder;
import com.intellij.idea.AppMode;
import com.intellij.lang.LanguageStructureViewBuilder;
import com.intellij.lang.PsiStructureViewFactory;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.fileTypes.FileType;
import com.intellij.openapi.fileTypes.LanguageFileType;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.registry.Registry;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.psi.PsiFile;
import com.intellij.psi.PsiManager;
@@ -31,13 +27,6 @@ class LanguageFileTypeStructureViewBuilderProvider implements StructureViewBuild
PsiStructureViewFactory factory = LanguageStructureViewBuilder.getInstance().forLanguage(psiFile.getLanguage());
if (factory == null) return null;
StructureViewBuilder physicalBuilder = factory.getStructureViewBuilder(psiFile);
if (!(physicalBuilder instanceof TreeBasedStructureViewBuilder treeBasedStructureViewBuilder)) return physicalBuilder;
if (ApplicationManager.getApplication().isUnitTestMode()
|| !Registry.is("logical.structure.enabled", true)
|| AppMode.isRemoteDevHost()) {
return physicalBuilder;
}
return new PhysicalAndLogicalStructureViewBuilder(treeBasedStructureViewBuilder, psiFile);
return PhysicalAndLogicalStructureViewBuilder.Companion.wrapPhysicalBuilderIfPossible(physicalBuilder, psiFile);
}
}
@@ -4,12 +4,15 @@ package com.intellij.ide.structureView.logical
import com.intellij.ide.structureView.*
import com.intellij.ide.structureView.impl.StructureViewComposite
import com.intellij.ide.structureView.logical.impl.LogicalStructureViewService.Companion.getInstance
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.writeIntentReadAction
import com.intellij.openapi.editor.Editor
import com.intellij.openapi.fileEditor.FileEditor
import com.intellij.openapi.project.Project
import com.intellij.openapi.util.registry.Registry
import com.intellij.psi.PsiFile
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.withContext
@@ -19,6 +22,18 @@ class PhysicalAndLogicalStructureViewBuilder(
private val psiFile: PsiFile,
): TreeBasedStructureViewBuilder() {
companion object {
fun wrapPhysicalBuilderIfPossible(physicalBuilder: StructureViewBuilder?, psiFile: PsiFile): StructureViewBuilder? {
if (physicalBuilder !is TreeBasedStructureViewBuilder) return physicalBuilder
if (ApplicationManager.getApplication().isUnitTestMode()
|| !Registry.`is`("logical.structure.enabled", true)
|| AppMode.isRemoteDevHost()) {
return physicalBuilder
}
return PhysicalAndLogicalStructureViewBuilder(physicalBuilder, psiFile)
}
}
override fun createStructureView(fileEditor: FileEditor?, project: Project): StructureView {
val logicalBuilder = getInstance(psiFile.project).getLogicalStructureBuilder(psiFile)
return createStructureView(logicalBuilder, fileEditor, project)