Comments (3)
The problem is related how orogen handles subclassing.
the metadata creating on each parent and child class a property "metadata".
This yields into the problem, that the parent and child itself have the metadata property, this internally and externally.
The same is truth for input/output ports either. I see currently no easy was to solve this. It might be the best solution if a port with the same name and type is generated on a superclass to not generate the respective member on the child. But i don't know if this would have other side-effects within the framework.
The current solution is not good either, because a superclass might call metadata.set('something') but the metadata object on the parent is another instance and would not updated here.
from orogen.
It seems the complete orogen loading mechanism is partwise broken which makes this bug even harder.
the metadata plugin checks if it's already registered and skipts the generation otherwise.
10 if !find_extension("MetaDataPlugin")
the find_extension should check the superclasses too, but the problem is that this does not work. on this step of loading the @superclass
is either empty or only the RTT::TaskContext therefore the check fails.
Even is the check would be there. the c++ code generation should be done on the child to build up the port-model for the child too. This starts to get tricky for the same reasons than in my previous post...
from orogen.
👍 on the general analysis, in addition:
(1) the Spec's each_ methods should never yield two interface objects that have the same name, as a matter of rule
(2) the extension should register itself as each level of the hierarchy (same than e.g. the stream aligner), as it stores information that is specific to that specific level of the hierarchy (metadata set on the subclass should not "appear" on the superclass)
(3) the subclass issue you fished is indeed a problem. We'll have to move to having the superclass as a parameter of #task_context in order to fix that problem (e.g. having the superclass "fixed" at construction, which is obvious in hindsight). Calling #superclass would be deprecated.
(4) until we get (3) widely deployed, we should simply "ignore" duplicate properties that have same name and type.
from orogen.
Related Issues (20)
- Problem with base/samples/frame/Frame in orogen HOT 12
- Get task names from an orogen project HOT 14
- default extensions are enabled twice in imported projects
- orogen_include for `/std/vector</base/JointLimitRange>` and friends HOT 9
- kernel_require.rb:55:in `require': cannot load such file -- orogen (LoadError) HOT 2
- Error if ro_ptr is passed as argument of operation HOT 2
- orogen cannot handle "C style" typedef'ed structs correctly HOT 18
- Orogen does not include inherited ports when port_driven
- orogen: Merge toolchain-2.7 and master branches for the 2.8 release HOT 5
- Overwritten TypeInfo for standard types? HOT 1
- metaruby dependency not found HOT 1
- generated main does not compile on OSX HOT 7
- orogen generate invalid typlib files (includes are resolved wrongly) HOT 5
- Updated doc for new plugin system naming HOT 1
- Create base class for all plugins and document it HOT 1
- oroconf extract error HOT 2
- default task de-constructor is not virtual HOT 1
- Orogen Internal error HOT 6
- orogen missing catkin build tool dep HOT 2
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from orogen.