“交流互鉴是文明发展的本质要求。只有同其他文明交流互鉴、取长补短,才能保持旺盛生命活力。” 这说的是文明,但映射到计算机技术本身也是相通的,开源代码/项目就是一种很好的技术交流方式。怎么借鉴开源代码来打造一些自身面对的问题解决方案?也许有一些Demo来进行回答演示或许更为贴近地气些。这里打算写一些玩转源码为主题的文字来实践的回答,最近在看P3C的一些源码,那就从这开始吧。

P3C-IDEA插件基本结构

主体功能上首先是菜单上的三个部分编码规约扫描、实时扫描开关、多语言切换,对应到Idea插件结构中的三个action:AliInspectionAction、ToggleProjectInspectionAction、SwitchLanguageAction 相关类都在com.alibaba.p3c.idea.action 包下面。三个action组成一个工具菜单(ToolMenu)组:com.alibaba.p3c.analytics.action_group 。3各action都是继承Idea插件SDK中的 AnAciton,具体执行逻辑在 actionPerformed(e: AnActionEvent) 中进行执行。

Aciton设计中,其中一个有意思的点在于利用update(e: AnActionEvent) 来进行多语言的支持。这种设计如果有需要实现Idea 插件多语言支持上都值得借鉴。

另外在Idea插件扩展上,注册了一个 AliLocalInspectionToolProvider 用于完成实时代码扫描相关构建,一些详细设计后续再细读。一个比较巧妙的点在于利用 javassist 动态构建注册相关代码规则相关执行类。

总结来说,初读完整体结构后就可以借鉴到一些设计;比如上述提及到的,Idea插件如何进行多语言设计、在大量某类代码需要进行类似改写可以利用 javassist 来进行动态注册。当然也有些觉着不好的点比如尽量还是不要进行语言混写(Icons单拎出来各 java写,而整体框架是 kotlin写)等,推测可能是由于一些插件SDK历史兼容问题导致。可以发现,在阅读源码过程种了解到的一些技术设计处理方式,这其实就是本文开头说提到的 “交流互鉴” ,这些设计技巧都可以参考应用到其他也有类似需求插件代码实践中去。在此,附上一张源码基本结构示意图:

先简单改改,添加皮肤功能

初步分析基本结构后,其实就可以利用源码进行一些尝试修改了。最近被某人吐槽不懂”emo”的含义。特别从网上搜了下意义,“在悲伤的基调下,一切的情绪不稳定皆可‘emo’。”,想到当遇到各类bug时候,程序员的心情不正是‘emo’。估且就把修改代码,取个项目名:Emo-coding-guardian,也声明下仅供研究、学习用途。

其实可以看到P3C插件做的非常精致,菜单中的图标、文字表述、状态变化后的图标都有相关设计。在了解其主体结构后,不妨添加一个自定义皮肤Config来自定义下皮肤。

先把icon相关的资源文件独立到一个文件夹进行管理,并新建一个 emo皮肤文件集合。并新建一个 SkinConfig 作为皮肤的配置类来进行相关设置,图标的ICON相关的主要在P3cIcons.java考虑语言统一性,这里用kotlin改写了下。同时,把对应的menu代码修改,在初始化阶段对ICON进行设置,如下:



相关皮肤资源的文件结构:

最终一些效果如下:

可以看到,我们在掌握了开源代码基本结构后,可以对其中一些点进行修改尝试。一方面验证是否符合我们理解,一方面也是更深入理解细节的过程。


当然打造企业自己代码规范插件并非改改皮肤,更重要的在于,如何利用P3C进行相关代码规则的编写工作。且请关注,在后续的文章中,我们再接着进行探索。

附上相关代码github链接:https://github.com/ariesfly/emo-coding-guardian

如有遇到问题欢迎公众号私信留言

