Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
48 changes: 27 additions & 21 deletions rosidl_generator_java/resource/action.java.em
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ from rosidl_cmake import expand_template

namespaces = action.namespaced_type.namespaces
type_name = action.namespaced_type.name
fully_qualified_type_name = '.'.join(namespaces + [type_name])
goal_type_name = action.goal.structure.namespaced_type.name
result_type_name = action.result.structure.namespaced_type.name
feedback_type_name = action.feedback.structure.namespaced_type.name
Expand All @@ -25,7 +26,8 @@ data = {
}
data.update({
'message': action.goal,
'marker_interfaces': [f'org.ros2.rcljava.interfaces.GoalDefinition<{type_name}>'],
'imports': ['org.ros2.rcljava.interfaces.GoalDefinition'],
'implements': [f'GoalDefinition<{fully_qualified_type_name}>'],
})
output_file = os.path.join(output_dir, *namespaces[1:], goal_type_name + '.java')
expand_template(
Expand All @@ -36,7 +38,8 @@ expand_template(

data.update({
'message': action.result,
'marker_interfaces': [f'org.ros2.rcljava.interfaces.ResultDefinition<{type_name}>'],
'imports': ['org.ros2.rcljava.interfaces.ResultDefinition'],
'implements': [f'ResultDefinition<{fully_qualified_type_name}>'],
})
output_file = os.path.join(output_dir, *namespaces[1:], result_type_name + '.java')
expand_template(
Expand All @@ -47,7 +50,8 @@ expand_template(

data.update({
'message': action.feedback,
'marker_interfaces': [f'org.ros2.rcljava.interfaces.FeedbackDefinition<{type_name}>'],
'imports': ['org.ros2.rcljava.interfaces.FeedbackDefinition'],
'implements': [f'FeedbackDefinition<{fully_qualified_type_name}>'],
})
output_file = os.path.join(output_dir, *namespaces[1:], feedback_type_name + '.java')
expand_template(
Expand All @@ -58,7 +62,8 @@ expand_template(

data.update({
'message': action.feedback_message,
'marker_interfaces': [],
'imports': [],
'implements': [],
})
output_file = os.path.join(output_dir, *namespaces[1:], feedback_message_type_name + '.java')
expand_template(
Expand All @@ -67,7 +72,8 @@ expand_template(
output_file,
template_basepath=template_basepath)

del data['marker_interfaces']
del data['imports']
del data['implements']
del data['message']
data.update({'service': action.send_goal_service})
output_file = os.path.join(output_dir, *namespaces[1:], send_goal_type_name + '.java')
Expand Down Expand Up @@ -109,13 +115,13 @@ import @(action_import);

public class @(type_name) implements ActionDefinition {

public static class SendGoalRequest extends @(type_name)_SendGoal_Request implements GoalRequestDefinition<@(type_name)> {
public static class SendGoalRequest extends @(type_name)_SendGoal_Request implements GoalRequestDefinition<@(fully_qualified_type_name)> {
public List<Byte> getGoalUuid() {
return super.getGoalId().getUuidAsList();
}
}

public static class SendGoalResponse extends @(type_name)_SendGoal_Response implements GoalResponseDefinition<@(type_name)> {
public static class SendGoalResponse extends @(type_name)_SendGoal_Response implements GoalResponseDefinition<@(fully_qualified_type_name)> {
public void accept(boolean accepted) {
super.setAccepted(accepted);
}
Expand All @@ -128,63 +134,63 @@ public class @(type_name) implements ActionDefinition {
}
}

public static class GetResultRequest extends @(type_name)_GetResult_Request implements ResultRequestDefinition<@(type_name)> {
public static class GetResultRequest extends @(type_name)_GetResult_Request implements ResultRequestDefinition<@(fully_qualified_type_name)> {
public List<Byte> getGoalUuid() {
return super.getGoalId().getUuidAsList();
}
}

public static class GetResultResponse extends @(type_name)_GetResult_Response implements ResultResponseDefinition<@(type_name)> {
public void setResult(ResultDefinition<@(type_name)> result) {
public static class GetResultResponse extends @(type_name)_GetResult_Response implements ResultResponseDefinition<@(fully_qualified_type_name)> {
public void setResult(ResultDefinition<@(fully_qualified_type_name)> result) {
super.setResult((@(type_name)_Result)result);
}
public void setGoalStatus(byte status) {
super.setStatus(status);
}
}

public static class FeedbackMessage extends @(type_name)_FeedbackMessage implements FeedbackMessageDefinition<@(type_name)> {
public void setFeedback(FeedbackDefinition<@(type_name)> feedback) {
public static class FeedbackMessage extends @(type_name)_FeedbackMessage implements FeedbackMessageDefinition<@(fully_qualified_type_name)> {
public void setFeedback(FeedbackDefinition<@(fully_qualified_type_name)> feedback) {
super.setFeedback((@(type_name)_Feedback) feedback);
}
public void setGoalUuid(List<Byte> goalUuid) {
super.getGoalId().setUuid(goalUuid);
}
}

public Class<? extends GoalRequestDefinition<@(type_name)>> getSendGoalRequestType() {
public Class<? extends GoalRequestDefinition<@(fully_qualified_type_name)>> getSendGoalRequestType() {
return SendGoalRequest.class;
}

public Class<? extends GoalResponseDefinition<@(type_name)>> getSendGoalResponseType() {
public Class<? extends GoalResponseDefinition<@(fully_qualified_type_name)>> getSendGoalResponseType() {
return SendGoalResponse.class;
}

public Class<? extends ResultRequestDefinition<@(type_name)>> getGetResultRequestType() {
public Class<? extends ResultRequestDefinition<@(fully_qualified_type_name)>> getGetResultRequestType() {
return GetResultRequest.class;
}

public Class<? extends ResultResponseDefinition<@(type_name)>> getGetResultResponseType() {
public Class<? extends ResultResponseDefinition<@(fully_qualified_type_name)>> getGetResultResponseType() {
return GetResultResponse.class;
}

public Class<? extends ResultDefinition<@(type_name)>> getResultType() {
public Class<? extends ResultDefinition<@(fully_qualified_type_name)>> getResultType() {
return @(type_name)_Result.class;
}

public Class<? extends FeedbackDefinition<@(type_name)>> getFeedbackType() {
public Class<? extends FeedbackDefinition<@(fully_qualified_type_name)>> getFeedbackType() {
return @(type_name)_Feedback.class;
}

public Class<? extends FeedbackMessageDefinition<@(type_name)>> getFeedbackMessageType() {
public Class<? extends FeedbackMessageDefinition<@(fully_qualified_type_name)>> getFeedbackMessageType() {
return FeedbackMessage.class;
}

private static final Logger logger = LoggerFactory.getLogger(@(type_name).class);
private static final Logger logger = LoggerFactory.getLogger(@(fully_qualified_type_name).class);

static {
try {
JNIUtils.loadTypesupport(@(type_name).class);
JNIUtils.loadTypesupport(@(fully_qualified_type_name).class);
} catch (UnsatisfiedLinkError ule) {
logger.error("Native code library failed to load.\n" + ule);
System.exit(1);
Expand Down
3 changes: 2 additions & 1 deletion rosidl_generator_java/resource/idl.java.em
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,8 @@ data = {
'interface_path': interface_path,
'output_dir': output_dir,
'template_basepath': template_basepath,
'marker_interfaces': [],
'imports': [],
'implements': [],
}

for message in content.get_elements_of_type(Message):
Expand Down
5 changes: 2 additions & 3 deletions rosidl_generator_java/resource/msg.java.em
Original file line number Diff line number Diff line change
Expand Up @@ -17,8 +17,7 @@ from rosidl_parser.definition import BoundedSequence
from rosidl_parser.definition import NamespacedType

type_name = message.structure.namespaced_type.name
interfaces_implemented = ['MessageDefinition']
interfaces_implemented.extend(f"{t.rsplit('.', 1)[1]}" for t in marker_interfaces)
interfaces_implemented = ['MessageDefinition'] + implements
interfaces_implemented = ', '.join(interfaces_implemented)

message_imports = [
Expand All @@ -29,7 +28,7 @@ message_imports = [
'org.slf4j.Logger',
'org.slf4j.LoggerFactory',
]
message_imports.extend(f"{t.split('<', 1)[0]}" for t in marker_interfaces)
message_imports.extend(imports)
}@
@[for message_import in message_imports]@
import @(message_import);
Expand Down
3 changes: 2 additions & 1 deletion rosidl_generator_java/resource/srv.java.em
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,8 @@ data = {
'interface_path': interface_path,
'output_dir': output_dir,
'template_basepath': template_basepath,
'marker_interfaces': [],
'imports': [],
'implements': [],
}
data.update({'message': service.request_message})
output_file = os.path.join(output_dir, *namespaces[1:], request_type_name + '.java')
Expand Down
1 change: 1 addition & 0 deletions test_rosidl_generator_java/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ if(BUILD_TESTING)
${test_interface_files_MSG_FILES}
${test_interface_files_SRV_FILES}
action/BasicTypes.action
action/Nested.action
SKIP_INSTALL
)

Expand Down
5 changes: 5 additions & 0 deletions test_rosidl_generator_java/action/Nested.action
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
Nested nested_value
---
Nested nested_value
---
Nested nested_value
Original file line number Diff line number Diff line change
Expand Up @@ -1187,4 +1187,34 @@ public final void testBasicTypesAction() {
assertEquals(expectedInt643, basicTypesResult.getInt64Value());
}

@Test
public final void testNestedAction() {
test_rosidl_generator_java.action.Nested_Goal nestedGoal =
new test_rosidl_generator_java.action.Nested_Goal();
test_rosidl_generator_java.action.Nested_Feedback nestedFeedback =
new test_rosidl_generator_java.action.Nested_Feedback();
test_rosidl_generator_java.action.Nested_Result nestedResult =
new test_rosidl_generator_java.action.Nested_Result();

// Set goal field
int expectedInt32Goal = 123;
nestedGoal.getNestedValue().getBasicTypesValue().setInt32Value(expectedInt32Goal);

// Set feedback field
int expectedInt32Feedback = 231;
nestedFeedback.getNestedValue().getBasicTypesValue().setInt32Value(expectedInt32Feedback);

// Set result field
int expectedInt32Result = 132;
nestedResult.getNestedValue().getBasicTypesValue().setInt32Value(expectedInt32Result);

// Get fields
assertEquals(
expectedInt32Goal, nestedGoal.getNestedValue().getBasicTypesValue().getInt32Value());
assertEquals(
expectedInt32Feedback, nestedFeedback.getNestedValue().getBasicTypesValue().getInt32Value());
assertEquals(
expectedInt32Result, nestedResult.getNestedValue().getBasicTypesValue().getInt32Value());
}

}