IJPL-234888 cleanup: delete obsolete implementations of FavoriteNodeProvider

The platform uses them only for migrating settings if the implementation inherits from AbstractUrlFavoriteConverter, so other implementations actually aren't used.

GitOrigin-RevId: 63e191fe785f3ee6e48bddd6fa788fc4df23c811
This commit is contained in:
Nikolay Chashnikov
2026-05-13 18:20:39 +00:00
committed by intellij-monorepo-bot
parent ac8765412d
commit 1a8b134df6
6 changed files with 0 additions and 527 deletions
@@ -507,8 +507,6 @@
<patterns.patternClass className="com.intellij.patterns.PsiJavaPatterns" alias="java"/>
<favoriteNodeProvider implementation="com.intellij.ide.favoritesTreeView.UsageFavoriteNodeProvider"/>
<configurationType implementation="com.intellij.execution.application.ApplicationConfigurationType"/>
<configurationType implementation="com.intellij.execution.jar.JarApplicationConfigurationType"/>
<configurationType implementation="com.intellij.execution.scratch.JavaScratchConfigurationType"/>
@@ -1,254 +0,0 @@
// 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.favoritesTreeView;
import com.intellij.ide.projectView.ViewSettings;
import com.intellij.ide.util.treeView.AbstractTreeNode;
import com.intellij.openapi.actionSystem.CommonDataKeys;
import com.intellij.openapi.actionSystem.DataContext;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.module.Module;
import com.intellij.openapi.module.ModuleUtilCore;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.text.StringUtil;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiFile;
import com.intellij.usageView.UsageInfo;
import com.intellij.usages.Usage;
import com.intellij.usages.UsageInfo2UsageAdapter;
import com.intellij.usages.UsageView;
import com.intellij.usages.impl.NullUsage;
import com.intellij.usages.rules.UsageInFile;
import com.intellij.usages.rules.UsageInFiles;
import com.intellij.util.SmartList;
import com.intellij.util.containers.MultiMap;
import org.jetbrains.annotations.ApiStatus;
import org.jetbrains.annotations.NotNull;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Comparator;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.TreeSet;
@Deprecated(forRemoval = true)
@ApiStatus.Internal
public class UsageFavoriteNodeProvider extends FavoriteNodeProvider {
private static final Map<String, TreeSet<WorkingSetSerializable>> ourSerializables = new HashMap<>();
private static final Comparator<VirtualFile> VIRTUAL_FILE_COMPARATOR = Comparator.comparing(VirtualFile::getPath);
private static final Logger LOG = Logger.getInstance(UsageFavoriteNodeProvider.class);
static {
final TreeSet<WorkingSetSerializable> usageSet = createSet();
final UsageSerializable serializable = new UsageSerializable();
ourSerializables.put(serializable.getId(), usageSet);
usageSet.add(serializable);
final TreeSet<WorkingSetSerializable> fileSet = createSet();
final FileSerializable fileSerializable = new FileSerializable();
ourSerializables.put(fileSerializable.getId(), fileSet);
fileSet.add(fileSerializable);
final TreeSet<WorkingSetSerializable> noteSet = createSet();
final NoteSerializable noteSerializable = new NoteSerializable();
ourSerializables.put(noteSerializable.getId(), noteSet);
noteSet.add(noteSerializable);
}
private static TreeSet<WorkingSetSerializable> createSet() {
return new TreeSet<>((o1, o2) -> {
assert o1.getId().equals(o2.getId());
return Integer.compare(o1.getVersion(), o2.getVersion());
});
}
@Override
public Collection<AbstractTreeNode<?>> getFavoriteNodes(DataContext context, @NotNull ViewSettings viewSettings) {
final Project project = CommonDataKeys.PROJECT.getData(context);
if (project == null) {
return null;
}
final Usage[] usages = UsageView.USAGES_KEY.getData(context);
if (usages != null) {
final MultiMap<VirtualFile, Usage> map = new MultiMap<>();
final List<Usage> nonMapped = new ArrayList<>();
for (Usage usage : usages) {
if (usage instanceof UsageInFile) {
map.putValue(((UsageInFile)usage).getFile(), usage);
}
else if (usage instanceof UsageInFiles) {
final VirtualFile[] files = ((UsageInFiles)usage).getFiles();
for (VirtualFile file : files) {
map.putValue(file, usage);
}
}
else {
nonMapped.add(usage);
}
}
final TreeSet<VirtualFile> keys = new TreeSet<>(VIRTUAL_FILE_COMPARATOR);
keys.addAll(map.keySet());
final List<AbstractTreeNode<?>> result = new SmartList<>();
for (VirtualFile key : keys) {
final FileGroupingProjectNode grouping = new FileGroupingProjectNode(project, new File(key.getPath()), viewSettings);
result.add(grouping);
final Collection<Usage> subUsages = map.get(key);
for (Usage usage : subUsages) {
if (usage instanceof UsageInfo2UsageAdapter) {
final UsageProjectTreeNode node =
new UsageProjectTreeNode(project, ((UsageInfo2UsageAdapter)usage).getUsageInfo(), viewSettings);
grouping.addChild(node);
}
else if (!NullUsage.INSTANCE.equals(usage)) {
grouping.addChild(new NoteProjectNode(project, new NoteNode(usage.getPresentation().getPlainText(), true), viewSettings));
}
}
}
for (Usage usage : nonMapped) {
if (usage instanceof UsageInfo2UsageAdapter) {
final UsageProjectTreeNode node =
new UsageProjectTreeNode(project, ((UsageInfo2UsageAdapter)usage).getUsageInfo(), viewSettings);
result.add(node);
}
else if (!NullUsage.INSTANCE.equals(usage)) {
result.add(new NoteProjectNode(project, new NoteNode(usage.getPresentation().getPlainText(), true), viewSettings));
}
}
return result;
}
return null;
}
@Override
public AbstractTreeNode createNode(Project project, Object element, @NotNull ViewSettings viewSettings) {
if (element instanceof UsageInfo) {
return new UsageProjectTreeNode(project, (UsageInfo)element, viewSettings);
}
if (element instanceof InvalidUsageNoteNode) {
return new InvalidUsageNoteProjectNode(project, (InvalidUsageNoteNode)element, viewSettings);
}
if (element instanceof NoteNode) {
return new NoteProjectNode(project, (NoteNode)element, viewSettings);
}
if (element instanceof File) {
return new FileGroupingProjectNode(project, (File)element, viewSettings);
}
return super.createNode(project, element, viewSettings);
}
@Override
public PsiElement getPsiElement(Object element) {
if (element instanceof UsageInfo) {
return ((UsageInfo)element).getElement();
}
return super.getPsiElement(element);
}
@Override
public boolean elementContainsFile(Object element, VirtualFile vFile) {
return false;
}
@Override
public int getElementWeight(Object element, boolean isSortByType) {
return 0;
}
@Override
public String getElementLocation(Object element) {
if (element instanceof UsageInfo) {
final PsiElement psiElement = ((UsageInfo)element).getElement();
final PsiFile file = psiElement == null ? null : psiElement.getContainingFile();
return file == null ? null : file.getPresentation().getPresentableText();//+- // todo do smthg for invalid usage
}
if (element instanceof File) {
return ((File)element).getParent();
}
return null;
}
@Override
public boolean isInvalidElement(Object element) {
return false;
}
@Override
public @NotNull String getFavoriteTypeId() {
return "usage";
}
@Override
public String getElementUrl(Object element) {
final TreeSet<WorkingSetSerializable> serializables = ourSerializables.get(element.getClass().getName());
if (serializables != null && !serializables.isEmpty()) {
final WorkingSetSerializable last = serializables.last();
try {
final StringBuilder sb = new StringBuilder();
sb.append(last.getId());
sb.append(' ');
sb.append(last.getVersion());
sb.append(' ');
last.serializeMe(element, sb);
return sb.toString();
}
catch (IOException e) {
LOG.info(e);
return null;
}
}
return null;
}
@Override
public String getElementModuleName(Object element) {
if (element instanceof UsageInfo) {
PsiElement psiElement = ((UsageInfo)element).getElement();
Module module = psiElement == null ? null : ModuleUtilCore.findModuleForPsiElement(psiElement);
return module == null ? null : module.getName();
}
return null;
}
@Override
public Object[] createPathFromUrl(Project project, String url, String moduleName) {
try {
final List<String> parts = StringUtil.split(url, " ", true);
if (parts.size() < 3) return null;
final String id = parts.get(0);
final TreeSet<WorkingSetSerializable> set = ourSerializables.get(id);
if (set != null && !set.isEmpty()) {
final int version = Integer.parseInt(parts.get(1));
final String cut = StringUtil.join(parts.subList(2, parts.size()), " ");
for (Iterator<WorkingSetSerializable> iterator = set.descendingIterator(); iterator.hasNext(); ) {
WorkingSetSerializable serializable = iterator.next();
if (serializable.getVersion() == version) {
return readWithSerializable(project, cut, serializable);
}
}
readWithSerializable(project, cut, set.last());
}
}
catch (IOException e) {
LOG.info(e);
}
return null;
}
private static Object[] readWithSerializable(Project project, String is, WorkingSetSerializable serializable)
throws IOException {
Object obj = serializable.deserializeMe(project, is);
if (obj == null) {
obj = serializable.deserializeMeInvalid(project, is);
}
return obj == null ? null : new Object[]{obj};
}
}
@@ -74,8 +74,6 @@
<elementDescriptionProvider implementation="com.intellij.lang.properties.PropertiesDescriptionProvider"/>
<fileType name="ResourceBundle" fieldName="INSTANCE" implementationClass="com.intellij.lang.properties.editor.ResourceBundleFileType"/>
<favoriteNodeProvider implementation="com.intellij.lang.properties.ide.favoritesTreeView.ResourcesFavoriteNodeProvider"/>
<localInspection language="Properties" shortName="UnusedProperty" bundle="messages.PropertiesBundle"
key="unused.property.inspection.display.name"
groupKey="properties.files.inspection.group.display.name" enabledByDefault="true" level="WARNING"
@@ -1,120 +0,0 @@
// 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.lang.properties.ide.favoritesTreeView;
import com.intellij.ide.favoritesTreeView.FavoriteNodeProvider;
import com.intellij.ide.projectView.ViewSettings;
import com.intellij.ide.util.treeView.AbstractTreeNode;
import com.intellij.lang.properties.PropertiesImplUtil;
import com.intellij.lang.properties.ResourceBundle;
import com.intellij.lang.properties.ResourceBundleImpl;
import com.intellij.lang.properties.projectView.ResourceBundleNode;
import com.intellij.lang.properties.psi.PropertiesFile;
import com.intellij.openapi.actionSystem.CommonDataKeys;
import com.intellij.openapi.actionSystem.DataContext;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.psi.PsiFile;
import com.intellij.psi.PsiManager;
import org.jetbrains.annotations.NotNull;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
final class ResourcesFavoriteNodeProvider extends FavoriteNodeProvider {
@Override
public Collection<AbstractTreeNode<?>> getFavoriteNodes(final DataContext context, final @NotNull ViewSettings viewSettings) {
final Project project = CommonDataKeys.PROJECT.getData(context);
if (project == null) {
return null;
}
final ResourceBundle[] resourceBundles = ResourceBundle.ARRAY_DATA_KEY.getData(context);
//on bundles nodes
if (resourceBundles != null) {
final Collection<AbstractTreeNode<?>> result = new ArrayList<>();
for (ResourceBundle bundle : resourceBundles) {
result.add(new ResourceBundleNode(project, bundle, viewSettings));
}
return result;
}
return null;
}
@Override
public boolean elementContainsFile(final Object element, final VirtualFile vFile) {
if (element instanceof ResourceBundle bundle) {
final List<PropertiesFile> propertiesFiles = bundle.getPropertiesFiles();
for (PropertiesFile file : propertiesFiles) {
final VirtualFile virtualFile = file.getVirtualFile();
if (virtualFile == null) continue;
if (vFile.getPath().equals(virtualFile.getPath())) {
return true;
}
}
}
return false;
}
@Override
public int getElementWeight(final Object element, final boolean isSortByType) {
return -1;
}
@Override
public String getElementLocation(final Object element) {
return null;
}
@Override
public boolean isInvalidElement(final Object element) {
if (element instanceof ResourceBundle resourceBundle) {
List<PropertiesFile> propertiesFiles = resourceBundle.getPropertiesFiles();
if (propertiesFiles.size() == 1) {
//todo result.add(new PsiFileNode(myProject, propertiesFiles.iterator().next(), this));
return true;
}
}
return false;
}
@Override
public @NotNull String getFavoriteTypeId() {
return "resource_bundle";
}
@Override
public String getElementUrl(final Object element) {
if (element instanceof ResourceBundleImpl) {
return ((ResourceBundleImpl)element).getUrl();
}
else if (element instanceof PsiFile[] files) {
ResourceBundle bundle = null;
for (PsiFile file : files) {
PropertiesFile propertiesFile = PropertiesImplUtil.getPropertiesFile(file);
if (propertiesFile == null) return null;
ResourceBundle currentBundle = propertiesFile.getResourceBundle();
if (bundle == null) {
bundle = currentBundle;
}
else if (!PsiManager.getInstance(bundle.getProject()).areElementsEquivalent(bundle.getDefaultPropertiesFile().getContainingFile(),
currentBundle.getDefaultPropertiesFile().getContainingFile())) {
return null;
}
}
return getElementUrl(bundle);
}
return null;
}
@Override
public String getElementModuleName(final Object element) {
return null;
}
@Override
public Object[] createPathFromUrl(final Project project, final String url, final String moduleName) {
return new Object[]{PropertiesImplUtil.createByUrl(url, project)};
}
}
@@ -46,7 +46,6 @@
<projectConfigurable groupId="editor" instance="com.intellij.uiDesigner.GuiDesignerConfigurable" id="project.propGUI" key="title.gui.designer"
bundle="messages.UIDesignerBundle"/>
<favoriteNodeProvider implementation="com.intellij.uiDesigner.projectView.UIDesignerFavoriteNodeProvider"/>
<renameHandler implementation="com.intellij.uiDesigner.projectView.FormRenameHandler"/>
<implicitUsageProvider implementation="com.intellij.uiDesigner.binding.UIDesignerImplicitUsageProvider"/>
<usageTypeProvider implementation="com.intellij.uiDesigner.binding.FormUsageTypeProvider"/>
@@ -1,148 +0,0 @@
// 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.uiDesigner.projectView;
import com.intellij.ide.favoritesTreeView.FavoriteNodeProvider;
import com.intellij.ide.projectView.ViewSettings;
import com.intellij.ide.util.treeView.AbstractTreeNode;
import com.intellij.openapi.actionSystem.CommonDataKeys;
import com.intellij.openapi.actionSystem.DataContext;
import com.intellij.openapi.fileTypes.FileType;
import com.intellij.openapi.module.Module;
import com.intellij.openapi.module.ModuleUtil;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.psi.JavaPsiFacade;
import com.intellij.psi.PsiClass;
import com.intellij.psi.PsiFile;
import com.intellij.psi.PsiManager;
import com.intellij.psi.search.GlobalSearchScope;
import com.intellij.uiDesigner.GuiFormFileType;
import com.intellij.uiDesigner.compiler.Utils;
import org.jetbrains.annotations.NonNls;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.HashSet;
import java.util.Set;
public final class UIDesignerFavoriteNodeProvider extends FavoriteNodeProvider {
@Override
public @Nullable Collection<AbstractTreeNode<?>> getFavoriteNodes(DataContext context, final @NotNull ViewSettings viewSettings) {
Project project = CommonDataKeys.PROJECT.getData(context);
if (project == null) return null;
Form[] forms = Form.DATA_KEY.getData(context);
if (forms != null) {
Collection<AbstractTreeNode<?>> result = new ArrayList<>();
Set<PsiClass> bindClasses = new HashSet<>();
for (Form form: forms) {
final PsiClass classToBind = form.getClassToBind();
if (bindClasses.contains(classToBind)) continue;
bindClasses.add(classToBind);
result.add(FormNode.constructFormNode(classToBind, project, viewSettings));
}
if (!result.isEmpty()) {
return result;
}
}
VirtualFile vFile = CommonDataKeys.VIRTUAL_FILE.getData(context);
if (vFile != null) {
final FileType fileType = vFile.getFileType();
if (fileType.equals(GuiFormFileType.INSTANCE)) {
final PsiFile formFile = PsiManager.getInstance(project).findFile(vFile);
if (formFile == null) return null;
String text = formFile.getText();
String className;
try {
className = Utils.getBoundClassName(text);
}
catch (Exception e) {
return null;
}
if (className == null) return null;
final PsiClass classToBind = JavaPsiFacade.getInstance(project).findClass(className, GlobalSearchScope.allScope(project));
if (classToBind != null) {
Form form = new Form(classToBind);
final AbstractTreeNode<?> node = new FormNode(project, form, viewSettings);
return Collections.singletonList(node);
}
}
}
return null;
}
@Override
public boolean elementContainsFile(final Object element, final VirtualFile vFile) {
if (element instanceof Form form){
return form.containsFile(vFile);
}
return false;
}
@Override
public int getElementWeight(final Object element, final boolean isSortByType) {
if (element instanceof Form) return 9;
return -1;
}
@Override
public @Nullable String getElementLocation(final Object element) {
if (element instanceof Form) {
final PsiFile[] psiFiles = ((Form)element).getFormFiles();
VirtualFile vFile = null;
if (psiFiles.length > 0) {
vFile = psiFiles [0].getVirtualFile();
}
if (vFile != null) {
return vFile.getPresentableUrl();
}
}
return null;
}
@Override
public boolean isInvalidElement(Object element) {
if (element instanceof Form) {
return !((Form) element).isValid();
}
return false;
}
@Override
public @NotNull
@NonNls String getFavoriteTypeId() {
return "form";
}
@Override
public @Nullable
@NonNls String getElementUrl(Object element) {
if (element instanceof Form form) {
return form.getClassToBind().getQualifiedName();
}
return null;
}
@Override
public String getElementModuleName(final Object element) {
if (element instanceof Form form) {
final Module module = ModuleUtil.findModuleForPsiElement(form.getClassToBind());
return module != null ? module.getName() : null;
}
return null;
}
@Override
public Object[] createPathFromUrl(final Project project, final String url, final String moduleName) {
final PsiManager psiManager = PsiManager.getInstance(project);
final PsiClass classToBind = JavaPsiFacade.getInstance(psiManager.getProject()).findClass(url, GlobalSearchScope.allScope(project));
if (classToBind == null) return null;
return new Object[] { new Form(classToBind) };
}
}