簡體   English   中英

如何在Groovy AST轉換中創建void return語句?

[英]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.

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