Xtext Xbase JvmTypesBuilder只生成最终参数

时间:2013-01-18 08:58:17

标签: xtext xtend xbase

我想使用Xtend Xbase API生成一个简单的Java mathod。 这是Xtend代码。

        var jvmMethod = element.toMethod("fromSap",element.newTypeRef(element.dtoFullName))[
    var jvmTypeReference= fromSap.sapType;
    var param = toParameter("sapOb",jvmTypeReference)
    parameters+=param
    body = ['''....''')]

除了具有最终修饰符的参数外,一切正常。 这是生成的代码:

  public class DTOTest {
     public DTOTest fromSap(final String sapOb) {
    DTOTest result = new DTOTest();
    return result;   
  }
}

我试图添加:

param.setFinal(false);

但我得到了

This expression is not allowed in this context, since it doesn't cause any side effects.

在编译时

有人可以帮我从生成的代码中删除最终修饰符吗?

的Davide

1 个答案:

答案 0 :(得分:3)

方法参数在方法中包含的表达式的链接/作用域中被认为是最终的。如果参数不是final,则不能在lambda表达式中使用它们。不幸的是,参数的反射API(java.lang.reflect)中没有'final'的方法。因此,没有属性'isFinal'可以暴露,但我们只是在内部标记它们。

错误消息'此上下文中不允许使用此表达式,因为它不会导致任何副作用。虽然有误导性。它可能会影响没有这种方法的真正错误JvmFormalParameter.setFinal(boolean)