1ca0551cfSopenharmony_ci/*
2ca0551cfSopenharmony_ci * Copyright (c) 2022-2023 Huawei Device Co., Ltd.
3ca0551cfSopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
4ca0551cfSopenharmony_ci * you may not use this file except in compliance with the License.
5ca0551cfSopenharmony_ci * You may obtain a copy of the License at
6ca0551cfSopenharmony_ci *
7ca0551cfSopenharmony_ci *     http://www.apache.org/licenses/LICENSE-2.0
8ca0551cfSopenharmony_ci *
9ca0551cfSopenharmony_ci * Unless required by applicable law or agreed to in writing, software
10ca0551cfSopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
11ca0551cfSopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12ca0551cfSopenharmony_ci * See the License for the specific language governing permissions and
13ca0551cfSopenharmony_ci * limitations under the License.
14ca0551cfSopenharmony_ci */
15ca0551cfSopenharmony_ci
16ca0551cfSopenharmony_ci#ifndef OHOS_IDL_OPTIONS_H
17ca0551cfSopenharmony_ci#define OHOS_IDL_OPTIONS_H
18ca0551cfSopenharmony_ci
19ca0551cfSopenharmony_ci#include "util/string.h"
20ca0551cfSopenharmony_ci
21ca0551cfSopenharmony_cinamespace OHOS {
22ca0551cfSopenharmony_cinamespace Idl {
23ca0551cfSopenharmony_ciclass Options {
24ca0551cfSopenharmony_cipublic:
25ca0551cfSopenharmony_ci    Options(int argc, char** argv)
26ca0551cfSopenharmony_ci    {
27ca0551cfSopenharmony_ci        Parse(argc, argv);
28ca0551cfSopenharmony_ci    }
29ca0551cfSopenharmony_ci
30ca0551cfSopenharmony_ci    ~Options() = default;
31ca0551cfSopenharmony_ci
32ca0551cfSopenharmony_cistruct Attribute {
33ca0551cfSopenharmony_ci        String hitraceTag;
34ca0551cfSopenharmony_ci        String logTag;
35ca0551cfSopenharmony_ci        String domainId;
36ca0551cfSopenharmony_ci        bool doHitrace;
37ca0551cfSopenharmony_ci        bool doLog;
38ca0551cfSopenharmony_ci    };
39ca0551cfSopenharmony_ci
40ca0551cfSopenharmony_ci    bool DoShowUsage() const
41ca0551cfSopenharmony_ci    {
42ca0551cfSopenharmony_ci        return doShowUsage_;
43ca0551cfSopenharmony_ci    }
44ca0551cfSopenharmony_ci
45ca0551cfSopenharmony_ci    bool DoShowVersion() const
46ca0551cfSopenharmony_ci    {
47ca0551cfSopenharmony_ci        return doShowVersion_;
48ca0551cfSopenharmony_ci    }
49ca0551cfSopenharmony_ci
50ca0551cfSopenharmony_ci    bool DoCompile() const
51ca0551cfSopenharmony_ci    {
52ca0551cfSopenharmony_ci        return doCompile_;
53ca0551cfSopenharmony_ci    }
54ca0551cfSopenharmony_ci
55ca0551cfSopenharmony_ci    bool DoDumpAST() const
56ca0551cfSopenharmony_ci    {
57ca0551cfSopenharmony_ci        return doDumpAST_;
58ca0551cfSopenharmony_ci    }
59ca0551cfSopenharmony_ci
60ca0551cfSopenharmony_ci    bool DoDumpMetadata() const
61ca0551cfSopenharmony_ci    {
62ca0551cfSopenharmony_ci        return doDumpMetadata_;
63ca0551cfSopenharmony_ci    }
64ca0551cfSopenharmony_ci
65ca0551cfSopenharmony_ci    bool DoSaveMetadata() const
66ca0551cfSopenharmony_ci    {
67ca0551cfSopenharmony_ci        return doSaveMetadata_;
68ca0551cfSopenharmony_ci    }
69ca0551cfSopenharmony_ci
70ca0551cfSopenharmony_ci    bool DoGenerateCode() const
71ca0551cfSopenharmony_ci    {
72ca0551cfSopenharmony_ci        return doGenerateCode_;
73ca0551cfSopenharmony_ci    }
74ca0551cfSopenharmony_ci
75ca0551cfSopenharmony_ci    bool DoHitraceState() const
76ca0551cfSopenharmony_ci    {
77ca0551cfSopenharmony_ci        return doHitrace_;
78ca0551cfSopenharmony_ci    }
79ca0551cfSopenharmony_ci
80ca0551cfSopenharmony_ci    bool DoSearchKeywords() const
81ca0551cfSopenharmony_ci    {
82ca0551cfSopenharmony_ci        return doKeywords_;
83ca0551cfSopenharmony_ci    }
84ca0551cfSopenharmony_ci
85ca0551cfSopenharmony_ci    bool DoLogOn() const
86ca0551cfSopenharmony_ci    {
87ca0551cfSopenharmony_ci        if (!domainId_.IsNull() && !logTag_.IsNull()) {
88ca0551cfSopenharmony_ci            return true;
89ca0551cfSopenharmony_ci        }
90ca0551cfSopenharmony_ci        return false;
91ca0551cfSopenharmony_ci    }
92ca0551cfSopenharmony_ci
93ca0551cfSopenharmony_ci    bool DoIllegalParameter(const String argv) const
94ca0551cfSopenharmony_ci    {
95ca0551cfSopenharmony_ci        if (argv.IsEmpty() || argv.Equals("-t") || argv.Equals("-log-domainid") ||
96ca0551cfSopenharmony_ci            argv.Equals("-log-tag")) {
97ca0551cfSopenharmony_ci            return true;
98ca0551cfSopenharmony_ci        }
99ca0551cfSopenharmony_ci        return false;
100ca0551cfSopenharmony_ci    }
101ca0551cfSopenharmony_ci
102ca0551cfSopenharmony_ci    bool DoLegalLog() const
103ca0551cfSopenharmony_ci    {
104ca0551cfSopenharmony_ci        if (targetLanguage_.Equals("cpp")) {
105ca0551cfSopenharmony_ci            if (!domainId_.IsNull() && !logTag_.IsNull()) {
106ca0551cfSopenharmony_ci                return true;
107ca0551cfSopenharmony_ci            } else if (domainId_.IsNull() && logTag_.IsNull()) {
108ca0551cfSopenharmony_ci                return true;
109ca0551cfSopenharmony_ci            } else {
110ca0551cfSopenharmony_ci                return false;
111ca0551cfSopenharmony_ci            }
112ca0551cfSopenharmony_ci        }
113ca0551cfSopenharmony_ci        return true;
114ca0551cfSopenharmony_ci    }
115ca0551cfSopenharmony_ci
116ca0551cfSopenharmony_ci    bool HasErrors() const
117ca0551cfSopenharmony_ci    {
118ca0551cfSopenharmony_ci        return !illegalOptions_.IsEmpty() || sourceFile_.IsEmpty() || !DoLegalLog() || !doLegalParameters_;
119ca0551cfSopenharmony_ci    }
120ca0551cfSopenharmony_ci
121ca0551cfSopenharmony_ci    String GetSourceFile() const
122ca0551cfSopenharmony_ci    {
123ca0551cfSopenharmony_ci        return sourceFile_;
124ca0551cfSopenharmony_ci    }
125ca0551cfSopenharmony_ci
126ca0551cfSopenharmony_ci    String GetMetadataFile() const
127ca0551cfSopenharmony_ci    {
128ca0551cfSopenharmony_ci        return metadataFile_;
129ca0551cfSopenharmony_ci    }
130ca0551cfSopenharmony_ci
131ca0551cfSopenharmony_ci    String GetTargetLanguage() const
132ca0551cfSopenharmony_ci    {
133ca0551cfSopenharmony_ci        return targetLanguage_;
134ca0551cfSopenharmony_ci    }
135ca0551cfSopenharmony_ci
136ca0551cfSopenharmony_ci    String GetGenerationDirectory() const
137ca0551cfSopenharmony_ci    {
138ca0551cfSopenharmony_ci        return generationDirectory_;
139ca0551cfSopenharmony_ci    }
140ca0551cfSopenharmony_ci
141ca0551cfSopenharmony_ci    String GetGenerateHitraceTag() const
142ca0551cfSopenharmony_ci    {
143ca0551cfSopenharmony_ci        return hitraceTag_;
144ca0551cfSopenharmony_ci    }
145ca0551cfSopenharmony_ci
146ca0551cfSopenharmony_ci    String GetDomainId() const
147ca0551cfSopenharmony_ci    {
148ca0551cfSopenharmony_ci        return domainId_;
149ca0551cfSopenharmony_ci    }
150ca0551cfSopenharmony_ci
151ca0551cfSopenharmony_ci    String GetLogTag() const
152ca0551cfSopenharmony_ci    {
153ca0551cfSopenharmony_ci        return logTag_;
154ca0551cfSopenharmony_ci    }
155ca0551cfSopenharmony_ci
156ca0551cfSopenharmony_ci    Attribute GetAttribute() const
157ca0551cfSopenharmony_ci    {
158ca0551cfSopenharmony_ci        return attribute_;
159ca0551cfSopenharmony_ci    }
160ca0551cfSopenharmony_ci
161ca0551cfSopenharmony_ci    void ShowErrors();
162ca0551cfSopenharmony_ci
163ca0551cfSopenharmony_ci    void ShowVersion();
164ca0551cfSopenharmony_ci
165ca0551cfSopenharmony_ci    void ShowUsage();
166ca0551cfSopenharmony_ci
167ca0551cfSopenharmony_ci    void ShowWarning();
168ca0551cfSopenharmony_ci
169ca0551cfSopenharmony_ciprivate:
170ca0551cfSopenharmony_ci    void Parse(int argc, char** argv);
171ca0551cfSopenharmony_ci
172ca0551cfSopenharmony_ci    bool ParseSub(const String& option, int& i, char** argv);
173ca0551cfSopenharmony_ci
174ca0551cfSopenharmony_ci    static constexpr int VERSION_MAJOR = 0;
175ca0551cfSopenharmony_ci    static constexpr int VERSION_MINOR = 1;
176ca0551cfSopenharmony_ci
177ca0551cfSopenharmony_ci    String program_;
178ca0551cfSopenharmony_ci    String sourceFile_;
179ca0551cfSopenharmony_ci    String metadataFile_;
180ca0551cfSopenharmony_ci    String targetLanguage_;
181ca0551cfSopenharmony_ci    String generationDirectory_;
182ca0551cfSopenharmony_ci    String illegalOptions_;
183ca0551cfSopenharmony_ci    String hitraceTag_;
184ca0551cfSopenharmony_ci    String domainId_;
185ca0551cfSopenharmony_ci    String logTag_;
186ca0551cfSopenharmony_ci    Attribute attribute_ = {"", "", "", false, false};
187ca0551cfSopenharmony_ci
188ca0551cfSopenharmony_ci    bool doShowUsage_ = false;
189ca0551cfSopenharmony_ci    bool doShowVersion_ = false;
190ca0551cfSopenharmony_ci    bool doCompile_ = false;
191ca0551cfSopenharmony_ci    bool doDumpAST_ = false;
192ca0551cfSopenharmony_ci    bool doDumpMetadata_ = false;
193ca0551cfSopenharmony_ci    bool doSaveMetadata_ = false;
194ca0551cfSopenharmony_ci    bool doGenerateCode_ = false;
195ca0551cfSopenharmony_ci    bool doHitrace_ = false;
196ca0551cfSopenharmony_ci    bool doKeywords_ = false;
197ca0551cfSopenharmony_ci    bool doLegalParameters_ = true;
198ca0551cfSopenharmony_ci};
199ca0551cfSopenharmony_ci}
200ca0551cfSopenharmony_ci}
201ca0551cfSopenharmony_ci#endif // OHOS_IDL_OPTIONS_H
202