1 /*
2 * Copyright (c) 2021 Huawei Device Co., Ltd.
3 *
4 * HDF is dual licensed: you can use it either under the terms of
5 * the GPL, or the BSD license, at your option.
6 * See the LICENSE file in the root of this repository for complete details.
7 */
8
9 #include "codegen/java_code_emitter.h"
10
11 namespace OHOS {
12 namespace HDI {
EmitLicense(StringBuilder & sb)13 void JavaCodeEmitter::EmitLicense(StringBuilder& sb)
14 {
15 if (ast_->GetLicense().IsEmpty()) {
16 return;
17 }
18 sb.Append(ast_->GetLicense()).Append("\n\n");
19 }
20
EmitPackage(StringBuilder & sb)21 void JavaCodeEmitter::EmitPackage(StringBuilder& sb)
22 {
23 sb.AppendFormat("package %s;\n", ast_->GetPackageName().string());
24 }
25
EmitInterfaceMethodCommands(StringBuilder & sb,const String & prefix)26 void JavaCodeEmitter::EmitInterfaceMethodCommands(StringBuilder& sb, const String& prefix)
27 {
28 for (size_t i = 0; i < interface_->GetMethodNumber(); i++) {
29 AutoPtr<ASTMethod> method = interface_->GetMethod(i);
30 sb.Append(prefix).AppendFormat(
31 "private static final int COMMAND_%s = IRemoteObject.MIN_TRANSACTION_ID + %d;\n",
32 ConstantName(method->GetName()).string(), i);
33 }
34 }
35
MethodName(const String & name)36 String JavaCodeEmitter::MethodName(const String& name)
37 {
38 if (name.IsEmpty() || islower(name[0])) {
39 return name;
40 }
41 return String::Format("%c%s", tolower(name[0]), name.Substring(1).string());
42 }
43
SpecificationParam(StringBuilder & paramSb,const String & prefix)44 String JavaCodeEmitter::SpecificationParam(StringBuilder& paramSb, const String& prefix)
45 {
46 int maxLineLen = 120;
47 int replaceLen = 2;
48 String paramStr = paramSb.ToString();
49 int preIndex = 0;
50 int curIndex = 0;
51
52 String insertStr = String::Format("\n%s", prefix.string());
53 for (; curIndex < paramStr.GetLength(); curIndex++) {
54 if (curIndex == maxLineLen && preIndex > 0) {
55 paramStr.Replace(preIndex, replaceLen, ",");
56 paramStr.insert(preIndex + 1, insertStr);
57 } else {
58 if (paramStr[curIndex] == ',') {
59 preIndex = curIndex;
60 }
61 }
62 }
63 return paramStr;
64 }
65 } // namespace HDI
66 } // namespace OHOS