[Type: Refactoring]
[Scope: src/Tizen.Network.WiFiDirect]
[Priority: 🔴 Critical]
[Lens: Coding Guidelines, Modernization]
Observation
WiFiDirectErrorFactory.ThrowWiFiDirectException (WiFiDirectError.cs:23-63)은 17-case switch 문으로 에러 코드를 예외로 변환하지만 default 분기가 없습니다.
internal static void ThrowWiFiDirectException(int exception)
{
WiFiDirectError _error = (WiFiDirectError)exception;
switch (_error)
{
case WiFiDirectError.InvalidParameter:
throw new InvalidOperationException("Invalid parameter");
... // 17 cases
}
// 미매핑 코드 → 아무것도 던지지 않고 정상 반환!
}
이 메서드는 항상 ret != WiFiDirectError.None 실패 경로에서 호출되며, 어셈블리 내 호출부는 78곳입니다 (WiFiDirectManagerImpl.cs 40곳, WiFiDirectManager.cs 25곳, WiFiDirectPeer.cs 12곳, WiFiDirectError.cs 1곳 — rg 측정).
Problem
Proposed Improvement
기존 매핑(예외 타입/메시지)은 전부 보존하고, default 분기만 추가하면서 switch expression으로 전환합니다.
After:
internal static void ThrowWiFiDirectException(int exception)
{
WiFiDirectError error = (WiFiDirectError)exception;
throw error switch
{
WiFiDirectError.InvalidParameter => new InvalidOperationException("Invalid parameter"),
WiFiDirectError.AlreadyInitialized => new InvalidOperationException("Already initialized"),
// ... 기존 17개 매핑 그대로 ...
WiFiDirectError.NotSupported => new NotSupportedException("Not supported"),
WiFiDirectError.PermissionDenied => new UnauthorizedAccessException("Permission denied (http://tizen.org/privilege/wifidirect)"),
_ => new InvalidOperationException($"Unknown Wi-Fi Direct error: {error} (0x{exception:X})")
};
}
주의: 기존 17개 매핑의 예외 타입은 public 동작이므로 변경하지 않습니다 (예: OutOfMemory → InvalidOperationException 유지).
Target Files
src/Tizen.Network.WiFiDirect/Tizen.Network.WiFiDirect/WiFiDirectError.cs
Expected Impact (Quantitative Metrics)
- 미매핑 에러 코드 silent failure 경로: 호출부 78곳 → 0곳
- 메서드 LOC: 41 → 약 25
- throw 보장: switch 문(비보장, fall-through 반환 가능) →
throw ... switch (전 경로 throw 컴파일러 보장)
API Compatibility Check
Impact Scope
- 수정 심볼 호출부: 어셈블리 내 78곳 (rg 측정), 시그니처 불변이므로 호출부 수정 불필요
- 타 어셈블리 영향 없음 (internal)
[Type: Refactoring]
[Scope: src/Tizen.Network.WiFiDirect]
[Priority: 🔴 Critical]
[Lens: Coding Guidelines, Modernization]
Observation
WiFiDirectErrorFactory.ThrowWiFiDirectException(WiFiDirectError.cs:23-63)은 17-caseswitch문으로 에러 코드를 예외로 변환하지만 default 분기가 없습니다.이 메서드는 항상
ret != WiFiDirectError.None실패 경로에서 호출되며, 어셈블리 내 호출부는 78곳입니다 (WiFiDirectManagerImpl.cs 40곳, WiFiDirectManager.cs 25곳, WiFiDirectPeer.cs 12곳, WiFiDirectError.cs 1곳 — rg 측정).Problem
Activate()실패가 무시됨,GetConnectingPeer()의 후속Marshal.PtrToStructure도달 등). 동일 결함 클래스가 [AI Refactoring] ConnectionErrorFactory.ThrowConnectionException default 분기 누락 → switch expression 으로 silent failure 차단 [Scope: src/Tizen.Network.Connection] (2026-04-26) #7591(Connection), [AI Refactoring] DownloadErrorFactory.ThrowException default 분기 누락 → 미매핑 에러 코드 silent failure (호출부 45곳) + switch expression 전환 [Scope: src/Tizen.Content.Download] (2026-07-26) #7771(Download)로 이미 정상화된 전례가 있습니다.case → throw41 LOC는 C# 8 switch expression으로 축약 가능합니다.Proposed Improvement
기존 매핑(예외 타입/메시지)은 전부 보존하고, default 분기만 추가하면서 switch expression으로 전환합니다.
After:
주의: 기존 17개 매핑의 예외 타입은 public 동작이므로 변경하지 않습니다 (예:
OutOfMemory → InvalidOperationException유지).Target Files
src/Tizen.Network.WiFiDirect/Tizen.Network.WiFiDirect/WiFiDirectError.csExpected Impact (Quantitative Metrics)
throw ... switch(전 경로 throw 컴파일러 보장)API Compatibility Check
Impact Scope