mirror of
https://github.com/openharmony/drivers_framework.git
synced 2026-07-20 19:27:49 -04:00
Fix:HDI prefix modify
Signed-off-by: wangyipeng <wangyipeng11@huawei.com>
This commit is contained in:
@@ -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");
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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()) {
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user