From 266154e179359808153f34583515dba4de261520 Mon Sep 17 00:00:00 2001 From: gong-guilin Date: Thu, 29 May 2025 15:21:36 +0800 Subject: [PATCH] =?UTF-8?q?SA=20IDL=E6=94=AF=E6=8C=81=E7=BB=A7=E6=89=BF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: gong-guilin --- .../codegen/SA/cpp/sa_cpp_interface_code_emitter.cpp | 8 +++++++- idl_tool_2/parser/parser.cpp | 6 ++++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/idl_tool_2/codegen/SA/cpp/sa_cpp_interface_code_emitter.cpp b/idl_tool_2/codegen/SA/cpp/sa_cpp_interface_code_emitter.cpp index 7ed8f22..86737f3 100644 --- a/idl_tool_2/codegen/SA/cpp/sa_cpp_interface_code_emitter.cpp +++ b/idl_tool_2/codegen/SA/cpp/sa_cpp_interface_code_emitter.cpp @@ -189,7 +189,13 @@ void SaCppInterfaceCodeEmitter::EmitInterfaceDefinition(StringBuilder &sb) EmitBeginNamespace(sb); EmitImportUsingNamespace(sb); EmitInterfaceMethodCommands(sb, TAB); - sb.AppendFormat("class %s : public IRemoteBroker {\n", interface_->GetName().c_str()); + auto extendsInterface = interface_->GetExtendsInterface(); + if (extendsInterface != nullptr) { + auto fullName = CppFullName(extendsInterface->GetName()); + sb.AppendFormat("class %s : public %s {\n", interface_->GetName().c_str(), fullName.c_str()); + } else { + sb.AppendFormat("class %s : public IRemoteBroker {\n", interface_->GetName().c_str()); + } sb.Append("public:\n"); EmitInterfaceBody(sb, TAB); EmitInterfaceMemberVariables(sb, TAB); diff --git a/idl_tool_2/parser/parser.cpp b/idl_tool_2/parser/parser.cpp index 6244c03..ab4311a 100644 --- a/idl_tool_2/parser/parser.cpp +++ b/idl_tool_2/parser/parser.cpp @@ -2358,6 +2358,12 @@ void Parser::ParseExtendsInfo(AutoPtr &interfaceType) LogError(__func__, __LINE__, token, std::string("extends interface name is empty")); return; } + if (Options::GetInstance().GetInterfaceType() == InterfaceType::SA) { + AutoPtr extendsInterface = new ASTInterfaceType; + extendsInterface->SetName(extendsInterfaceName); + interfaceType->AddExtendsInterface(extendsInterface); + return; + } if (!CheckImport(token)) { LogError(__func__, __LINE__, token, std::string("extends interface name is illegal")); return; -- Gitee