[英]How can I create a void return statement in a Groovy AST transformation?
我正在構建一個AST轉換,該轉換生成一個void
方法。 我想檢查傳入的值是否已經等於另一個值,如果是,則盡早退出。 該代碼通常如下所示:
if(param.is existing) {
return
}
ReturnStatement
類具有returningNullOrVoid
屬性,該屬性檢查返回的表達式是否為null
,因此我嘗試了一種明顯的方法:
ifS(sameX(paramEx, existingEx), returnS(constX(null))
這在編譯轉換后的類時產生了異常:
BUG! exception in phase 'instruction selection' in source unit 'Annotated.groovy' Unexpected return statement at -1:-1 return null
如何為早日退出插入return語句?
ReturnStatement
類具有一個名為RETURN_NULL_OR_VOID
的常量:
/**
* Only used for synthetic return statements emitted by the compiler.
* For comparisons use isReturningNullOrVoid() instead.
*/
public static final ReturnStatement RETURN_NULL_OR_VOID = new ReturnStatement(ConstantExpression.NULL);
Groovy編譯器檢查此特定實例以生成一個空return;
。 創建包含return語句的AST語句塊時,您的語句是 “編譯器發出的合成return語句”,您應該使用該常量:
ifS(sameX(paramEx, existingEx), ReturnStatement.RETURN_NULL_OR_VOID)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.