Fix:HDI prefix modify

Signed-off-by: wangyipeng <wangyipeng11@huawei.com>
This commit is contained in:
wangyipeng
2022-02-15 21:55:24 +08:00
parent b59220f265
commit 554450282b
10 changed files with 148 additions and 88 deletions
+2 -2
View File
@@ -132,7 +132,7 @@ String ASTInterfaceType::EmitJavaType(TypeMode mode, bool isInnerType) const
void ASTInterfaceType::EmitCWriteVar(const String& parcelName, const String& name, const String& gotoLabel,
StringBuilder& sb, const String& prefix) const
{
sb.Append(prefix).AppendFormat("if (HdfSbufWriteRemoteService(%s, %s->AsObject(%s)) != 0) {\n",
sb.Append(prefix).AppendFormat("if (HdfSBufWriteRemoteService(%s, %s->AsObject(%s)) != 0) {\n",
parcelName.string(), name.string(), name.string());
sb.Append(prefix + g_tab).AppendFormat(
"HDF_LOGE(\"%%{public}s: write %s failed!\", __func__);\n", name.string());
@@ -147,7 +147,7 @@ void ASTInterfaceType::EmitCStubReadVar(const String& parcelName, const String&
String remoteName = String::Format("%sRemote", name.string());
String miName = name_.StartsWith("I") ? name_.Substring(1) : name_;
sb.Append(prefix).AppendFormat("struct HdfRemoteService *%s = HdfSbufReadRemoteService(%s);\n",
sb.Append(prefix).AppendFormat("struct HdfRemoteService *%s = HdfSBufReadRemoteService(%s);\n",
remoteName.string(), parcelName.string());
sb.Append(prefix).AppendFormat("if (%s == NULL) {\n", remoteName.string());
sb.Append(prefix + g_tab).AppendFormat(
@@ -293,11 +293,11 @@ void CClientProxyCodeEmitter::EmitCreateBuf(const String& dataBufName, const Str
StringBuilder& sb, const String& prefix)
{
if (isKernelCode_) {
sb.Append(prefix).AppendFormat("struct HdfSBuf *%s = HdfSbufObtainDefaultSize();\n", dataBufName.string());
sb.Append(prefix).AppendFormat("struct HdfSBuf *%s = HdfSbufObtainDefaultSize();\n", replyBufName.string());
sb.Append(prefix).AppendFormat("struct HdfSBuf *%s = HdfSBufObtainDefaultSize();\n", dataBufName.string());
sb.Append(prefix).AppendFormat("struct HdfSBuf *%s = HdfSBufObtainDefaultSize();\n", replyBufName.string());
} else {
sb.Append(prefix).AppendFormat("struct HdfSBuf *%s = HdfSbufTypedObtain(SBUF_IPC);\n", dataBufName.string());
sb.Append(prefix).AppendFormat("struct HdfSBuf *%s = HdfSbufTypedObtain(SBUF_IPC);\n", replyBufName.string());
sb.Append(prefix).AppendFormat("struct HdfSBuf *%s = HdfSBufTypedObtain(SBUF_IPC);\n", dataBufName.string());
sb.Append(prefix).AppendFormat("struct HdfSBuf *%s = HdfSBufTypedObtain(SBUF_IPC);\n", replyBufName.string());
}
sb.Append("\n");
@@ -312,10 +312,10 @@ void CClientProxyCodeEmitter::EmitReleaseBuf(const String& dataBufName, const St
const String& prefix)
{
sb.Append(prefix).AppendFormat("if (%s != NULL) {\n", dataBufName.string());
sb.Append(prefix + g_tab).AppendFormat("HdfSbufRecycle(%s);\n", dataBufName.string());
sb.Append(prefix + g_tab).AppendFormat("HdfSBufRecycle(%s);\n", dataBufName.string());
sb.Append(prefix).Append("}\n");
sb.Append(prefix).AppendFormat("if (%s != NULL) {\n", replyBufName.string());
sb.Append(prefix + g_tab).AppendFormat("HdfSbufRecycle(%s);\n", replyBufName.string());
sb.Append(prefix + g_tab).AppendFormat("HdfSBufRecycle(%s);\n", replyBufName.string());
sb.Append(prefix).Append("}\n");
}
+97 -41
View File
@@ -7,6 +7,7 @@
*/
#include "codegen/cpp_code_emitter.h"
#include <regex>
#include <cctype>
#include <sys/stat.h>
#include <unistd.h>
@@ -39,6 +40,35 @@ String CppCodeEmitter::FileName(const String& name)
return sb.ToString().Replace('.', '/');
}
String CppCodeEmitter::PascalName(const String& name)
{
if (name.IsEmpty()) {
return name;
}
StringBuilder sb;
for (int i = 0; i < name.GetLength(); i++) {
char c = name[i];
if (i == 0) {
if (islower(c)) {
c = toupper(c);
}
sb.Append(c);
} else {
if (c == '_') {
continue;
}
if (islower(c) && name[i - 1] == '_') {
c = toupper(c);
}
sb.Append(c);
}
}
return sb.ToString();
}
String CppCodeEmitter::EmitMethodCmdID(const AutoPtr<ASTMethod>& method)
{
return String::Format("CMD_%s_%s", infName_.ToUnderLineUpper().string(),
@@ -152,26 +182,68 @@ void CppCodeEmitter::EmitTailExternC(StringBuilder& sb)
sb.Append("#endif /* __cplusplus */\n");
}
bool CppCodeEmitter::isVersion(const String& name)
{
std::regex rVer("[V|v][0-9]+_[0-9]+");
return std::regex_match(name.string(), rVer);
}
std::vector<String> CppCodeEmitter::EmitCppNameSpaceVec(const String& namespaceStr)
{
std::vector<String> result;
std::vector<String> namespaceVec = namespaceStr.Split(".");
bool findVersion = false;
for (const auto& nspace : namespaceVec) {
String name;
if (!findVersion && isVersion(nspace)) {
name = nspace.Replace('v', 'V');
findVersion = true;
} else {
if (findVersion) {
name = nspace;
} else {
name = PascalName(nspace);
}
}
result.emplace_back(name);
}
return result;
}
String CppCodeEmitter::EmitPackageToNameSpace(const String& packageName)
{
if (packageName.IsEmpty()) {
return packageName;
}
StringBuilder nameSpaceStr;
std::vector<String> namespaceVec = EmitCppNameSpaceVec(packageName);
for (auto nameIter = namespaceVec.begin(); nameIter != namespaceVec.end(); nameIter++) {
nameSpaceStr.Append(*nameIter);
if (nameIter != namespaceVec.end() - 1) {
nameSpaceStr.Append("::");
}
}
return nameSpaceStr.ToString();
}
void CppCodeEmitter::EmitBeginNamespace(StringBuilder& sb)
{
String nspace = interface_->GetNamespace()->ToString();
int index = nspace.IndexOf('.');
while (index != -1) {
sb.AppendFormat("namespace %s {\n", nspace.Substring(0, index).string());
nspace = nspace.Substring(index + 1);
index = nspace.IndexOf('.');
std::vector<String> cppNamespaceVec = EmitCppNameSpaceVec(interface_->GetNamespace()->ToString());
for (const auto& nspace : cppNamespaceVec) {
sb.AppendFormat("namespace %s {\n", nspace.string());
}
}
void CppCodeEmitter::EmitEndNamespace(StringBuilder& sb)
{
String nspace = interface_->GetNamespace()->ToString();
nspace = nspace.Substring(0, nspace.GetLength() - 1);
while (!nspace.IsEmpty()) {
int index = nspace.LastIndexOf('.');
sb.AppendFormat("} // %s\n",
(index != -1) ? nspace.Substring(index + 1, nspace.GetLength()).string() : nspace.string());
nspace = nspace.Substring(0, index);
std::vector<String> cppNamespaceVec = EmitCppNameSpaceVec(interface_->GetNamespace()->ToString());
for (auto nspaceIter = cppNamespaceVec.rbegin(); nspaceIter != cppNamespaceVec.rend(); nspaceIter++) {
sb.AppendFormat("} // %s\n", nspaceIter->string());
}
}
@@ -181,15 +253,25 @@ void CppCodeEmitter::EmitUsingNamespace(StringBuilder& sb)
EmitImportUsingNamespace(sb);
}
String CppCodeEmitter::EmitNamespace(const String& packageName)
{
if (packageName.IsEmpty()) {
return packageName;
}
int index = packageName.LastIndexOf('.');
return index > 0 ? packageName.Substring(0, index) : packageName;
}
void CppCodeEmitter::EmitImportUsingNamespace(StringBuilder& sb)
{
using StringSet = std::unordered_set<String, StringHashFunc, StringEqualFunc>;
StringSet namespaceSet;
String selfNameSpace = CppNameSpace(ast_->GetFullName());
String selfNameSpace = EmitPackageToNameSpace(EmitNamespace(ast_->GetFullName()));
for (const auto& importPair : ast_->GetImports()) {
AutoPtr<AST> import = importPair.second;
String nameSpace = CppNameSpace(import->GetFullName());
String nameSpace = EmitPackageToNameSpace(EmitNamespace(import->GetFullName()));
if (nameSpace.Equals(selfNameSpace)) {
continue;
}
@@ -239,15 +321,6 @@ String CppCodeEmitter::MacroName(const String& name)
return macro;
}
String CppCodeEmitter::CppFullName(const String& name)
{
if (name.IsEmpty()) {
return name;
}
return name.Replace(".", "::");
}
String CppCodeEmitter::ConstantName(const String& name)
{
if (name.IsEmpty()) {
@@ -271,23 +344,6 @@ String CppCodeEmitter::ConstantName(const String& name)
return sb.ToString();
}
String CppCodeEmitter::CppNameSpace(const String& name)
{
if (name.IsEmpty()) {
return name;
}
String space;
int lastIndex = name.LastIndexOf('.');
if (lastIndex != -1) {
space = name.Substring(0, lastIndex);
} else {
space = name;
}
return CppFullName(space);
}
String CppCodeEmitter::SpecificationParam(StringBuilder& paramSb, const String& prefix)
{
int maxLineLen = 120;
+10 -4
View File
@@ -24,6 +24,8 @@ public:
bool OutPut(const AutoPtr<AST>& ast, const String& targetDirectory);
static String FileName(const String& name);
static String PascalName(const String& name);
protected:
String EmitMethodCmdID(const AutoPtr<ASTMethod>& method);
@@ -45,12 +47,20 @@ protected:
void EmitTailExternC(StringBuilder& sb);
bool isVersion(const String& name);
std::vector<String> EmitCppNameSpaceVec(const String& namespaceStr);
String EmitPackageToNameSpace(const String& packageName);
virtual void EmitBeginNamespace(StringBuilder& sb);
virtual void EmitEndNamespace(StringBuilder& sb);
void EmitUsingNamespace(StringBuilder& sb);
String EmitNamespace(const String& packageName);
void EmitImportUsingNamespace(StringBuilder& sb);
void EmitWriteMethodParameter(const AutoPtr<ASTParameter>& param, const String& parcelName, StringBuilder& sb,
@@ -63,12 +73,8 @@ protected:
String MacroName(const String& name);
String CppFullName(const String& name);
String ConstantName(const String& name);
String CppNameSpace(const String& name);
bool isCallbackInterface()
{
if (interface_ == nullptr) {
@@ -266,28 +266,19 @@ void CppCustomTypesCodeEmitter::EmitCustomTypeUnmarshallingImpl(StringBuilder& s
void CppCustomTypesCodeEmitter::EmitBeginNamespace(StringBuilder& sb)
{
String nspace = ast_->GetPackageName();
int index = nspace.IndexOf('.');
while (index != -1) {
sb.AppendFormat("namespace %s {\n", nspace.Substring(0, index).string());
nspace = nspace.Substring(index + 1);
index = nspace.IndexOf('.');
}
std::vector<String> cppNamespaceVec = EmitCppNameSpaceVec(ast_->GetPackageName());
for (const auto& nspace : cppNamespaceVec) {
Logger::D("EmitBeginNamespace", "%s", nspace.string());
if (!nspace.IsEmpty()) {
sb.AppendFormat("namespace %s {\n", nspace.string());
}
}
void CppCustomTypesCodeEmitter::EmitEndNamespace(StringBuilder& sb)
{
String nspace = ast_->GetPackageName();
nspace = nspace.Substring(0, nspace.GetLength() - 1);
while (!nspace.IsEmpty()) {
int index = nspace.LastIndexOf('.');
sb.AppendFormat("} // %s\n",
(index != -1) ? nspace.Substring(index + 1, nspace.GetLength()).string() : nspace.string());
nspace = nspace.Substring(0, index);
std::vector<String> cppNamespaceVec = EmitCppNameSpaceVec(ast_->GetPackageName());
for (auto nspaceIter = cppNamespaceVec.rbegin(); nspaceIter != cppNamespaceVec.rend(); nspaceIter++) {
sb.AppendFormat("} // %s\n", nspaceIter->string());
}
}
} // namespace HDI
@@ -83,14 +83,8 @@ void CppServiceDriverCodeEmitter::EmitDriverIncluions(StringBuilder& sb)
void CppServiceDriverCodeEmitter::EmitDriverUsings(StringBuilder& sb)
{
String nspace(interface_->GetNamespace()->ToString());
int index = nspace.LastIndexOf('.');
if (index > 0) {
nspace = nspace.Substring(0, index);
}
String fullName = CppFullName(nspace);
sb.AppendFormat("using namespace %s;\n", fullName.string());
String nspace = EmitPackageToNameSpace(interface_->GetNamespace()->ToString());
sb.AppendFormat("using namespace %s;\n", nspace.string());
}
void CppServiceDriverCodeEmitter::EmitDriverServiceDecl(StringBuilder& sb)
@@ -336,14 +336,5 @@ void CppServiceStubCodeEmitter::EmitStubCallMethod(const AutoPtr<ASTMethod>& met
sb.Append(prefix + g_tab).Append("return ec;\n");
sb.Append(prefix).Append("}\n");
}
String CppServiceStubCodeEmitter::EmitStubServiceUsings(String nameSpace)
{
int index = nameSpace.LastIndexOf('.');
if (index > 0) {
nameSpace = nameSpace.Substring(0, index);
}
return CppFullName(nameSpace);
}
} // namespace HDI
} // namespace OHOS
@@ -62,8 +62,6 @@ private:
void EmitStubMethodImpl(const AutoPtr<ASTMethod>& method, StringBuilder& sb, const String& prefix);
void EmitStubCallMethod(const AutoPtr<ASTMethod>& method, StringBuilder& sb, const String& prefix);
String EmitStubServiceUsings(String nameSpace);
};
} // namespace HDI
} // namespace OHOS
+23 -1
View File
@@ -511,7 +511,7 @@ String String::ToUnderLineUpper() const
char c = string_[i];
if (isupper(c) != 0) {
if (i > 1) {
sb.Append('_');
sb.Append('_');;
}
sb.Append(c);
} else {
@@ -636,6 +636,28 @@ String& String::Replace(int position, int len, const String& other)
return *this;
}
std::vector<String> String::Split(const String& separator) const
{
std::vector<String> result;
if (IsEmpty()) {
return result;
}
int startIndex = 0;
int endIndex = IndexOf(separator, startIndex);
while (endIndex != -1) {
result.push_back(Substring(startIndex, endIndex));
startIndex = endIndex + 1;
endIndex = IndexOf(separator, startIndex);
}
if (startIndex < GetLength()) {
result.push_back(Substring(startIndex));
}
return result;
}
String& String::insert(int index, const String& other)
{
if (index < 0 || index > GetLength()) {
+2
View File
@@ -101,6 +101,8 @@ public:
String& Replace(int position, int len, const String& other);
std::vector<String> Split(const String& separator) const;
String& insert(int index, const String& other);
String& operator=(const char* string);