Files
starRiverProperty/docs/superpowers/data/2026-05-05-componentorg-service-errors-classification.md
T
反编译工作区 50af6e739d fix: P0+P2+P3 — CpOrgDevieKit, ValidateManager, OrganizationServiceImpl clean
P0: CpOrgDevieKitServiceImpl (54→0)
- Fixed 10 $\$ artifacts with correct variable names
- Typed 7 raw Collection/List/Set declarations
- Removed (Object) casts from redisTemplate calls

P2: CpImageStorePersonValidateManager (36→0)
- Added RedisCallback cast for execute() ambiguity
- Typed Map.Entry for-each with proper generics
- Fixed ternary type mismatch (List<Object>→SyncPersonLocal)
- Typed waitAddValidateList as List<GroupPersonRef>

P3: OrganizationServiceImpl (32→0)
- Typed 7 raw List declarations (refDTOS, data, organizations, etc)
- Fixed ArrayList<> vs List<> assignment
- Typed passableArea/officeArea streams
2026-05-05 23:47:18 +08:00

263 lines
9.2 KiB
Markdown

# Component-Org Service 编译错误分类 (200 errors, 8 files)
**日期**: 2026-05-05
**构建**: `mvn compile -DskipTests -s ../maven-cw-elevator-application/.mvn/settings.xml`
**JDK**: 1.8.0_482 | **Spring Boot**: 1.5.22 | **CFR 反编译**: 0.152
---
## 错误总览
| 类别 | 数量 | 根因 | 自动修复难度 |
|------|------|------|-------------|
| No-symbol (找不到符号) | 78 | `$$$` ast-grep 残留 + raw stream 调用 + 方法歧义 | ⭐⭐ 中 |
| Object→cast | 76 | raw List/Map 失去泛型 | ⭐⭐⭐ 高 |
| Type-mismatch | 22 | 类型声明与使用不匹配 | ⭐⭐ 中 |
| Ambiguous (方法歧义) | 16 | redisTemplate.execute() 歧义 | ⭐ 低 |
| Type-inf (类型推断) | 6 | 空集合初始化泛型推断 | ⭐ 低 |
**总计**: 200 errors in 8 files
---
## 1. No-symbol (78 errors)
### 1.1 `$$$` ast-grep 残留 (36 errors)
**涉及文件**: CpOrgDevieKitServiceImpl (32), OrganizationUnitTypeServiceImpl (12), AreaTypeServiceImpl (2)
**根因**: `ast_grep_replace``return CloudwalkResult.success(X)` 改为 `return (CloudwalkResult) CloudwalkResult.success($$$)` 时, `$$$` 捕获参数但 rewrite 时 `$$$``success()` 括号内丢失了 X — X 变量覆盖了 `$$$` 变量名。
**源代码模式**:
```java
// 改写前 (ast-grep)
return CloudwalkResult.success(updateGroupResult);
// 改写后 (异常)
return (CloudwalkResult) CloudwalkResult.success($$$);
```
**修复方案**: 逐行恢复原始表达式。
**影响方法**:
- CpOrgDevieKitServiceImpl: `onUpdateGroupRequest(L117)`, `onUpdateFeatureRequest(L127/L140/L166)`, `onUpdatePictureRequest(L176/L189/L215)`, `onUpdatePersonRequest(L235/L255/L310)`, `handlePersonValidDate(L522/L530)`
- OrganizationUnitTypeServiceImpl: `page(L76)`, `getList(L110)`, `defaultInitOrgType(L121/L145)`, `initParkOrg(L188/L227)`
- AreaTypeServiceImpl: `add(L104)`
### 1.2 raw stream `.map()` 调用 Object 方法 (12 errors)
**涉及文件**: OrganizationServiceImpl.detail(L814,L815,L824,L843), CpImageStorePersonManager(L110,L357,L365,L386)
**根因**: raw List 的 `.stream()` 返回 `Stream<Object>`, 对 Object 调用 `.getAreaId()` / `.getImageStoreId()` 找不到方法。
**源代码模式**:
```java
// refDTOS 是 raw List, stream() 是 Stream<Object>
List officeArea = refDTOS.stream()
.filter(it -> it.getRefType() == 0) // Object 没有 getRefType()
.map(o -> o.getAreaId()) // Object 没有 getAreaId()
.collect(Collectors.toList());
```
**修复方案**: 在 stream 前添加 `(List<OrganizationAreaRefDTO>)` 转换,或定义变量时指定泛型。
### 1.3 redisTemplate.delete(Object) (2 errors)
**涉及文件**: CpOrgDevieKitServiceImpl.unlockSyncLog(L593)
**根因**: `redisTemplate.delete(Object)` — RedisTemplate 的 `delete()` 签名是 `delete(K key)` 泛型, 传入 Object 无法匹配。
**修复方案**: 删除 `(Object)` 转型, 直接传 key: `this.redisTemplate.delete(key);`
---
## 2. Object→cast (76 errors)
### 2.1 for-each over raw Collection (30+ errors)
**涉及文件**: CpImageStorePersonSynManager, CpImageStorePersonValidateManager, CpOrgDevieKitServiceImpl
**根因**: raw List/Map 遍历时 Iterator 返回 Object, 无法赋值给具体类型。
**源代码模式**:
```java
// removeMap 是 raw Map
for (Map.Entry entry : removeMap.entrySet()) { ... }
// 修复:
for (Map.Entry<Long, Set<SyncPersonLocal>> entry : removeMap.entrySet()) { ... }
// personInfoDataDatas 是 raw Collection
for (DeviceImageUpdateFeautreResult deviceUpdatePersonResult : personInfoDataDatas) { ... }
// 修复: 声明 personInfoDataDatas 为 Collection<DeviceImageUpdateFeautreResult>
```
**修复方案**: 找到 raw Collection 的声明位置, 添加泛型类型参数。如果变量有多态使用, 则添加 `(Collection<Type>)` 转换。
### 2.2 redisTemplate.keys() 返回 raw Set (8 errors)
**涉及文件**: CpImageStorePersonSynManager.checkHandleSynTaskException(L489,L492,L499,L502)
**根因**: `redisTemplate.keys(pattern)` 返回 `Set<K>`, 但声明为 raw `Set`, 后续 `.replaceFirst()` 等方法在 Object 上找不到。
**源代码模式**:
```java
Set synQueueHeadDataKeys = this.redisTemplate.keys(...);
String imageStoreId = synQueueHeadDataKey.replaceFirst(SYN_QUEUE_HEAD_DATA, "");
```
**修复方案**: 声明为 `Set<String>`:
```java
Set<String> synQueueHeadDataKeys = this.redisTemplate.keys(...);
```
### 2.3 Map.get() 返回 Object (8 errors)
**涉及文件**: CpImageStorePersonManager(L316,L336), OrganizationUnitTypeServiceImpl(L59)
**根因**: raw Map 的 `get()` 返回 Object, 无法调用 `.setPersonId()` 或赋值给 Integer。
**修复方案**: 声明 Map 为 `Map<K, V>` 泛型, 或在 get() 结果上添加强制转型。
### 2.4 stream().collect() 返回 Object (10 errors)
**涉及文件**: OrganizationServiceImpl.saveAreaDetails(L963,L970,L974,L981)
**根因**: raw List 的 stream 操作, collect 返回 Object 无法赋值给具体类型。
**修复方案**: 在 stream 前添加 `(List<String>)` 转换:
```java
List passableList = ((List<String>)passableArea).stream().map(...).collect(Collectors.toList());
```
---
## 3. Type-mismatch (22 errors)
### 3.1 `String` → `Set<String>` 转型 (8 errors)
**涉及文件**: CpImageStorePersonSynManager(L489,L492,L499,L502)
**根因**: 代码写了 `(java.lang.String)` 转型但实际类型是 `Set`:
```java
Set synQueueHeadDataKeys = (java.lang.String) this.redisTemplate.keys(...);
```
**修复方案**: 修改转型为目标类型:
```java
Set<String> synQueueHeadDataKeys = this.redisTemplate.keys(...);
```
### 3.2 三元表达式类型不一致 (4 errors)
**涉及文件**: CpImageStorePersonValidateManager(L150, L453)
**根因**:
```java
List<Object> syncPersonDtoList = StringUtils.isNotBlank(dataSet)
? JsonUtils.toObjList(dataSet, SyncPersonLocal.class)
: new ArrayList<>(); // inferred as ArrayList<Object>
```
`JsonUtils.toObjList()` 返回 `List<SyncPersonLocal>`, `new ArrayList<>()` 推断为 `ArrayList<Object>`, 三元运算符的两个分支类型不一致。
**修复方案**: 指定 ArrayList 的泛型:
```java
: new ArrayList<SyncPersonLocal>()
```
### 3.3 `ArrayList<String>` vs `List<String>` (2 errors)
**涉及文件**: OrganizationServiceImpl.getList(L552)
**根因**: `ids` 声明为 `ArrayList<String>``param.getIds()` 返回 `List<String>`, 不能直接赋值。
**修复方案**:
```java
ids = new ArrayList<>(param.getIds()); // 或
ids.clear(); ids.addAll(param.getIds());
```
### 3.4 `List<Object>` vs `List<String>` (2 errors)
**涉及文件**: OrganizationServiceImpl.detail(L826)
**根因**: zoneIds 声明为 `List<Object>``result.setZoneIds()` 接受 `List<String>`
**修复方案**:
```java
result.setZoneIds((List<String>)(List<?>) zoneIds); // 双重转型绕过泛型检查
```
### 3.5 `List<List<T>>` vs `List<List>` (2 errors)
**涉及文件**: CpImageStorePersonTxHandler.handleImageStorePersonDelete(L201)
**根因**: `Lists.partition()` 返回 `List<List<T>>` 但赋值给 `List<List>`
**修复方案**:
```java
List<List<String>> partition = Lists.partition(changePersonIds, delBatchSize);
```
---
## 4. Ambiguous (16 errors) - redisTemplate.execute() 歧义
**涉及文件**: CpImageStorePersonSynManager (12), CpImageStorePersonValidateManager (4)
**根因**: `RedisTemplate<K,V>.execute()` 有两个重载:
- `execute(RedisCallback<T> callback)`
- `execute(SessionCallback<T> callback)`
lambda `connection -> connection.eval(...)` 同时匹配 RedisCallback 和 SessionCallback。
**源代码**:
```java
this.redisTemplate.execute(connection -> (Long)connection.eval(lua, keys, args))
```
**修复方案**: 添加 lambda 参数类型或转型:
```java
this.redisTemplate.execute((RedisCallback<Long>) connection -> connection.eval(lua, keys, args))
```
---
## 5. Type-inf (6 errors) - 类型推断失败
### 5.1 Sets.newHashSet() 泛型推断 (2 errors)
**涉及文件**: CpImageStorePersonTxHandler.deletePersonFromImageStores(L221)
**根因**: `Sets.newHashSet((Object[])new String[]{imageId})` — 重建数组丢失类型。
**修复方案**:
```java
Sets.newHashSet(imageId) // 或
Sets.<String>newHashSet(new String[]{imageId})
```
### 5.2 Map infer from stream (4 errors)
**涉及文件**: CpImageStorePersonSynManager.handleImageStoreIncrementSyn(L417,L418)
**根因**: `.collect(Collectors.groupingBy(...))` 的结果赋值给 `Map<String, List<GroupPersonRef>>` 但 stream 是 raw。
**修复方案**: 先转型 source 再 stream。
---
## 每文件修复优先级
| 文件 | 错误数 | 主要类别 | 修复复杂度 | 预估时间 |
|------|-------|---------|-----------|---------|
| CpOrgDevieKitServiceImpl | 54 | $$ (32), Obj→cast (20) | ⭐⭐ | 30 min |
| CpImageStorePersonSynManager | 38 | Obj→cast (10), Ambiguous (12) | ⭐⭐ | 25 min |
| OrganizationServiceImpl | 32 | No-sym (14), Obj→cast (14) | ⭐⭐ | 20 min |
| CpImageStorePersonValidateManager | 28 | Obj→cast (12), Type-mis (8) | ⭐⭐ | 20 min |
| CpImageStorePersonManager | 16 | No-sym (8), Obj→cast (8) | ⭐⭐ | 15 min |
| OrganizationUnitTypeServiceImpl | 14 | $$ (12), Obj→cast (2) | ⭐ | 10 min |
| AreaTypeServiceImpl | 10 | $$ (2), Obj→cast (8) | ⭐ | 10 min |
| CpImageStorePersonTxHandler | 8 | Type-mis (2), No-sym (2) | ⭐ | 5 min |
**总预估**: 约 2 小时逐行修复。