Bug 579884 - [Robotics, ROS2] Support Python code generation
- Add dependency towards _impl / C++ skeleton after the removal from common
code skeleton. Code pattern is not intuitive, the user implementation class
depends on generated code but it should not be vice versa (it is however
possible in C++, since only the C++ body file includes the skeleton)
Change-Id: I2682744ffaa18f516a022f3b38fe189dd578b4e9
Signed-off-by: aradermache <ansgar.radermacher@cea.fr>
diff --git a/plugins/ros2/org.eclipse.papyrus.robotics.ros2.codegen.cpp/src/org/eclipse/papyrus/robotics/ros2/codegen/cpp/component/Constructor.xtend b/plugins/ros2/org.eclipse.papyrus.robotics.ros2.codegen.cpp/src/org/eclipse/papyrus/robotics/ros2/codegen/cpp/component/Constructor.xtend
index ccd2cc9..6ce839d 100644
--- a/plugins/ros2/org.eclipse.papyrus.robotics.ros2.codegen.cpp/src/org/eclipse/papyrus/robotics/ros2/codegen/cpp/component/Constructor.xtend
+++ b/plugins/ros2/org.eclipse.papyrus.robotics.ros2.codegen.cpp/src/org/eclipse/papyrus/robotics/ros2/codegen/cpp/component/Constructor.xtend
@@ -41,6 +41,9 @@
*/
class Constructor {
+ /**
+ * Create constructor and (if required) callback methods for handlers
+ */
def static createConstructor(Class component) {
val lcNodeSC = getType(component, "ros2Library::rclcpp_lifecycle::LifecycleNode")
if (lcNodeSC instanceof Classifier) {
diff --git a/plugins/ros2/org.eclipse.papyrus.robotics.ros2.codegen.cpp/src/org/eclipse/papyrus/robotics/ros2/codegen/cpp/component/Ros2CodeSkeleton.xtend b/plugins/ros2/org.eclipse.papyrus.robotics.ros2.codegen.cpp/src/org/eclipse/papyrus/robotics/ros2/codegen/cpp/component/Ros2CodeSkeleton.xtend
index 59f919b..cc9e1aa 100644
--- a/plugins/ros2/org.eclipse.papyrus.robotics.ros2.codegen.cpp/src/org/eclipse/papyrus/robotics/ros2/codegen/cpp/component/Ros2CodeSkeleton.xtend
+++ b/plugins/ros2/org.eclipse.papyrus.robotics.ros2.codegen.cpp/src/org/eclipse/papyrus/robotics/ros2/codegen/cpp/component/Ros2CodeSkeleton.xtend
@@ -31,10 +31,13 @@
}
override addConstrOp(Class skeleton) {
+ // constructor in generated component registers callback from _impl/skeleton class, therefore it
+ // needs to include it (only on body level to avoid circular dependency)
+ component.createUsage(skeleton);
+
val constructorOp = Constructor.addConstrOp(skeleton);
if (constructorOp !== null) {
val constInit = UMLUtil.getStereotypeApplication(constructorOp, ConstInit)
- // TODO - remove C++ specific code from common part
if (constInit !== null) {
constInit.initialisation = '''«component.name»(options)'''
}
diff --git a/plugins/ros2/org.eclipse.papyrus.robotics.ros2.codegen.tests/expectedResult/publishSubscribe_extcode/src-gen/periodicPublisherCompdef/PeriodicPublisher.cpp b/plugins/ros2/org.eclipse.papyrus.robotics.ros2.codegen.tests/expectedResult/publishSubscribe_extcode/src-gen/periodicPublisherCompdef/PeriodicPublisher.cpp
index dd0c27c..d69d7e2 100644
--- a/plugins/ros2/org.eclipse.papyrus.robotics.ros2.codegen.tests/expectedResult/publishSubscribe_extcode/src-gen/periodicPublisherCompdef/PeriodicPublisher.cpp
+++ b/plugins/ros2/org.eclipse.papyrus.robotics.ros2.codegen.tests/expectedResult/publishSubscribe_extcode/src-gen/periodicPublisherCompdef/PeriodicPublisher.cpp
@@ -20,6 +20,7 @@
#include "periodicPublisherCompdef/PeriodicPublisher.h"
// Derived includes directives
+#include "periodicPublisherCompdef/PeriodicPublisher_impl.h"
#include "periodicPublisherCompdef/PeriodicPublisher_main.h"
#include "rclcpp/rclcpp.hpp"
diff --git a/plugins/ros2/org.eclipse.papyrus.robotics.ros2.codegen.tests/expectedResult/publishSubscribe_extcode/src-gen/subscriberCompdef/Subscriber.cpp b/plugins/ros2/org.eclipse.papyrus.robotics.ros2.codegen.tests/expectedResult/publishSubscribe_extcode/src-gen/subscriberCompdef/Subscriber.cpp
index f9f5c8e..e4d5329 100644
--- a/plugins/ros2/org.eclipse.papyrus.robotics.ros2.codegen.tests/expectedResult/publishSubscribe_extcode/src-gen/subscriberCompdef/Subscriber.cpp
+++ b/plugins/ros2/org.eclipse.papyrus.robotics.ros2.codegen.tests/expectedResult/publishSubscribe_extcode/src-gen/subscriberCompdef/Subscriber.cpp
@@ -26,6 +26,7 @@
// Derived includes directives
#include "rclcpp/rclcpp.hpp"
+#include "subscriberCompdef/Subscriber_impl.h"
#include "subscriberCompdef/Subscriber_main.h"
namespace subscriberCompdef {