Skip to content

[AI Refactoring] WiFiDirectErrorFactory.ThrowWiFiDirectException default 분기 누락 → 미매핑 에러 코드 silent failure (호출부 78곳) + switch expression 전환 [Scope: src/Tizen.Network.WiFiDirect] (2026-08-02) #7781

Description

@JoonghyunCho

[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)

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions