sun-codemodel

How can I pass enum values as an argument to an invoke in codemodel?


I am trying to create a JInvocation like :-

driver.manage().timeouts().implicitlyWait(10L, (TimeUnit.SECONDS));

This is the block of code that I use to generate the same :-

public static JInvocation implicitWait(JVar driverJVar, Long implicitWaitTime, TimeUnit timeUnit) {
    JClass timeUnitType = (JClass) BasicUtility.getReferenceForClass(TimeUnit.class);
    JExpression jExpression = JExpr.direct(timeUnitType.name().concat(".").concat(timeUnit.name()));
    return driverJVar.invoke("manage").invoke("timeouts").invoke("implicitlyWait").arg(JExpr.lit(implicitWaitTime)).arg(jExpression);
}

This works perfectly, the only problem being that TimeUnit doesn't create an import statement for this. I have to put it manually. Is there any other way to use enums values and pass as arguments?


Solution

  • Found a solution to it. We can do it using the staticRef method of JClass. This would bring the import statement automatically.

    JClass timeUnitType = (JClass) CodeModelUtility.getReferenceForClass(TimeUnit.class);
    return driverJVar.invoke("manage").invoke("timeouts").invoke("implicitlyWait").arg(JExpr.lit(implicitWaitTime)).arg(timeUnitType.staticRef(timeUnit.name()));