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 7ed8f22ee25ce56ef7086c6269dd3d216dfe2ecc..86737f3a5b41226811c23407c0c3a2814e566540 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 6244c03661fb68147528c614c179f9e875399df0..ab4311a21cde2c68c3e0a7e5a71b18c7d11b4320 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;