Files
openide/python/src/com/jetbrains/python/PyDirectoryIconProvider.java
T
Ilya.Kazakevichandintellij-monorepo-bot 2888d207d9 PY-82580: pyproject.toml refactoring to combine all pyproject.toml EPs to single API
The main idea is to decouple tool implementation from low-level platform APIs: Open project processor, workspace model e.t.c.
Implementing `spi.Tool` should be enough to introduce new tool.

GitOrigin-RevId: 1177b57fc0eee1ca2c88cac5b20618a6170bf521
2025-10-01 02:21:16 +00:00

48 lines
1.8 KiB
Java

// Copyright 2000-2022 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
package com.jetbrains.python;
import com.intellij.icons.AllIcons;
import com.intellij.ide.IconProvider;
import com.intellij.ide.projectView.impl.ProjectRootsUtil;
import com.intellij.openapi.module.Module;
import com.intellij.openapi.module.ModuleUtilCore;
import com.intellij.openapi.roots.FileIndexFacade;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.psi.PsiDirectory;
import com.intellij.psi.PsiElement;
import com.intellij.python.pyproject.model.internal.PlatformToolsKt;
import com.jetbrains.python.psi.PyUtil;
import org.jetbrains.annotations.NotNull;
import javax.swing.*;
public final class PyDirectoryIconProvider extends IconProvider {
@Override
public Icon getIcon(@NotNull PsiElement element, int flags) {
if (element instanceof PsiDirectory directory) {
if (PlatformToolsKt.getProjectModelEnabled()) {
if (ProjectRootsUtil.isModuleContentRoot(directory.getVirtualFile(), directory.getProject())) {
return AllIcons.Nodes.Module;
}
}
// Preserve original icons for excluded directories and source roots
if (isSpecialDirectory(directory)) return null;
if (PyUtil.isExplicitPackage(directory)) {
return AllIcons.Nodes.Package;
}
}
return null;
}
private static boolean isSpecialDirectory(@NotNull PsiDirectory directory) {
final VirtualFile vFile = directory.getVirtualFile();
if (FileIndexFacade.getInstance(directory.getProject()).isExcludedFile(vFile)) {
return true;
}
final Module module = ModuleUtilCore.findModuleForPsiElement(directory);
return module == null || PyUtil.getSourceRoots(module).contains(vFile);
}
}