​打造企业自己代码规范IDEA插件(上)的更多相关文章

  1. ​打造企业自己代码规范IDEA插件(中)

    一些基本概念 在开始独立研发公司自己的代码规范检查规则之前,先介绍一些相关的基本概念.阿里巴巴代码规范很多规则其实都是基于开源框架PMD进行的研发.PMD用官方的话语介绍来说:PMD是一个源代码分析器 ...

  2. 2016 正确 sublime安装PHPcs PHPcodesniffer代码规范提示插件,修正网上部分不详细描述

    对你有助请点赞,请顶,不好请踩------送人玫瑰,手留余香!-------------------14:37 2016/3/212016 正确 sublime安装PHPcs PHPcodesniff ...

  3. 代码规范:idea上添加阿里巴巴Java开发插件

    在一个项目中,不可缺少的是书写代码的规范,没有好的代码规范约束,大家各写各的,十分不利于代码的维护与修改.     首先来看看如何在idea上添加这个插件: 直接上图 点击右边的蓝色按钮就可以安装了, ...

  4. JAVA代码规范笔记(上)

    本文为<code conventions-150003>(JAVA代码规范)笔记. 文件组织 1.超过2000行代码的源文件将会比较难以阅读,应该避免. 2.每个Java源文件都包含单一的 ...

  5. IDEA 阿里巴巴代码规范检查插件

    1.问题概要 大家都想写出规范的代码,可规范的标准是什么勒,估计每个人心中的标准都不是完全一致的 在分工合作越来越精细化的时代,我们需要一个最大程度接近公认的规范,这里我们以阿里巴巴的代码规范作为参考 ...

  6. Webpack 2 视频教程 009 - 配置 ESLint 实现代码规范自动测试 (上)

    原文发表于我的技术博客 这是我免费发布的高质量超清「Webpack 2 视频教程」. Webpack 作为目前前端开发必备的框架,Webpack 发布了 2.0 版本,此视频就是基于 2.0 的版本讲 ...

  7. 静态代码扫描之阿里java代码规范IDEA插件

    前言 2017年2月9日,首次公布<阿里巴巴Java开发手册>; 2017年9月25日,阿里巴巴集团发布了<阿里巴巴Java开发手册>PDF终极版; 2017年10月14日,在 ...

  8. Java代码规范_插件_阿里java开发手册

    给大家分享一个阿里巴巴的java开发规范,在日常自动化工作中我们可以参考一下,特别是用java进行coding的同学. 而且还可以利用相应的插件进行代码扫描检测,感兴趣的们可以马上应用到自动化中来. ...

  9. IDEA06 代码规范检测插件之Alibaba Java Coding Guidelines

    1 官方资料 1.1 官方介绍 https://mp.weixin.qq.com/s/IbibsXlWHlM59kfXJqRvZA#rd 1.2 github地址 https://github.com ...

随机推荐

  1. javaweb 02: servlet

    Servlet对象的生命周期 什么是Servlet对象生命周期? Servlet对象什么时候被创建. Servlet对象什么时候被销毁. Servlet对象创建了几个? Servlet对象的生命周期表 ...

  2. 【做题笔记】CF Edu Round 132

    1. 前言 本人第一次把 Div2. D 切了,开心. C 不会,寄. 后来在场外想到一种奇怪做法 AC 了. 2. 正文(A-D) CF 比赛链接 A. Three Doors 签到题.循环查找手中 ...

  3. 反射概述和反射获取字节码Class对象的三种方式

    反射:框架设计的灵魂 框架:半成品软件.可以在框架的基础上进行软件开发,简化变法 反射:将类的各个组成部分封装为其他对象,这就是反射机制 好处: 1.可以在程序运行的过程中操作这些对象. 2.可以解耦 ...

  4. 通过类名引用静态成员方法和通过super引用父类的成员方法

    package com.yang.Test.StaticMethodReference; /** * 通过类型引用静态成员方法 * 类已经存在,静态成员方法也已经存在 * 就可以通过类名直接引用静态成 ...

  5. YII服务定位器依赖注入

    <?php /** * Created by PhpStorm. * Date: 2016/5/25 * Time: 18:33 * 服务定位器依赖注入 */ namespace fronten ...

  6. 简短截说阐述redis中事务的使用

    原文转载自「刘悦的技术博客」https://v3u.cn/a_id_127 我们知道,在关系型数据库中,比如mysql,如果要使用事务,首先向数据库服务器发送 BEGIN ,然后执行各个相互一致的写操 ...

  7. odoo14 编辑状态和非编辑状态下隐藏

    1 <div class="oe_edit_only"> 2 <a name="remove_group_id" type="obj ...

  8. python通过CMD直接生成exe文件

    py文件打包好为exe文件: pyinstaller -F --icon=my.ico test.py my.ico 是一个图标名,和当前的test.py文件在同一个目录下 常用参数说明: –icon ...

  9. 在docker中出现的僵尸进程怎么处理

    GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源. 一.发现问题 小玲是一名数据库测试人员,这一天她尝试在docker环境中部署GreatDB集群,结果在对greatsqld ...

  10. DolphinScheduler 集群高可用测试:有效分摊服务器压力,达到性能最大优化!

    点击上方 蓝字关注我们 1 文档编写目的 Apache DolphinScheduler(简称DS)是一个分布式去中心化,易扩展的可视化DAG工作流任务调度平台.在生产环境中需要确保调度平台的稳定可靠 ...