From bbdd449cdb40c6a73daab97778ab2cad8d05aec9 Mon Sep 17 00:00:00 2001 From: Christoph Pohl <christoph.pohl@kit.edu> Date: Thu, 23 Mar 2023 19:57:42 +0100 Subject: [PATCH] Make non-static reader and writer mathods virtual or final in case of inheritance --- .../codegenerator/codewriter/cpp/Writer.cpp | 11 +++++++++++ .../codewriter/cpp/generator/Generator.cpp | 10 ++++++++-- .../codegeneration/codegenerator/helper/ReaderInfo.h | 1 + .../codegeneration/codegenerator/helper/WriterInfo.h | 1 + 4 files changed, 21 insertions(+), 2 deletions(-) diff --git a/source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/Writer.cpp b/source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/Writer.cpp index e6e6c075a..a597e8ecc 100644 --- a/source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/Writer.cpp +++ b/source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/Writer.cpp @@ -305,6 +305,11 @@ namespace armarx::aron::codegenerator::cpp { c->addInclude(info.include); } + + if (type->getExtends() != nullptr) + { + info.extends = true; + } CppMethodPtr convert = generator.toSpecializedDataWriterMethod(info); c->addPublicMethod(convert); } @@ -338,6 +343,11 @@ namespace armarx::aron::codegenerator::cpp { c->addInclude(info.include); } + + if (type->getExtends() != nullptr) + { + info.extends = true; + } CppMethodPtr convert = generator.toSpecializedDataReaderMethod(info); c->addPublicMethod(convert); } @@ -416,6 +426,7 @@ namespace armarx::aron::codegenerator::cpp { c->addInclude(info.include); } + CppMethodPtr convert = generator.toSpecializedDataWriterMethod(info); c->addPublicMethod(convert); } diff --git a/source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/Generator.cpp b/source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/Generator.cpp index 18dd38f6e..a0715b220 100644 --- a/source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/Generator.cpp +++ b/source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/Generator.cpp @@ -317,7 +317,10 @@ namespace armarx::aron::codegenerator::cpp doc << "@brief " << info.methodName << "() - This method returns a new data from the member data types using a writer implementation. \n"; doc << "@return - the result of the writer implementation"; - CppMethodPtr m = CppMethodPtr(new CppMethod(info.returnType + " " + info.methodName + "() const", doc.str())); + const std::string fin = info.extends ? " final" : ""; + const std::string virt = info.extends ? "" : "virtual "; + + CppMethodPtr m = CppMethodPtr(new CppMethod(virt + info.returnType + " " + info.methodName + "() const" + fin, doc.str())); m->addLine(info.writerClassType + " writer;"); m->addLine("return " + info.enforceConversion + "(this->write(writer))" + info.enforceMemberAccess + ";"); @@ -331,7 +334,10 @@ namespace armarx::aron::codegenerator::cpp doc << "@brief " << info.methodName << " - This method sets the struct members to new values given in a reader implementation. \n"; doc << "@return - nothing"; - CppMethodPtr m = CppMethodPtr(new CppMethod("void " + info.methodName + "(const " + info.argumentType + "& input)", doc.str())); + const std::string fin = info.extends ? " final" : ""; + const std::string virt = info.extends ? "" : "virtual "; + + CppMethodPtr m = CppMethodPtr(new CppMethod(virt + "void " + info.methodName + "(const " + info.argumentType + "& input)" + fin, doc.str())); m->addLine(info.readerClassType + " reader;"); m->addLine("this->read(reader, " + info.enforceConversion + "(input)" + info.enforceMemberAccess + ");"); diff --git a/source/RobotAPI/libraries/aron/codegeneration/codegenerator/helper/ReaderInfo.h b/source/RobotAPI/libraries/aron/codegeneration/codegenerator/helper/ReaderInfo.h index 3bda10de7..58dda6381 100644 --- a/source/RobotAPI/libraries/aron/codegeneration/codegenerator/helper/ReaderInfo.h +++ b/source/RobotAPI/libraries/aron/codegeneration/codegenerator/helper/ReaderInfo.h @@ -37,6 +37,7 @@ namespace armarx::aron::codegenerator std::string include; std::string enforceConversion = ""; std::string enforceMemberAccess = ""; + bool extends = false; }; diff --git a/source/RobotAPI/libraries/aron/codegeneration/codegenerator/helper/WriterInfo.h b/source/RobotAPI/libraries/aron/codegeneration/codegenerator/helper/WriterInfo.h index 1989ac5de..d3cff5ef8 100644 --- a/source/RobotAPI/libraries/aron/codegeneration/codegenerator/helper/WriterInfo.h +++ b/source/RobotAPI/libraries/aron/codegeneration/codegenerator/helper/WriterInfo.h @@ -37,5 +37,6 @@ namespace armarx::aron::codegenerator std::string include; std::string enforceConversion = ""; std::string enforceMemberAccess = ""; + bool extends = false; }; } -- GitLab