mirror of
https://gitee.com/dromara/sa-token.git
synced 2026-05-14 04:42:09 +08:00
1.8 KiB
1.8 KiB
冗余 import 检测规则
解析步骤
1. 提取 package
匹配 package\s+([\w.]+)\s*;,得到当前文件所在包。
2. 提取 import
匹配以下模式(每行一条):
import\s+([\w.]+)\s*;— 普通 importimport\s+static\s+([\w.]+)\s*;— static 导入类import\s+static\s+([\w.]+)\.(\w+)\s*;— static 导入成员(方法/字段)import\s+[\w.]+\s*\.\s*\*\s*;— 通配符,跳过不处理
3. 确定简单名(Simple Name)
| import 类型 | 示例 | 简单名 |
|---|---|---|
| 普通类 | import java.util.List; |
List |
| 内部类 | import pkg.Outer.Inner; |
Inner |
| static 类 | import static pkg.Utils; |
Utils |
| static 成员 | import static pkg.Utils.foo; |
foo |
4. 同包冗余
若 import x.y.Z 的包 x.y 与当前文件 package x.y 相同,则该 import 冗余(同包无需导入)。
5. 使用检测
在类体(package 和所有 import 之后)中搜索:
- 使用正则
\bSimpleName\b匹配整词,避免误匹配子串 - 排除:注释、字符串字面量中的出现
- 若未找到匹配,则该 import 视为未使用
边界情况
| 情况 | 处理方式 |
|---|---|
import pkg.*; |
跳过,不自动移除 |
注解中的类型 @Foo |
若 Foo 为 import 的简单名,视为已使用 |
泛型 List<String> |
List 会匹配,视为已使用 |
同名类(如 java.util.Date 与 java.sql.Date) |
两 import 都保留;若仅一个被使用,只移除未使用的 |
Javadoc @param 中的类型 |
保守:若不确定则保留 |
正则参考
// package
package\s+([\w.]+)\s*;
// 普通 import(非通配符)
import\s+(?!static)([\w.]+)\s*;
// static import 成员
import\s+static\s+[\w.]+\.(\w+)\s*;
// static import 类
import\s+static\s+([\w.]+)\s*;