前二天在昇級 Android Studio 到 1.3.1 之後,發現了一個奇怪的問題。由於更新後 Android Studio 需要重啟,但在 Android Studio 重啟後,所有 FIXME 及 TODO 的註解無法呈現 Highlight 的效果,同時在 TODO 的 Tool Window 中也搜尋不到任可的 TODO 項目。
在檢查過相關的設定之後,發現 TODO 的 Pattern 設定都被清掉了,難怪沒有辦法顯示 Highlight 的效果,也搜尋不到任何的 TODO 項目,甚至連原本設定的 Filter 都因為失效而顯示紅色。
因為原本就沒有定義額外的 Pattern,所以依照
官網的說明,將以下二個預設的 Pattern 加回去後就恢復正常了。
如果是像我一樣有自己新增 Filter 的設定,在加完 Pattern 後還是要再重新修改 Filter 的內容。
事情本來應該就這樣結束了,但其實案情並不單純,就在某個需要下重啟 Android Studio 後,TODO 的所有 Pattern 設定內容又被清除了!
由於這個功能在我進行開發工作時扮演了重要的角色,只好先放下手邊的工作研究一下。之所以重要是因為在開發的時候不一定可以完美地依照需求或設計的順序輸入程式碼,有可能會需要把繕打到一半的程式碼擱著,先去完成其他部份。或是有可能需求或設計還不確定,先以仿造的邏輯來輸入程式碼做為替代,等不確定的部份有明確的結果後再回來調整程式碼。
然而,在此時如果沒有一個有系統的方式來標注程式碼,完全依靠記憶力來找到這些待修改的程式碼,是一個非常不可靠的方式。就算是以重新檢視全部程式碼的方式,也有可能因為分神而漏看,再者程式的規模大到一定的程度,這種方式就變成了一種精神上的折磨。
故意讓程式編譯失敗是一個方法,但程式就會一直處於無法藉由執行來確認程式是否正常運作的狀態。反之,如果當初擱下的程式碼沒有編譯上的問題,就有可能因為開發的負責人忘了修改,造成程式上線一陣子了,才發現程式其實沒有完成就交付給使用者、更嚴重的可能已經造成了大量資料的錯誤。這在一般的軟體開發案子中並不罕見,因為很多的案子是沒有足夠的資源做後續的驗証與測試,以簡單的 UAT 做把關、沒有明顯的問題就放行了。
在註解中使用 FIXME 或 TODO 是解決這項問題的好方案,可以用文字來說明程式碼有問題的地方或是待完成的工作,絕大部份的 IDE 也都提供了 Highlight 的功能。比故意讓程式編譯失敗要有人性,不用費神去回想為何編譯會失敗、程式要如何改正。是可以有效地在開發階段的初期發現問題、降低系統運作問題的風險。當然,這也是要負責程式碼的人有養成良好的習慣才會有效果,所以這個習慣應做為建立團隊文化的重要規則之一。
有了好習慣,一旦沒有了 Highlight 的功能,就沒有辦法很直覺地找到還有問題的程式碼片斷,同時因為 Tool Window 也失效、列不出清單,只能以搜尋的功能來替代,對工作效率來說是有不小的影響。
印象中之前重啟 Android Studio 時並沒有出現同樣的問題,這個情況似乎是在我設定 Filter 之後才發生。我習慣把在上線前一定要修改的項目以 FIXME 標注、可以等上線後再思考解決方案的項目以 TODO 來標注。所以會需要在 TODO 的 Tool Window 中過濾 FIXME 和 TODO,以便了解在上線前還有多少部份的程式碼是沒有完成的,讓我可以專注在 FIXME 的項目上。
根據這個需求我設了二個 Filter 分別只勾取其中一個 Pattern,讓我可以在 TODO 的 Tool Window 來切換不同的清單。為了確認是不是設定 Filter 所產生的問題,我就將 Filter 全數刪除了之後重啟 Android Studio,果不其然 Pattern 這次就沒有被清除掉了,這應該是一個 Android Studio 的 Bug 吧!
但如果是為了解決重啟 Android Studio 後不清除 TODO Pattern,那不就沒有辦法使用 Filter 了嗎!? 好吧!秉持著研究的精神,就在 TODO 的設定畫面中試了幾個不同的 Pattern 及 Filter 的組合,總算發現了一個 Workaround!
原本如果只有預設的二項 Pattern,一旦設定了 Filter 就會有重啟後被清除的現象。但是在預設的二項 Pattern 外再加上一項自訂的 Pattern,依我原本的條件設定 Filter 就可以在重啟 Android Studio 之後保有重啟之前的 Pattern 設定。
目前我工作的環境是 OS X 10.10.4 及 Android Studio 1.3.1,有類似問題的朋友可以參考看看。