Импорт для пользовательского класса в XbaseCompiler

Я пишу DSL, используя XBase, и добавил новое правило парсера, которое возвращает XExpression в грамматике:

DatastepExpression returns xbase::XExpression: {DatastepExpression} 'data' name=ID '{' '}';

и добавил соответствующую функцию в подкласс XbaseTypeComputer:

protected def _computeTypes(DatastepExpression expression, ITypeComputationState state) {
    var type = getTypeForName(typeof(FileDataset), state)
    state.acceptActualType(type)
}

Теперь я пытаюсь добавить метод в подкласс XbaseCompiler:

override protected doInternalToJavaStatement(XExpression expr, ITreeAppendable it, boolean isReferenced) {
    switch expr {
        DatastepExpression: {
            newLine
            append('''FileDataset «expr.name»;''')
        }
        default:
            super.doInternalToJavaStatement(expr, it, isReferenced)
    }
}

где FileDataset - это настраиваемый класс в моем языковом API. Как сделать так, чтобы этот класс отображался при импорте в верхней части сгенерированных файлов?

В настоящий момент, когда я создаю новый файл на своем языке (в среде выполнения Eclipse), сгенерированный файл Java содержит объявление переменной FileDataset, но под ним красную волнистую линию и ошибку «FileDataset не может быть преобразован в тип»


person Stuart    schedule 22.10.2014    source источник


Ответы (1)


ITreeAppendable имеет методы для добавления экземпляров Class, JvmType или LightweightTypeReference. Равнина

it.append(FileDataset).append(' ').append(expr.name)

должен сделать свое дело.

person Sebastian Zarnekow    schedule 22.10.2014