OSDN Git Service

Merge release/v1.203.2
[mikutoga/Pmd2XML.git] / src / main / java / jp / sfjp / mikutoga / pmd2xml / CmdLine.java
1 /*
2  * command line parser
3  *
4  * License : The MIT License
5  * Copyright(c) 2013 MikuToga Partners
6  */
7
8 package jp.sfjp.mikutoga.pmd2xml;
9
10 import java.util.ArrayList;
11 import java.util.Arrays;
12 import java.util.Iterator;
13 import java.util.LinkedList;
14 import java.util.List;
15
16 /**
17  * コマンドラインの1オプションとその引数群に相当。
18  */
19 final class CmdLine {
20
21     private OptSwitch opt;
22     private List<String> optArgs;
23
24
25     /**
26      * コンストラクタ。
27      */
28     private CmdLine() {
29         super();
30         return;
31     }
32
33
34     /**
35      * コマンドライン解析を行う。
36      *
37      * @param args コマンドライン
38      * @return 解析されたコマンドライン並び
39      */
40     static List<CmdLine> parse(String... args){
41         List<String> list = Arrays.asList(args);
42         return parse(list);
43     }
44
45     /**
46      * コマンドライン解析を行う。
47      *
48      * @param argList コマンドライン
49      * @return 解析されたコマンドライン並び
50      */
51     static List<CmdLine> parse(List<String> argList){
52         List<CmdLine> result = new LinkedList<>();
53
54         Iterator<String> it = argList.iterator();
55         while (it.hasNext()) {
56             String arg = it.next();
57
58             CmdLine info = new CmdLine();
59             result.add(info);
60
61             info.opt = OptSwitch.parse(arg);
62
63             int exArgNum = 0;
64             if (info.opt != null) {
65                 exArgNum = info.opt.getExArgNum();
66             }
67             info.optArgs = new ArrayList<>(exArgNum + 1);
68
69             info.optArgs.add(arg);
70
71             for (int argCt = 0; argCt < exArgNum; argCt++) {
72                 if ( ! it.hasNext()) {
73                     break;
74                 }
75                 String exarg = it.next();
76                 info.optArgs.add(exarg);
77             }
78         }
79
80         return result;
81     }
82
83
84     /**
85      * オプション識別子を返す。
86      *
87      * @return オプション識別子。
88      *     オプションを伴わない単純なコマンドライン引数の場合はnullを返す。
89      */
90     OptSwitch getOptSwitch() {
91         return this.opt;
92     }
93
94     /**
95      * オプションに付随する引数群を返す。
96      *
97      * @return オプションに付随する引数群。
98      *     先頭要素はオプション識別子。
99      *     単純なコマンドライン引数の場合は自身が1要素のみを占める。
100      */
101     List<String> getOptArgs() {
102         return this.optArgs;
103     }
104
105 }