Как я могу переместить все объявления локальных переменных в объявления полей, используя janino? - PullRequest
0 голосов
/ 28 декабря 2018

Я пытаюсь переместить все объявления локальных переменных в объявления полей, используя janino, так что, если я введу следующий код

class A {
    int a;

    void test() {
        int b = 0;
        int c = 1;
        b += c;
    }
}

, проанализируем его как CompilationUnit и изменим AST, используяTraverser и разбор его обратно, я могу получить

class A {
    int a;
    int b;
    int c;

    void test() {
        b = 0;
        c = 1;
        b += c;
    }
}

Я написал следующий метод для создания Java.FieldDeclaration из Java.LocalVariableDeclarationStatement:

static Java.FieldDeclaration createFieldDecFromLocalDec(Java.LocalVariableDeclarationStatement lvds) {
    Java.Modifiers modifiers = lvds.modifiers;
    Java.Type type = lvds.type;

    Java.VariableDeclarator[] declarators =
        new Java.VariableDeclarator[lvds.variableDeclarators.length];
    for (int i = 0; i < declarators.length; i++) {
        Java.VariableDeclarator oldDec = lvds.variableDeclarators[i];
        declarators[i] = new Java.VariableDeclarator(
            Location.NOWHERE, oldDec.name, oldDec.brackets, null);
    }

    return new Java.FieldDeclaration(
        Location.NOWHERE, null, lvds.modifiers, lvds.type, declarators);
}

Но когдаЯ запускаю код, получаю следующее исключение:

org.codehaus.janino.JaninoRuntimeException: Enclosing scope already set for type "int" at File 'codegen', Line 5, Column 8

Как мне избавиться от этого исключения?Или как мне достичь своей цели с помощью janino?Спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...