Delete useless (X) useful (O) code

最近遇到一個 Bug,讓我想到一個笑話:「我都不敢請假,因為怕發現老闆發現有沒有我都一樣。」

Patch 的標題是:"[NFC] delete useless code"


內容是移除下面紅色的那幾行

    public void updateForShouldDefaultToObserveMode(int userId) {

        long token = Binder.clearCallingIdentity();

        try {

            if (!android.nfc.Flags.nfcObserveMode()) {

                Log.d(TAG, "observe mode isn't enabled");

                return;

            }

            NfcAdapter adapter = NfcAdapter.getDefaultAdapter(mContext);

            if (adapter == null) {

                Log.e(TAG, "adapter is null, returning");

                return;

            }


            ComponentName preferredService = mAidCache.getPreferredService().second;

            boolean enableObserveMode = mServiceCache.doesServiceShouldDefaultToObserveMode(userId,

                    preferredService);

           mHostEmulationManager.updateForShouldDefaultToObserveMode(enableObserveMode);

        } finally {

            Binder.restoreCallingIdentity(token);

        }

    }

乍看之下,我也覺得是沒用的 Code, Local variable 沒有使用,似乎也不需要存著,沒想到會造成 Intermittent 的 NFC 失效 Bug,雖然三個小時內立刻就被自動化測試抓到且解掉(還原)了,但我們剛好撿到這段 Code。

追了一下歷史,是之前的人 Refactor 的時候沒有寫好的問題。

上面藍色那行(左邊 1095 行),原本是 adapter.setObserveModeEnabled(enableObserveMode);,但 RD 把它移到 mHostEmulationManager.updateForShouldDefaultToObserveMode() 這個 function 裡面去了,裡面的實作也是先呼叫 NfcAdapter adapter = NfcAdapter.getDefaultAdapter(mContext); 然後再呼叫 adapter.setObserveModeEnabled(enableObserveMode);

@TargetApi(35)
@FlaggedApi(android.nfc.Flags.FLAG_NFC_OBSERVE_MODE)
public void updateForShouldDefaultToObserveMode(boolean enabled) {
synchronized (mLock) {
if (isHostCardEmulationActivated()) {
mEnableObserveModeAfterTransaction = enabled;
return;
}
}
NfcAdapter adapter = NfcAdapter.getDefaultAdapter(mContext);
adapter.setObserveModeEnabled(enabled);
}

結果沒有把這裡對 adapter 檢查是否為 Null 一起移植過去,所以就噴了。

學到的經驗

1. Refactor 的時候,要檢查過原函式有沒有對這些變數做什麼操作。

2. Refactor 時,如果已經移除最後的 instance usage 了,也要一併移掉區域變數,才不會留下一顆地雷。

留言

這個網誌中的熱門文章

好貴的東元冷氣維修--馬達啟動電容

台大醫院 婁培人 耳鼻喉科 就診

電腦無法自動待命、休眠sleep