Добавление информации об авторских правах генерируется Java-код - Jcodemodel

Я генерирую исходный код Java с использованием JCodeModel. Я хотел бы добавить информацию об авторских правах в сгенерированный код. Возможно ли это в настоящее время?

Я пытался с помощью javadoc()в JDefinedClass он добавляет информацию только над определением класса.

2 ответа

Вы можете создать CodeWriter который пишет заголовок авторских прав. это CodeWriter может делегировать другому, а именно тому, который вы обычно передаете CodeModel#build метод.

Полный пример:

import java.io.IOException;
import java.io.OutputStream;

import com.sun.codemodel.CodeWriter;
import com.sun.codemodel.JCodeModel;
import com.sun.codemodel.JPackage;
import com.sun.codemodel.writer.SingleStreamCodeWriter;

public class HeaderInCodeModel
{
    public static void main(String[] args) throws Exception
    {
        JCodeModel codeModel = new JCodeModel();
        codeModel._class("com.example.Example");

        CodeWriter codeWriter = new SingleStreamCodeWriter(System.out);

        String header = "// Copyright 2017 - example.com\n";
        CodeWriter codeWriterWithHeader = 
            createCodeWriterWithHeader(header, codeWriter);
        codeModel.build(codeWriterWithHeader);
    }    

    private static CodeWriter createCodeWriterWithHeader(
        String header, CodeWriter delegate)
    {
        CodeWriter codeWriter = new CodeWriter()
        {
            @Override
            public OutputStream openBinary(JPackage pkg, String fileName)
                throws IOException
            {
                OutputStream result = delegate.openBinary(pkg, fileName);
                if (header != null)
                {
                    result.write(header.getBytes());
                }
                return result;
            }

            @Override
            public void close() throws IOException
            {
                delegate.close();
            }
        };
        return codeWriter;
    }

}

Полученный класс будет

// Copyright 2017 - example.com

package com.example;


public class Example {


}

com.sun.codemodel.writer.PrologCodeWriter это именно то, что вы ищете

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