zoukankan      html  css  js  c++  java
  • IDEA 项目文件图标渲染类 CompoundIconProvider

    此类汇集了所有的插件扩展出的IconProvider, 然后进行遍历渲染.

    自己的项目可以继承 IconProvider并在项目中声明(注意加order="first", 否则可能没有机会执行):

    <iconProvider implementation="io.flutter.project.FlutterIconProvider" order="first"/>

    package com.intellij.ide.projectView.impl;
    
    import com.intellij.icons.AllIcons;
    import com.intellij.ide.IconProvider;
    import com.intellij.openapi.diagnostic.Logger;
    import com.intellij.openapi.progress.ProcessCanceledException;
    import com.intellij.openapi.progress.ProgressManager;
    import com.intellij.openapi.project.IndexNotReadyException;
    import com.intellij.psi.PsiDirectory;
    import com.intellij.psi.PsiElement;
    import com.intellij.ui.IconManager;
    import org.jetbrains.annotations.NotNull;
    import org.jetbrains.annotations.Nullable;
    
    import javax.swing.Icon;
    
    /**
     * This class is intended to combine all providers for batch usages.
     */
    public final class CompoundIconProvider extends IconProvider {
      private static final IconProvider INSTANCE = new CompoundIconProvider();
      private static final Logger LOG = Logger.getInstance(CompoundIconProvider.class);
    
      @Nullable
      @Override
      public Icon getIcon(@NotNull PsiElement element, int flags) {
        if (element.isValid()) {
          for (IconProvider provider : EXTENSION_POINT_NAME.getExtensions()) {
            ProgressManager.checkCanceled();
            try {
              Icon icon = provider.getIcon(element, flags);
              if (icon != null) {
                LOG.debug("icon found in ", provider);
                return icon;
              }
            }
            catch (IndexNotReadyException exception) {
              throw new ProcessCanceledException(exception);
            }
            catch (ProcessCanceledException exception) {
              throw exception;
            }
            catch (Exception exception) {
              LOG.warn("unexpected error in " + provider, exception);
            }
          }
          return element.getIcon(flags);
        }
        return null;
      }
    
      @Nullable
      public static Icon findIcon(@Nullable PsiElement element, int flags) {
        return element == null ? null : INSTANCE.getIcon(element, flags);
      }
    }
  • 相关阅读:
    注意身体
    用生命去战斗
    来到华师,一切清零
    linux fork()函数 转载~~~~
    小端大端
    位域
    内存泄漏(memory leak)和内存溢出
    stack,heap的区别
    内存管理简便复习总结
    虚函数&&虚继承
  • 原文地址:https://www.cnblogs.com/beansoft/p/13269137.html
Copyright © 2011-2022 走看看