JExpression добавить строковое значение в качестве свойства в операторе if

Я работаю над плагином для создания операторов toString в моем проекте, используя CodeModel.

Полученный код должен выглядеть так:

if (variable == null) { 
    out.append("   " + "variable = null").append("\n"); 
}

(в приведенном выше коде простой StringBuilder)

Я хочу использовать CodeModel для автоматической генерации новых строк и вкладок в операторах if, и до сих пор получил этот вывод:

if ("variable" == null) { 
    out.append("   " + "variable = null").append("\n"); 
}

Проблема заключается в кавычках, окружающих переменную, которые присутствуют при назначении литерального значения JExpression для значения переменной. Текущая реализация выглядит так:

    private void printComplexObject(final JMethod toStringMethod, FieldOutline fo) {
        String property = fo.getPropertyInfo().getName(false);
        property = property.replace("\"", "");

        JType type = fo.getRawType();
        JBlock block = toStringMethod.body();
        JConditional nullCheck = block._if(JExpr.lit(property).eq(JExpr._null())); ...}

Кто-нибудь знает, как это можно сделать с помощью JExpression или чего-то еще из CodeModel? Единственная альтернатива, которую я имею до сих пор, это сделать это с помощью DirectStatement следующим образом:

toStringMethod.body().directStatement("if (" + property + " == null) { out.append ...}");

1 ответ

Решение

Решение состоит в том, чтобы заменить JConditional nullCheck следующим:

JConditional nullCheck = block._if(JExpr.direct(property).eq(JExpr._null()));

JExpr.direct (свойство) вместо.lit приводит к тому, что переменная вместо "variable" используется в этом JConditional.

Другие вопросы по тегам