public Icon getIcon()

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;
  }