Skip to content
GitLab
Menu
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in
Toggle navigation
Menu
Open sidebar
monticore
EmbeddedMontiArc
generators
EMAM2RosCpp
Commits
8e95f43a
Commit
8e95f43a
authored
Jul 26, 2018
by
Evgeny Kusmenko
Browse files
Merge branch 'BreakingSymbolUpdate' into 'master'
Breaking symbol update See merge request
!7
parents
07a52abb
ea354813
Pipeline
#65249
passed with stages
in 1 minute and 13 seconds
Changes
36
Pipelines
1
Show whitespace changes
Inline
Side-by-side
pom.xml
View file @
8e95f43a
...
...
@@ -9,7 +9,7 @@
<groupId>
de.monticore.lang.monticar
</groupId>
<artifactId>
embedded-montiarc-math-roscpp-generator
</artifactId>
<version>
0.
0.5
-SNAPSHOT
</version>
<version>
0.
1.0
-SNAPSHOT
</version>
<!-- == PROJECT DEPENDENCIES ============================================= -->
...
...
@@ -17,10 +17,9 @@
<!-- .. SE-Libraries .................................................. -->
<se-commons.version>
1.7.7
</se-commons.version>
<Embedded-MontiArc-Math.version>
0.0.19-SNAPSHOT
</Embedded-MontiArc-Math.version>
<Embedded-montiarc-math-generator.version>
0.0.22-SNAPSHOT
</Embedded-montiarc-math-generator.version>
<Embedded-montiarc-math-rosmsg-generator.version>
0.0.3-SNAPSHOT
</Embedded-montiarc-math-rosmsg-generator.version>
<tagging.version>
0.0.6
</tagging.version>
<Embedded-MontiArc-Math.version>
0.1.0-SNAPSHOT
</Embedded-MontiArc-Math.version>
<Embedded-montiarc-math-rosmsg-generator.version>
0.1.0-SNAPSHOT
</Embedded-montiarc-math-rosmsg-generator.version>
<!-- .. Libraries .................................................. -->
<guava.version>
18.0
</guava.version>
<junit.version>
4.12
</junit.version>
...
...
@@ -28,7 +27,6 @@
<yamlbeans.version>
1.12
</yamlbeans.version>
<!-- .. Plugins ....................................................... -->
<monticore.plugin>
4.5.3-SNAPSHOT
</monticore.plugin>
<assembly.plugin>
2.5.4
</assembly.plugin>
<compiler.plugin>
3.3
</compiler.plugin>
<source.plugin>
2.4
</source.plugin>
...
...
@@ -49,23 +47,12 @@
<dependencies>
<dependency>
<groupId>
de.monticore.lang
</groupId>
<artifactId>
Tagging
</artifactId>
<version>
${tagging.version}
</version>
</dependency>
<dependency>
<groupId>
de.se_rwth.commons
</groupId>
<artifactId>
se-commons-logging
</artifactId>
<version>
${se-commons.version}
</version>
</dependency>
<dependency>
<groupId>
de.monticore.lang.monticar
</groupId>
<artifactId>
embedded-montiarc-math-generator
</artifactId>
<version>
${Embedded-montiarc-math-generator.version}
</version>
</dependency>
<dependency>
<groupId>
de.monticore.lang.monticar
</groupId>
<artifactId>
embedded-montiarc-math-rosmsg-generator
</artifactId>
...
...
src/main/java/de/monticore/lang/monticar/generator/roscpp/DirectMsgConverter.java
View file @
8e95f43a
package
de.monticore.lang.monticar.generator.roscpp
;
import
de.monticore.lang.embeddedmontiarc.embeddedmontiarc._symboltable.PortSymbol
;
import
de.monticore.lang.embeddedmontiarc.embeddedmontiarc._symboltable.
cncModel.EMA
PortSymbol
;
import
de.monticore.lang.monticar.generator.roscpp.helper.NameHelper
;
public
class
DirectMsgConverter
implements
MsgConverter
{
...
...
@@ -18,7 +18,7 @@ public class DirectMsgConverter implements MsgConverter {
}
@Override
public
String
getConversion
(
PortSymbol
portSymbol
)
{
public
String
getConversion
(
EMA
PortSymbol
portSymbol
)
{
return
!
isMsgToPort
?
"."
+
msgField
+
" = component->"
+
NameHelper
.
getPortNameTargetLanguage
(
portSymbol
)
:
"msg->"
+
msgField
;
}
...
...
src/main/java/de/monticore/lang/monticar/generator/roscpp/GeneratorRosCpp.java
View file @
8e95f43a
package
de.monticore.lang.monticar.generator.roscpp
;
import
de.monticore.lang.embeddedmontiarc.embeddedmontiarc._symboltable.
Expanded
ComponentInstanceSymbol
;
import
de.monticore.lang.monticar.generator.FileContent
;
import
de.monticore.lang.monticar.generator.
cpp
.BluePrintCPP
;
import
de.monticore.lang.embeddedmontiarc.embeddedmontiarc._symboltable.
instanceStructure.EMA
ComponentInstanceSymbol
;
import
de.monticore.lang.monticar.generator.
rosmsg.util.
FileContent
;
import
de.monticore.lang.monticar.generator.
roscpp.util
.BluePrintCPP
;
import
de.monticore.lang.monticar.generator.roscpp.helper.FormatHelper
;
import
de.monticore.lang.monticar.generator.roscpp.helper.NameHelper
;
import
de.monticore.lang.monticar.generator.roscpp.helper.PrinterHelper
;
...
...
@@ -36,7 +36,7 @@ public class GeneratorRosCpp {
this
.
generationTargetPath
=
generationTargetPath
;
}
public
List
<
File
>
generateFiles
(
E
xpanded
ComponentInstanceSymbol
component
,
TaggingResolver
symtab
)
throws
IOException
{
public
List
<
File
>
generateFiles
(
E
MA
ComponentInstanceSymbol
component
,
TaggingResolver
symtab
)
throws
IOException
{
List
<
FileContent
>
fileContents
=
generateStrings
(
component
);
if
(
getGenerationTargetPath
().
charAt
(
getGenerationTargetPath
().
length
()
-
1
)
!=
'/'
)
{
...
...
@@ -66,7 +66,7 @@ public class GeneratorRosCpp {
return
f
;
}
public
List
<
FileContent
>
generateStrings
(
E
xpanded
ComponentInstanceSymbol
component
)
{
public
List
<
FileContent
>
generateStrings
(
E
MA
ComponentInstanceSymbol
component
)
{
List
<
FileContent
>
fileContents
=
new
ArrayList
<>();
fileContents
.
addAll
(
generateRosAdapter
(
component
));
fileContents
.
stream
()
...
...
@@ -75,7 +75,7 @@ public class GeneratorRosCpp {
return
fileContents
;
}
private
List
<
FileContent
>
generateRosAdapter
(
E
xpanded
ComponentInstanceSymbol
component
)
{
private
List
<
FileContent
>
generateRosAdapter
(
E
MA
ComponentInstanceSymbol
component
)
{
List
<
FileContent
>
res
=
new
ArrayList
<>();
FileContent
apdapter
=
new
FileContent
();
...
...
src/main/java/de/monticore/lang/monticar/generator/roscpp/LanguageUnitRosCMake.java
View file @
8e95f43a
package
de.monticore.lang.monticar.generator.roscpp
;
import
de.monticore.lang.embeddedmontiarc.embeddedmontiarc._symboltable.ExpandedComponentInstanceSymbol
;
import
de.monticore.lang.monticar.generator.FileContent
;
import
de.monticore.lang.embeddedmontiarc.embeddedmontiarc._symboltable.instanceStructure.EMAComponentInstanceSymbol
;
import
de.monticore.lang.monticar.generator.roscpp.helper.NameHelper
;
import
de.monticore.lang.monticar.generator.rosmsg.util.FileContent
;
import
java.util.ArrayList
;
import
java.util.List
;
...
...
@@ -23,7 +23,7 @@ public class LanguageUnitRosCMake {
"\n"
+
"export(TARGETS <name> FILE <name>.cmake)"
;
FileContent
generate
(
E
xpanded
ComponentInstanceSymbol
componentInstanceSymbol
,
List
<
String
>
additionalPackages
)
{
FileContent
generate
(
E
MA
ComponentInstanceSymbol
componentInstanceSymbol
,
List
<
String
>
additionalPackages
)
{
FileContent
fileContent
=
new
FileContent
();
fileContent
.
setFileName
(
"CMakeLists.txt"
);
...
...
src/main/java/de/monticore/lang/monticar/generator/roscpp/LanguageUnitRosCppAdapter.java
View file @
8e95f43a
package
de.monticore.lang.monticar.generator.roscpp
;
import
de.monticore.lang.embeddedmontiarc.embeddedmontiarc._symboltable.
Expanded
ComponentInstanceSymbol
;
import
de.monticore.lang.embeddedmontiarc.embeddedmontiarc._symboltable.PortSymbol
;
import
de.monticore.lang.embeddedmontiarc.embeddedmontiarc._symboltable.
instanceStructure.EMA
ComponentInstanceSymbol
;
import
de.monticore.lang.embeddedmontiarc.embeddedmontiarc._symboltable.
cncModel.EMA
PortSymbol
;
import
de.monticore.lang.embeddedmontiarc.tagging.middleware.ros.RosConnectionSymbol
;
import
de.monticore.lang.monticar.generator.*
;
import
de.monticore.lang.monticar.generator.cpp.BluePrintCPP
;
import
de.monticore.lang.monticar.generator.roscpp.util.*
;
import
de.monticore.lang.monticar.generator.roscpp.helper.NameHelper
;
import
de.monticore.lang.monticar.generator.roscpp.helper.TagHelper
;
import
de.monticore.lang.monticar.generator.roscpp.instructions.*
;
...
...
@@ -29,7 +28,7 @@ public class LanguageUnitRosCppAdapter {
return
additionalPackages
;
}
public
Optional
<
BluePrintCPP
>
generateBluePrint
(
E
xpanded
ComponentInstanceSymbol
componentSymbol
)
{
public
Optional
<
BluePrintCPP
>
generateBluePrint
(
E
MA
ComponentInstanceSymbol
componentSymbol
)
{
BluePrintCPP
currentBluePrint
=
null
;
...
...
@@ -37,8 +36,8 @@ public class LanguageUnitRosCppAdapter {
String
name
=
NameHelper
.
getAdapterName
(
componentSymbol
);
currentBluePrint
=
new
BluePrintCPP
(
name
);
List
<
PortSymbol
>
rosPorts
=
componentSymbol
.
getPort
s
List
().
stream
()
.
filter
(
PortSymbol:
:
isRosPort
)
List
<
EMA
PortSymbol
>
rosPorts
=
componentSymbol
.
getPort
Instance
List
().
stream
()
.
filter
(
EMA
PortSymbol:
:
isRosPort
)
.
collect
(
Collectors
.
toList
());
generateFields
(
componentSymbol
,
rosPorts
,
currentBluePrint
);
...
...
@@ -54,7 +53,7 @@ public class LanguageUnitRosCppAdapter {
}
private
void
generateIncludes
(
E
xpanded
ComponentInstanceSymbol
componentSymbol
,
List
<
PortSymbol
>
rosPorts
,
BluePrintCPP
currentBluePrint
)
{
private
void
generateIncludes
(
E
MA
ComponentInstanceSymbol
componentSymbol
,
List
<
EMA
PortSymbol
>
rosPorts
,
BluePrintCPP
currentBluePrint
)
{
currentBluePrint
.
addAdditionalIncludeString
(
"<ros/ros.h>"
);
String
compName
=
NameHelper
.
getComponentNameTargetLanguage
(
componentSymbol
.
getFullName
());
currentBluePrint
.
addAdditionalIncludeString
(
"\""
+
compName
+
".h\""
);
...
...
@@ -62,7 +61,7 @@ public class LanguageUnitRosCppAdapter {
//Add each msg include exactly once
rosPorts
.
stream
()
.
map
(
PortSymbol:
:
getMiddlewareSymbol
)
.
map
(
EMA
PortSymbol:
:
getMiddlewareSymbol
)
.
map
(
Optional:
:
get
)
.
map
(
mws
->
(
RosConnectionSymbol
)
mws
)
.
map
(
RosConnectionSymbol:
:
getTopicType
)
...
...
@@ -78,7 +77,7 @@ public class LanguageUnitRosCppAdapter {
.
forEach
(
currentBluePrint:
:
addAdditionalIncludeString
);
}
private
void
generatePublishMethods
(
List
<
PortSymbol
>
rosPorts
,
BluePrint
currentBluePrint
)
{
private
void
generatePublishMethods
(
List
<
EMA
PortSymbol
>
rosPorts
,
BluePrint
CPP
currentBluePrint
)
{
Map
<
String
,
Method
>
topicToMethod
=
new
HashMap
<>();
publishers
.
keySet
().
forEach
(
var
->
{
...
...
@@ -89,8 +88,8 @@ public class LanguageUnitRosCppAdapter {
});
rosPorts
.
stream
()
.
filter
(
PortSymbol:
:
isOutgoing
)
.
sorted
(
Comparator
.
comparing
(
PortSymbol:
:
getName
))
.
filter
(
EMA
PortSymbol:
:
isOutgoing
)
.
sorted
(
Comparator
.
comparing
(
EMA
PortSymbol:
:
getName
))
.
forEachOrdered
(
p
->
{
RosConnectionSymbol
rcs
=
(
RosConnectionSymbol
)
p
.
getMiddlewareSymbol
().
get
();
Method
method
=
topicToMethod
.
get
(
rcs
.
getTopicName
().
get
());
...
...
@@ -119,13 +118,13 @@ public class LanguageUnitRosCppAdapter {
.
replace
(
"]"
,
"_"
);
}
private
void
generateConstructor
(
String
classname
,
BluePrint
currentBluePrint
)
{
private
void
generateConstructor
(
String
classname
,
BluePrint
CPP
currentBluePrint
)
{
Method
constructorMethod
=
new
Method
(
classname
,
""
);
constructorMethod
.
addInstruction
(
new
TargetCodeInstruction
(
""
));
currentBluePrint
.
addMethod
(
constructorMethod
);
}
public
void
generateInit
(
String
classname
,
String
componentName
,
BluePrint
currentBluePrint
)
{
public
void
generateInit
(
String
classname
,
String
componentName
,
BluePrint
CPP
currentBluePrint
)
{
Method
initMethod
=
new
Method
(
"init"
,
"void"
);
Variable
compPointer
=
new
Variable
();
...
...
@@ -157,7 +156,7 @@ public class LanguageUnitRosCppAdapter {
currentBluePrint
.
addMethod
(
initMethod
);
}
private
void
generateFields
(
E
xpanded
ComponentInstanceSymbol
symbol
,
List
<
PortSymbol
>
rosPorts
,
BluePrintCPP
currBluePrint
)
{
private
void
generateFields
(
E
MA
ComponentInstanceSymbol
symbol
,
List
<
EMA
PortSymbol
>
rosPorts
,
BluePrintCPP
currBluePrint
)
{
currBluePrint
.
addDefineGenerics
(
symbol
);
//component
Variable
componentField
=
new
Variable
();
...
...
@@ -171,7 +170,7 @@ public class LanguageUnitRosCppAdapter {
//subs
rosPorts
.
stream
()
.
filter
(
PortSymbol:
:
isIncoming
)
.
filter
(
EMA
PortSymbol:
:
isIncoming
)
.
map
(
p
->
(
RosConnectionSymbol
)
p
.
getMiddlewareSymbol
().
get
())
.
forEach
(
rosConnectionSymbol
->
{
String
name
=
getTopicNameTargetLanguage
(
rosConnectionSymbol
.
getTopicName
().
get
()).
toLowerCase
()
+
"Subscriber"
;
...
...
@@ -187,7 +186,7 @@ public class LanguageUnitRosCppAdapter {
//pubs
rosPorts
.
stream
()
.
filter
(
PortSymbol:
:
isOutgoing
)
.
filter
(
EMA
PortSymbol:
:
isOutgoing
)
.
map
(
p
->
(
RosConnectionSymbol
)
p
.
getMiddlewareSymbol
().
get
())
.
forEach
(
rosConnectionSymbol
->
{
String
name
=
getTopicNameTargetLanguage
(
rosConnectionSymbol
.
getTopicName
().
get
()).
toLowerCase
()
+
"Publisher"
;
...
...
@@ -204,7 +203,7 @@ public class LanguageUnitRosCppAdapter {
}
private
void
generateTick
(
BluePrint
currentBluePrint
)
{
private
void
generateTick
(
BluePrint
CPP
currentBluePrint
)
{
Method
tickMethod
=
new
Method
(
"tick"
,
"void"
);
publishMethods
.
stream
()
...
...
@@ -223,13 +222,13 @@ public class LanguageUnitRosCppAdapter {
return
rosConnectionSymbol
.
getTopicType
().
get
().
replace
(
"/"
,
"::"
);
}
private
void
generateCallbacks
(
List
<
PortSymbol
>
rosPorts
,
BluePrint
currentBluePrint
)
{
private
void
generateCallbacks
(
List
<
EMA
PortSymbol
>
rosPorts
,
BluePrint
CPP
currentBluePrint
)
{
Map
<
String
,
Method
>
uniqueMethods
=
new
HashMap
<>();
rosPorts
.
stream
()
.
filter
(
PortSymbol:
:
isIncoming
)
.
filter
(
EMA
PortSymbol:
:
isIncoming
)
.
forEachOrdered
(
portSymbol
->
{
RosConnectionSymbol
rosCon
=
(
RosConnectionSymbol
)
portSymbol
.
getMiddlewareSymbol
().
get
();
if
(!
uniqueMethods
.
containsKey
(
rosCon
.
getTopicName
().
get
()))
{
...
...
src/main/java/de/monticore/lang/monticar/generator/roscpp/MethodMsgConverter.java
View file @
8e95f43a
package
de.monticore.lang.monticar.generator.roscpp
;
import
com.google.common.collect.Sets
;
import
de.monticore.lang.embeddedmontiarc.embeddedmontiarc._symboltable.PortSymbol
;
import
de.monticore.lang.embeddedmontiarc.embeddedmontiarc._symboltable.
cncModel.EMA
PortSymbol
;
import
de.monticore.lang.monticar.generator.roscpp.helper.NameHelper
;
import
java.util.Set
;
...
...
@@ -25,7 +25,7 @@ public class MethodMsgConverter implements MsgConverter {
}
@Override
public
String
getConversion
(
PortSymbol
portSymbol
)
{
public
String
getConversion
(
EMA
PortSymbol
portSymbol
)
{
return
isMsgToPort
?
methodNameWithClass
+
"(msg)"
:
" = "
+
methodNameWithClass
+
"(component->"
+
(
NameHelper
.
getPortNameTargetLanguage
(
portSymbol
)
+
")"
);
}
...
...
src/main/java/de/monticore/lang/monticar/generator/roscpp/MsgConverter.java
View file @
8e95f43a
package
de.monticore.lang.monticar.generator.roscpp
;
import
de.monticore.lang.embeddedmontiarc.embeddedmontiarc._symboltable.PortSymbol
;
import
de.monticore.lang.embeddedmontiarc.embeddedmontiarc._symboltable.
cncModel.EMA
PortSymbol
;
import
java.util.Collections
;
import
java.util.Set
;
...
...
@@ -14,7 +14,7 @@ public interface MsgConverter {
return
!
isMsgToPort
();
}
String
getConversion
(
PortSymbol
portSymbol
);
String
getConversion
(
EMA
PortSymbol
portSymbol
);
default
Set
<
String
>
getAdditionalIncludes
()
{
return
Collections
.
emptySet
();
...
...
src/main/java/de/monticore/lang/monticar/generator/roscpp/ResolvedRosInterface.java
View file @
8e95f43a
package
de.monticore.lang.monticar.generator.roscpp
;
import
com.google.common.base.Objects
;
import
de.monticore.lang.embeddedmontiarc.embeddedmontiarc._symboltable.PortSymbol
;
import
de.monticore.lang.monticar.generator.Method
;
import
de.monticore.lang.monticar.generator.Variable
;
import
de.monticore.lang.embeddedmontiarc.embeddedmontiarc._symboltable.
cncModel.EMA
PortSymbol
;
import
de.monticore.lang.monticar.generator.
roscpp.util.
Method
;
import
de.monticore.lang.monticar.generator.
roscpp.util.
Variable
;
import
java.util.HashMap
;
import
java.util.Map
;
...
...
@@ -14,7 +14,7 @@ public class ResolvedRosInterface {
private
String
type
;
private
String
topic
;
private
String
include
;
private
Map
<
PortSymbol
,
String
>
portToMsgField
=
new
HashMap
<>();
private
Map
<
EMA
PortSymbol
,
String
>
portToMsgField
=
new
HashMap
<>();
private
Optional
<
Variable
>
publisherField
=
Optional
.
empty
();
private
Optional
<
Variable
>
subscriberField
=
Optional
.
empty
();
private
Optional
<
Method
>
publishMethod
=
Optional
.
empty
();
...
...
@@ -81,15 +81,15 @@ public class ResolvedRosInterface {
this
.
include
=
include
;
}
public
void
addPort
(
PortSymbol
portSymbol
,
String
msgField
)
{
public
void
addPort
(
EMA
PortSymbol
portSymbol
,
String
msgField
)
{
portToMsgField
.
put
(
portSymbol
,
msgField
);
}
public
Set
<
PortSymbol
>
getPorts
()
{
public
Set
<
EMA
PortSymbol
>
getPorts
()
{
return
portToMsgField
.
keySet
();
}
public
String
getMsgFieldForPort
(
PortSymbol
portSymbol
)
{
public
String
getMsgFieldForPort
(
EMA
PortSymbol
portSymbol
)
{
return
portToMsgField
.
get
(
portSymbol
);
}
...
...
src/main/java/de/monticore/lang/monticar/generator/roscpp/ResolvedRosTag.java
View file @
8e95f43a
package
de.monticore.lang.monticar.generator.roscpp
;
import
com.google.common.base.Objects
;
import
de.monticore.lang.embeddedmontiarc.embeddedmontiarc._symboltable.
Expanded
ComponentInstanceSymbol
;
import
de.monticore.lang.embeddedmontiarc.embeddedmontiarc._symboltable.
instanceStructure.EMA
ComponentInstanceSymbol
;
import
java.util.HashSet
;
import
java.util.Set
;
//TODO: rename: not used as a Tag
public
class
ResolvedRosTag
{
private
E
xpanded
ComponentInstanceSymbol
component
;
private
E
MA
ComponentInstanceSymbol
component
;
private
Set
<
ResolvedRosInterface
>
subscriberInterfaces
=
new
HashSet
<>();
private
Set
<
ResolvedRosInterface
>
publisherInterfaces
=
new
HashSet
<>();
public
ResolvedRosTag
(
E
xpanded
ComponentInstanceSymbol
component
)
{
public
ResolvedRosTag
(
E
MA
ComponentInstanceSymbol
component
)
{
this
.
component
=
component
;
}
public
E
xpanded
ComponentInstanceSymbol
getComponent
()
{
public
E
MA
ComponentInstanceSymbol
getComponent
()
{
return
component
;
}
public
void
setComponent
(
E
xpanded
ComponentInstanceSymbol
component
)
{
public
void
setComponent
(
E
MA
ComponentInstanceSymbol
component
)
{
this
.
component
=
component
;
}
...
...
src/main/java/de/monticore/lang/monticar/generator/roscpp/helper/NameHelper.java
View file @
8e95f43a
package
de.monticore.lang.monticar.generator.roscpp.helper
;
import
de.monticore.lang.embeddedmontiarc.embeddedmontiarc._symboltable.
Expanded
ComponentInstanceSymbol
;
import
de.monticore.lang.embeddedmontiarc.embeddedmontiarc._symboltable.PortSymbol
;
import
de.monticore.lang.embeddedmontiarc.embeddedmontiarc._symboltable.
instanceStructure.EMA
ComponentInstanceSymbol
;
import
de.monticore.lang.embeddedmontiarc.embeddedmontiarc._symboltable.
cncModel.EMA
PortSymbol
;
import
de.monticore.lang.monticar.generator.rosmsg.RosMsg
;
import
de.se_rwth.commons.logging.Log
;
...
...
@@ -13,7 +13,7 @@ public class NameHelper {
private
NameHelper
()
{
}
public
static
String
getPortNameTargetLanguage
(
PortSymbol
portSymbol
)
{
public
static
String
getPortNameTargetLanguage
(
EMA
PortSymbol
portSymbol
)
{
//TODO: get from cpp generator for consistency?
if
(
portSymbol
.
isPartOfPortArray
())
{
return
getFixedArrayPortName
(
portSymbol
);
...
...
@@ -22,9 +22,9 @@ public class NameHelper {
}
}
public
static
String
getFixedArrayPortName
(
PortSymbol
portSymbol
)
{
public
static
String
getFixedArrayPortName
(
EMA
PortSymbol
portSymbol
)
{
if
(!
portSymbol
.
isPartOfPortArray
())
throw
new
IllegalArgumentException
(
"PortSymbol "
+
portSymbol
.
getName
()
+
" is not part of an array!"
);
throw
new
IllegalArgumentException
(
"
EMA
PortSymbol "
+
portSymbol
.
getName
()
+
" is not part of an array!"
);
return
fixName
(
portSymbol
.
getName
());
}
...
...
@@ -52,7 +52,7 @@ public class NameHelper {
return
shortName
+
"["
+
cppIndex
+
"]"
+
rest
;
}
public
static
String
getAdapterName
(
E
xpanded
ComponentInstanceSymbol
componentInstanceSymbol
)
{
public
static
String
getAdapterName
(
E
MA
ComponentInstanceSymbol
componentInstanceSymbol
)
{
return
"RosAdapter_"
+
getComponentNameTargetLanguage
(
componentInstanceSymbol
.
getFullName
());
}
...
...
src/main/java/de/monticore/lang/monticar/generator/roscpp/helper/PrinterHelper.java
View file @
8e95f43a
package
de.monticore.lang.monticar.generator.roscpp.helper
;
import
de.monticore.lang.monticar.generator.Instruction
;
import
de.monticore.lang.monticar.generator.Method
;
import
de.monticore.lang.monticar.generator.Variable
;
import
de.monticore.lang.monticar.generator.
cpp
.BluePrintCPP
;
import
de.monticore.lang.monticar.generator.
roscpp.util.
Instruction
;
import
de.monticore.lang.monticar.generator.
roscpp.util.
Method
;
import
de.monticore.lang.monticar.generator.
roscpp.util.
Variable
;
import
de.monticore.lang.monticar.generator.
roscpp.util
.BluePrintCPP
;
import
java.util.Comparator
;
...
...
src/main/java/de/monticore/lang/monticar/generator/roscpp/helper/ResolveHelper.java
View file @
8e95f43a
...
...
@@ -2,8 +2,8 @@ package de.monticore.lang.monticar.generator.roscpp.helper;
import
de.monticar.lang.monticar.generator.python.RosInterface
;
import
de.monticar.lang.monticar.generator.python.RosTag
;
import
de.monticore.lang.embeddedmontiarc.embeddedmontiarc._symboltable.
Expanded
ComponentInstanceSymbol
;
import
de.monticore.lang.embeddedmontiarc.embeddedmontiarc._symboltable.PortSymbol
;
import
de.monticore.lang.embeddedmontiarc.embeddedmontiarc._symboltable.
instanceStructure.EMA
ComponentInstanceSymbol
;
import
de.monticore.lang.embeddedmontiarc.embeddedmontiarc._symboltable.
cncModel.EMA
PortSymbol
;
import
de.monticore.lang.monticar.generator.roscpp.ResolvedRosInterface
;
import
de.monticore.lang.monticar.generator.roscpp.ResolvedRosTag
;
import
de.monticore.symboltable.Scope
;
...
...
@@ -14,7 +14,7 @@ public class ResolveHelper {
}
//TODO: refactor
public
static
ResolvedRosInterface
resolveRosInterface
(
RosInterface
rosInterface
,
E
xpanded
ComponentInstanceSymbol
component
,
boolean
isSubscriber
)
{
public
static
ResolvedRosInterface
resolveRosInterface
(
RosInterface
rosInterface
,
E
MA
ComponentInstanceSymbol
component
,
boolean
isSubscriber
)
{
String
includeString
=
rosInterface
.
type
;
if
(!
includeString
.
contains
(
"/"
))
{
throw
new
IllegalArgumentException
(
"The ROS msg type has to be given in the form package/msgName!"
);
...
...
@@ -23,7 +23,7 @@ public class ResolveHelper {
ResolvedRosInterface
res
=
new
ResolvedRosInterface
(
topicType
,
rosInterface
.
topic
,
includeString
);
rosInterface
.
ports
.
keySet
().
forEach
(
portName
->
{
PortSymbol
tmpPort
=
component
.
getPort
(
portName
).
EMA
PortSymbol
tmpPort
=
component
.
getPort
Instance
(
portName
).
orElseThrow
(()
->
new
RuntimeException
(
"Port "
+
component
.
getName
()
+
"."
+
portName
+
" not found!"
));
res
.
addPort
(
tmpPort
,
rosInterface
.
ports
.
get
(
portName
));
...
...
@@ -33,7 +33,7 @@ public class ResolveHelper {
public
static
ResolvedRosTag
resolveRosTag
(
RosTag
rosTag
,
Scope
symtab
)
{
E
xpanded
ComponentInstanceSymbol
componentInstanceSymbol
=
symtab
.<
E
xpanded
ComponentInstanceSymbol
>
resolve
(
rosTag
.
component
,
E
xpanded
ComponentInstanceSymbol
.
KIND
)
E
MA
ComponentInstanceSymbol
componentInstanceSymbol
=
symtab
.<
E
MA
ComponentInstanceSymbol
>
resolve
(
rosTag
.
component
,
E
MA
ComponentInstanceSymbol
.
KIND
)
.
orElseThrow
(()
->
new
RuntimeException
(
"Component "
+
rosTag
.
component
+
" could not be found!"
));
ResolvedRosTag
res
=
new
ResolvedRosTag
(
componentInstanceSymbol
);
...
...
src/main/java/de/monticore/lang/monticar/generator/roscpp/helper/TagHelper.java
View file @
8e95f43a
package
de.monticore.lang.monticar.generator.roscpp.helper
;
import
de.monticore.lang.embeddedmontiarc.embeddedmontiarc._symboltable.
Expanded
ComponentInstanceSymbol
;
import
de.monticore.lang.embeddedmontiarc.embeddedmontiarc._symboltable.PortSymbol
;
import
de.monticore.lang.embeddedmontiarc.embeddedmontiarc._symboltable.
instanceStructure.EMA
ComponentInstanceSymbol
;
import
de.monticore.lang.embeddedmontiarc.embeddedmontiarc._symboltable.
cncModel.EMA
PortSymbol
;
import
de.monticore.lang.embeddedmontiarc.tagging.middleware.ros.RosConnectionSymbol
;
import
de.monticore.lang.monticar.generator.roscpp.GeneratorRosCpp
;
import
de.monticore.lang.tagging._symboltable.TagSymbol
;
...
...
@@ -20,9 +20,9 @@ public class TagHelper {
private
TagHelper
()
{
}
public
static
Map
<
PortSymbol
,
RosConnectionSymbol
>
resolveTags
(
TaggingResolver
taggingResolver
,
E
xpanded
ComponentInstanceSymbol
componentInstanceSymbol
)
{
Map
<
PortSymbol
,
RosConnectionSymbol
>
rosConnectionSymbols
=
new
HashMap
<>();
componentInstanceSymbol
.
getPort
s
List
().
forEach
(
p
->
{
public
static
Map
<
EMA
PortSymbol
,
RosConnectionSymbol
>
resolveTags
(
TaggingResolver
taggingResolver
,
E
MA
ComponentInstanceSymbol
componentInstanceSymbol
)
{
Map
<
EMA
PortSymbol
,
RosConnectionSymbol
>
rosConnectionSymbols
=
new
HashMap
<>();
componentInstanceSymbol
.
getPort
Instance
List
().
forEach
(
p
->
{
Collection
<
TagSymbol
>
tmpTags
=
taggingResolver
.
getTags
(
p
,
RosConnectionSymbol
.
KIND
);
if
(
tmpTags
.
size
()
==
1
)
{
rosConnectionSymbols
.
put
(
p
,
(
RosConnectionSymbol
)
tmpTags
.
iterator
().
next
());
...
...
@@ -32,16 +32,16 @@ public class TagHelper {
return
rosConnectionSymbols
;
}
public
static
List
<
File
>
resolveAndGenerate
(
GeneratorRosCpp
generatorRosCpp
,
TaggingResolver
taggingResolver
,
E
xpanded
ComponentInstanceSymbol
componentInstanceSymbol
)
throws
IOException
{
public
static
List
<
File
>
resolveAndGenerate
(
GeneratorRosCpp
generatorRosCpp
,
TaggingResolver
taggingResolver
,
E
MA
ComponentInstanceSymbol
componentInstanceSymbol
)
throws
IOException
{
resolveTags
(
taggingResolver
,
componentInstanceSymbol
);
return
generatorRosCpp
.
generateFiles
(
componentInstanceSymbol
,
taggingResolver
);
}
public
static
boolean
rosConnectionsValid
(
E
xpanded
ComponentInstanceSymbol
instanceSymbol
)
{
public
static
boolean
rosConnectionsValid
(
E
MA
ComponentInstanceSymbol
instanceSymbol
)
{
AtomicBoolean
result
=
new
AtomicBoolean
(
true
);
instanceSymbol
.
getPort
s
List
().
stream
()
.
filter
(
PortSymbol:
:
isRosPort
)
instanceSymbol
.
getPort
Instance
List
().
stream
()
.
filter
(
EMA
PortSymbol:
:
isRosPort
)
.
forEach
(
p
->{
RosConnectionSymbol
rosConnectionSymbol
=
(
RosConnectionSymbol
)
p
.
getMiddlewareSymbol
().
get
();
...
...
src/main/java/de/monticore/lang/monticar/generator/roscpp/helper/YamlHelper.java
View file @
8e95f43a
...
...
@@ -2,8 +2,8 @@ package de.monticore.lang.monticar.generator.roscpp.helper;
import
com.esotericsoftware.yamlbeans.YamlReader
;
import
de.monticar.lang.monticar.generator.python.RosTag
;
import
de.monticore.lang.embeddedmontiarc.embeddedmontiarc._symboltable.
Expanded
ComponentInstanceSymbol
;
import
de.monticore.lang.embeddedmontiarc.embeddedmontiarc._symboltable.PortSymbol
;
import
de.monticore.lang.embeddedmontiarc.embeddedmontiarc._symboltable.
instanceStructure.EMA
ComponentInstanceSymbol
;
import
de.monticore.lang.embeddedmontiarc.embeddedmontiarc._symboltable.
cncModel.EMA
PortSymbol
;
import
de.monticore.lang.embeddedmontiarc.tagging.middleware.ros.RosConnectionSymbol
;
import
de.monticore.lang.monticar.generator.roscpp.GeneratorRosCpp
;
import
de.monticore.lang.monticar.generator.roscpp.ResolvedRosTag
;
...
...
@@ -48,7 +48,7 @@ public class YamlHelper {
}
private
static
void
fixPortSyntax
(
RosTag
rosTag
,
TaggingResolver
symtab
)
{
E
xpanded
ComponentInstanceSymbol
component
=
symtab
.<
E
xpanded
ComponentInstanceSymbol
>
resolve
(
rosTag
.
component
,
E
xpanded
ComponentInstanceSymbol
.
KIND
)
E
MA
ComponentInstanceSymbol
component
=
symtab
.<
E
MA
ComponentInstanceSymbol
>
resolve
(
rosTag
.
component
,
E
MA
ComponentInstanceSymbol
.
KIND
)
.
orElseThrow
(()
->
new
RuntimeException
(
"Component "
+
rosTag
.
component
+
" could not be found!"
));
//[:] syntax
...
...
@@ -69,7 +69,7 @@ public class YamlHelper {
});
}
private
static
Set
<
Pair
<
String
,
String
>>
fixPortWithColonSyntax
(
Map
<
String
,
String
>
portNameToMsgField
,
String
portName
,
E
xpanded
ComponentInstanceSymbol
component
)
{
private
static
Set
<
Pair
<
String
,
String
>>
fixPortWithColonSyntax
(
Map
<
String
,
String
>
portNameToMsgField
,
String
portName
,
E
MA
ComponentInstanceSymbol
component
)
{
assert
(
portName
.
contains
(
"[:]"
));
assert
(
portNameToMsgField
.
containsKey
(
portName
));
...
...
@@ -80,13 +80,13 @@ public class YamlHelper {
// portNameToMsgField.remove(portName);
int
i
=
1
;
PortSymbol
curPort
=
component
.
getPort
(
portName
.
replace
(
"[:]"
,
"["
+
i
+
"]"
))
EMA
PortSymbol
curPort
=
component
.
getPort
Instance
(
portName
.
replace
(
"[:]"
,
"["
+
i
+
"]"
))
.
orElseThrow
(()
->
new
RuntimeException
(
"No Ports matching "
+
portName
+
" found in component "
+
component
.
getName
()));
while
(
curPort
!=
null
)
{
String
curMsgField
=
msgField
.
replace
(
"[:]"
,
"["
+
i
+
"]"
);
res
.
add
(
new
Pair
<>(
curPort
.
getName
(),
curMsgField
));
i
++;
curPort
=
component
.
getPort
(
portName
.
replace
(
"[:]"
,
"["
+
i
+
"]"
)).
orElse
(
null
);
curPort
=
component
.
getPort
Instance
(
portName
.
replace
(
"[:]"
,
"["
+
i
+
"]"
)).
orElse
(
null
);
}
return
res
;
...
...
src/main/java/de/monticore/lang/monticar/generator/roscpp/instructions/AdvertiseInstruction.java
View file @
8e95f43a
package
de.monticore.lang.monticar.generator.roscpp.instructions
;
import
de.monticore.lang.monticar.generator.TargetCodeInstruction
;
import
de.monticore.lang.monticar.generator.Variable
;
import
de.monticore.lang.monticar.generator.
roscpp.util.
TargetCodeInstruction
;
import
de.monticore.lang.monticar.generator.
roscpp.util.
Variable
;
import
java.util.Objects
;
...
...
src/main/java/de/monticore/lang/monticar/generator/roscpp/instructions/CallMethodInstruction.java
View file @
8e95f43a
package
de.monticore.lang.monticar.generator.roscpp.instructions
;
import
de.monticore.lang.monticar.generator.Method
;