end0tknr's kipple - web写経開発

太宰府天満宮の狛犬って、妙にカワイイ

clang-format による java source code 整形

clang-format は、コマンドラインでも使用できるようですので、メモ

https://clang.llvm.org/docs/ClangFormat.html

https://clang.llvm.org/docs/ClangFormatStyleOptions.html

install from source code もできますが...

以下の手順で、src からinstallできますが、makeに数時間や数GB(5GB超?)を要する為、 私が使用する centos8 on virtualboxでは、build できませんでした。

$ wget https://github.com/llvm/llvm-project/archive/llvmorg-10.0.1.tar.gz
$ tar -xvf llvmorg-10.0.1.tar.gz
$ cd llvm-project-llvmorg-10.0.1
$ mkdir build
$ cd build
$ cmake -G "Unix Makefiles" ../llvm
$ make

install from package

$ sudo yum install clang*
$ /usr/bin/clang-format --version
clang-format version 9.0.1 (Red Hat 9.0.1-2.module_el8.2.0+309+0c7b6b03)

formatting java source code

以下は、foo.java を indent幅=4 で、上書き(-i)するものです。

clang-format -i -style="{IndentWidth: 4}" ./foo.java

その他、標準入力でsource code を受け取ることもできます。 以下は、「Seasar2徹底入門 - SAStruts/S2JDBC対応 - 翔泳社」のサンプルコードを 整形した例です。

https://www.shoeisha.co.jp/book/detail/9784798121505

$ cat foo.java | clang-format --assume-filename="foo.java" -style="{IndentWidth: 4}"
package org.seasar.sastruts.example.action;

import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.annotation.Resource;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.seasar.fisshplate.preview.FPPreviewUtil;
import org.seasar.fisshplate.template.FPTemplate;
import org.seasar.sastruts.example.fpao.HelloFpao;
import org.seasar.sastruts.example.fpao.HelloFpao.HelloDto;
import org.seasar.struts.annotation.Execute;
import org.seasar.struts.util.ResponseUtil;

/**
 * Fisshplateのサンプルです。
 *
 * @author Naoki Takezoe
 */
public class ExcelAction {
    @Resource protected HelloFpao helloFpao;

    /**
     * Fisshplateのサンプル一覧を表示します。
     */
    @Execute(validator = false)
    public String index() {
        return "index.jsp";
    }

    /**
     * バインド変数のサンプルです。
     */
    @Execute(validator = false)
    public String helloWorld() throws Exception {
        InputStream in =
            getClass().getResourceAsStream("/excel/HelloWorld.xls");
        FPTemplate template = new FPTemplate();

        Map<String, String> map = new HashMap<String, String>();
        map.put("name", "たけぞう");

        HSSFWorkbook wb = template.process(in, map);

        ByteArrayOutputStream out = new ByteArrayOutputStream();
        wb.write(out);

        ResponseUtil.download("HelloWorld.xls", out.toByteArray());

        return null;
    }
   :
    /**
     * プレビュー機能のサンプルです。
     */
    @Execute(validator = false)
    public String preview() throws Exception {
        InputStream template =
            getClass().getResourceAsStream("/excel/Foreach.xls");
        InputStream data =
            getClass().getResourceAsStream("/excel/Foreach_Preview.xls");

        HSSFWorkbook wb = FPPreviewUtil.getWorkbook(template, data);

        ByteArrayOutputStream out = new ByteArrayOutputStream();
        wb.write(out);

        ResponseUtil.download("Foreach_Preview.xls", out.toByteArray());

        return null;
    }
}
$