簡體   English   中英

測試空的凹槽閉合?

[英]testing for empty groovy closure?

我想讓用戶為groovy類提供一個屬性,該屬性是一個文件選擇器閉包,我將其傳遞給AntBuilder的“復制”任務:

  class Foo {
    def ANT = { fileset(dir:'/tmp/tmp1') }
  }

在我的代碼中,我將ANT屬性選擇為“ fAnt”並傳遞給Ant:

  ant.copy(todir:'/tmp/tmp2', fAnt)

這行得通-但是,如果用戶傳入一個空的閉包(def ANT = {})或使用一個沒有選擇任何內容的選擇器(也許文件集目錄不存在),則它會崩潰。 我嘗試用try-catch包圍ant副本以捕獲InvokerInvocationException,但是無論如何還是會發生異常……當我跟蹤該異常時,是否有辦法以字符串的形式回讀Groovy Closure的內容,或者測試是否為空?

簡而言之:不能。您無法在運行時以一種笨拙的方式反編譯閉包。 如果由用戶提供,則Closure甚至可以是Java類。

長答案:如果您想做很多工作,也許可以,但是這不值得。 Groovy解析器是API的一部分,因此,如果您有權訪問源,則可以從理論上檢查AST並確定閉包是否為空。 查看SourceUnit類。

但是,幾乎可以肯定,這是不值得的。 最好捕獲異常並添加一條有用的消息,例如“您可能已經傳遞了空的閉包或無效的文件集”。

一個謎團解決了-我需要捕獲的異常是org.apache.tools.ant.BuildException-因此我可以捕獲該異常以捕獲錯誤,但原始問題仍然存在-有沒有辦法檢查Closure的內容?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM