in flutter-idea/src/io/flutter/project/FlutterIconProvider.java [33:77]
public Icon getIcon(@NotNull PsiElement element, @IconFlags int flags) {
final Project project = element.getProject();
if (!FlutterModuleUtils.declaresFlutter(project)) return null;
// Directories.
if (element instanceof PsiDirectory) {
final VirtualFile dir = ((PsiDirectory)element).getVirtualFile();
if (!dir.isInLocalFileSystem()) return null;
final PubRootCache pubRootCache = PubRootCache.getInstance(project);
// Show an icon for flutter modules.
final PubRoot pubRoot = pubRootCache.getRoot(dir);
if (pubRoot != null && dir.equals(pubRoot.getRoot()) && pubRoot.declaresFlutter()) {
return FlutterIcons.Flutter;
}
final PubRoot root = pubRootCache.getRoot(dir.getParent());
if (root == null) return null;
// TODO(devoncarew): should we just make the folder a source kind?
if (dir.equals(root.getLib())) return AllIcons.Modules.SourceRoot;
if (Objects.equals(dir, root.getAndroidDir())) return AllIcons.Nodes.KeymapTools;
if (Objects.equals(dir, root.getiOsDir())) return AllIcons.Nodes.KeymapTools;
if (Objects.equals(dir, root.getIntegrationTestDir())) return AllIcons.Nodes.TestSourceFolder;
if (dir.isDirectory() && dir.getName().equals(".idea")) return AllIcons.Modules.GeneratedFolder;
}
// Files.
if (element instanceof DartFile) {
final DartFile dartFile = (DartFile)element;
final VirtualFile file = dartFile.getVirtualFile();
if (file == null || !file.isInLocalFileSystem()) return null;
// Use a simple naming convention heuristic to identify test files.
// TODO(pq): consider pushing up to the Dart Plugin.
if (FlutterUtils.isInTestDir(dartFile) && file.getName().endsWith("_test.dart")) {
return TEST_FILE;
}
}
return null;
}