From 21a1e27e84d9d7e1565363b79c28577cdcf0f369 Mon Sep 17 00:00:00 2001 From: pluris Date: Fri, 20 Nov 2020 14:16:45 +0900 Subject: [PATCH 1/4] change logic(list -> array) in msg.java.em --- rosidl_generator_java/resource/msg.java.em | 28 ++++++++-------------- 1 file changed, 10 insertions(+), 18 deletions(-) diff --git a/rosidl_generator_java/resource/msg.java.em b/rosidl_generator_java/resource/msg.java.em index cb6e1b3a..9c14977f 100644 --- a/rosidl_generator_java/resource/msg.java.em +++ b/rosidl_generator_java/resource/msg.java.em @@ -80,22 +80,24 @@ public final class @(type_name) implements MessageDefinition { @[ if isinstance(member.type, AbstractNestedType)]@ @[ if member.has_annotation('default')]@ - private java.util.List<@(get_java_type(member.type, use_primitives=False))> @(member.name) = java.util.Arrays.asList(new @(get_java_type(member.type, use_primitives=False))[] @(value_to_java(member.type, member.get_annotation_value('default')['value']))); + private @(get_java_type(member.type))[] @(member.name) = new @(get_java_type(member.type))[] @(value_to_java(member.type, member.get_annotation_value('default')['value'])); @[ else]@ @[ if isinstance(member.type, Array)]@ - private java.util.List<@(get_java_type(member.type, use_primitives=False))> @(member.name); + private @(get_java_type(member.type))[] @(member.name) = new @(get_java_type(member.type))[@(member.type.size)]; +@[ elif isinstance(member.type, BoundedSequence)]@ + private @(get_java_type(member.type))[] @(member.name) = new @(get_java_type(member.type))[]{}; @[ else]@ - private java.util.List<@(get_java_type(member.type, use_primitives=False))> @(member.name) = new java.util.ArrayList<@(get_java_type(member.type, use_primitives=False))>(); + private @(get_java_type(member.type))[] @(member.name); @[ end if]@ @[ end if]@ - public final @(type_name) set@(convert_lower_case_underscore_to_camel_case(member.name))(final java.util.List<@(get_java_type(member.type, use_primitives=False))> @(member.name)) { + public final @(type_name) set@(convert_lower_case_underscore_to_camel_case(member.name))(final @(get_java_type(member.type))[] @(member.name)) { @[ if isinstance(member.type, BoundedSequence)]@ - if(@(member.name).size() > @(member.type.maximum_size)) { - throw new IllegalArgumentException("List too big, maximum size allowed: @(member.type.maximum_size)"); + if(@(member.name).length > @(member.type.maximum_size)) { + throw new IllegalArgumentException("Array too big, maximum size allowed: @(member.type.maximum_size)"); } @[ elif isinstance(member.type, Array)]@ - if(@(member.name).size() != @(member.type.size)) { + if(@(member.name).length != @(member.type.size)) { throw new IllegalArgumentException("Invalid size for fixed array, must be exactly: @(member.type.size)"); } @[ end if]@ @@ -103,17 +105,7 @@ public final class @(type_name) implements MessageDefinition { return this; } -@[ if isinstance(member.type.value_type, (BasicType, AbstractGenericString))]@ - public final @(type_name) set@(convert_lower_case_underscore_to_camel_case(member.name))(final @(get_java_type(member.type, use_primitives=True))[] @(member.name)) { - java.util.List<@(get_java_type(member.type, use_primitives=False))> @(member.name)_tmp = new java.util.ArrayList<@(get_java_type(member.type, use_primitives=False))>(); - for(@(get_java_type(member.type, use_primitives=True)) @(member.name)_value : @(member.name)) { - @(member.name)_tmp.add(@(member.name)_value); - } - return set@(convert_lower_case_underscore_to_camel_case(member.name))(@(member.name)_tmp); - } -@[ end if]@ - - public final java.util.List<@(get_java_type(member.type, use_primitives=False))> get@(convert_lower_case_underscore_to_camel_case(member.name))() { + public final @(get_java_type(member.type))[] get@(convert_lower_case_underscore_to_camel_case(member.name))() { return this.@(member.name); } @[ else]@ From c697390a619a2d72d718035626b4a86ecff7af1d Mon Sep 17 00:00:00 2001 From: pluris Date: Fri, 20 Nov 2020 14:16:56 +0900 Subject: [PATCH 2/4] change logic(list -> array) in msg.cpp.em --- rosidl_generator_java/resource/msg.cpp.em | 179 ++++++++++++---------- 1 file changed, 100 insertions(+), 79 deletions(-) diff --git a/rosidl_generator_java/resource/msg.cpp.em b/rosidl_generator_java/resource/msg.cpp.em index 9c868e60..5b6b8f86 100644 --- a/rosidl_generator_java/resource/msg.cpp.em +++ b/rosidl_generator_java/resource/msg.cpp.em @@ -22,15 +22,6 @@ from rosidl_parser.definition import NamespacedType msg_normalized_type = '__'.join(message.structure.namespaced_type.namespaced_name()) msg_jni_type = '/'.join(message.structure.namespaced_type.namespaced_name()) -list_java_type = "java.util.List" -array_list_java_type = "java.util.ArrayList" - -list_normalized_type = "java__util__List" -list_jni_type = "java/util/List" - -array_list_normalized_type = "java__util__ArrayList" -array_list_jni_type = "java/util/ArrayList" - # Collect JNI types and includes cache = defaultdict(lambda: False) cache[msg_normalized_type] = msg_jni_type @@ -39,8 +30,6 @@ member_includes = set() for member in message.structure.members: type_ = member.type if isinstance(type_, AbstractNestedType): - cache[list_normalized_type] = list_jni_type - cache[array_list_normalized_type] = array_list_jni_type type_ = type_.value_type if isinstance(type_, BasicType): member_includes.add('rosidl_generator_c/primitives_sequence.h') @@ -210,32 +199,51 @@ JNIEXPORT jlong JNICALL Java_@(underscore_separated_jni_type_name)_getDestructor } @[for member in message.structure.members]@ @{ -normalized_type = get_normalized_type(member.type) +if isinstance(member.type, AbstractNestedType): + normalized_type = get_normalized_type(member.type.value_type) + get_java_name = get_java_type(member.type.value_type, use_primitives=True) + get_method_name = get_java_type(member.type.value_type, use_primitives=True).capitalize() + jni_signature = get_jni_signature(member.type.value_type) +else: + normalized_type = get_normalized_type(member.type) + get_java_name = get_java_type(member.type, use_primitives=True) + get_method_name = get_java_type(member.type, use_primitives=True).capitalize() + jni_signature = get_jni_signature(member.type) }@ @[ if isinstance(member.type, AbstractNestedType)] - auto _jfield_@(member.name)_fid = env->GetFieldID(_j@(msg_normalized_type)_class_global, "@(member.name)", "L@(list_jni_type);"); - jobject _jlist_@(member.name)_object = env->GetObjectField(_jmessage_obj, _jfield_@(member.name)_fid); +@[ if isinstance(member.type.value_type, BasicType)]@ + auto _jfield_@(member.name)_fid = env->GetFieldID(_j@(msg_normalized_type)_class_global, "@(member.name)", "[@(jni_signature)"); + j@(get_java_name)Array _jarray_@(member.name)_obj = (j@(get_java_name)Array)env->GetObjectField(_jmessage_obj, _jfield_@(member.name)_fid); +@[ elif isinstance(member.type.value_type, AbstractGenericString)]@ + auto _jfield_@(member.name)_fid = env->GetFieldID(_j@(msg_normalized_type)_class_global, "@(member.name)", "[Ljava/lang/String;"); + jobjectArray _jarray_@(member.name)_obj = (jobjectArray)env->GetObjectField(_jmessage_obj, _jfield_@(member.name)_fid); +@[ else]@ + auto _jfield_@(member.name)_fid = env->GetFieldID(_j@(msg_normalized_type)_class_global, "@(member.name)", "[L@('/'.join(member.type.value_type.namespaced_name()));"); + jobjectArray _jarray_@(member.name)_obj = (jobjectArray)env->GetObjectField(_jmessage_obj, _jfield_@(member.name)_fid); +@[ end if]@ - if (_jlist_@(member.name)_object != nullptr) { - jmethodID _jlist_@(member.name)_get_mid = env->GetMethodID(_j@(list_normalized_type)_class_global, "get", "(I)Ljava/lang/Object;"); + if (_jarray_@(member.name)_obj != nullptr) { @[ if isinstance(member.type, AbstractSequence)]@ - jmethodID _jlist_@(member.name)_size_mid = env->GetMethodID(_j@(list_normalized_type)_class_global, "size", "()I"); - jint _jlist_@(member.name)_size = env->CallIntMethod(_jlist_@(member.name)_object, _jlist_@(member.name)_size_mid); +@[ if isinstance(member.type, Array)]@ + jint _jarray_@(member.name)_size = @(member.type.size); +@[ else]@ + jint _jarray_@(member.name)_size = env->GetArrayLength(_jarray_@(member.name)_obj); +@[ end if]@ @[ if isinstance(member.type.value_type, AbstractString)]@ - if (!rosidl_generator_c__String__Sequence__init(&(ros_message->@(member.name)), _jlist_@(member.name)_size)) { + if (!rosidl_generator_c__String__Sequence__init(&(ros_message->@(member.name)), _jarray_@(member.name)_size)) { rcljava_throw_exception(env, "java/lang/IllegalStateException", "unable to create String__Array ros_message"); } @[ elif isinstance(member.type.value_type, AbstractWString)]@ - if (!rosidl_generator_c__U16String__Sequence__init(&(ros_message->@(member.name)), _jlist_@(member.name)_size)) { + if (!rosidl_generator_c__U16String__Sequence__init(&(ros_message->@(member.name)), _jarray_@(member.name)_size)) { rcljava_throw_exception(env, "java/lang/IllegalStateException", "unable to create U16String__Array ros_message"); } @[ else]@ @[ if isinstance(member.type.value_type, BasicType)]@ - if (!rosidl_generator_c__@(member.type.value_type.typename)__Sequence__init(&(ros_message->@(member.name)), _jlist_@(member.name)_size)) { + if (!rosidl_generator_c__@(member.type.value_type.typename)__Sequence__init(&(ros_message->@(member.name)), _jarray_@(member.name)_size)) { rcljava_throw_exception(env, "java/lang/IllegalStateException", "unable to create @(member.type.value_type)__Array ros_message"); } @[ else]@ - if (!@('__'.join(member.type.value_type.namespaced_name()))__Sequence__init(&(ros_message->@(member.name)), _jlist_@(member.name)_size)) { + if (!@('__'.join(member.type.value_type.namespaced_name()))__Sequence__init(&(ros_message->@(member.name)), _jarray_@(member.name)_size)) { rcljava_throw_exception(env, "java/lang/IllegalStateException", "unable to create @(member.type.value_type)__Array ros_message"); } @@ -243,39 +251,40 @@ normalized_type = get_normalized_type(member.type) @[ end if]@ auto _dest_@(member.name) = ros_message->@(member.name).data; @[ else]@ - jint _jlist_@(member.name)_size = @(member.type.size); + jint _jarray_@(member.name)_size = @(member.type.size); auto _dest_@(member.name) = ros_message->@(member.name); @[ end if]@ - - for (jint i = 0; i < _jlist_@(member.name)_size; ++i) { - auto element = env->CallObjectMethod(_jlist_@(member.name)_object, _jlist_@(member.name)_get_mid, i); -@[ if isinstance(member.type.value_type, AbstractString)]@ +@[ if isinstance(member.type.value_type, BasicType)]@ + j@(get_java_name) *_jarray_@(member.name)_ptr = env->Get@(get_method_name)ArrayElements(_jarray_@(member.name)_obj, nullptr); + std::copy(_jarray_@(member.name)_ptr, _jarray_@(member.name)_ptr + _jarray_@(member.name)_size, _dest_@(member.name)); + env->Release@(get_method_name)ArrayElements(_jarray_@(member.name)_obj, _jarray_@(member.name)_ptr, 0); +@[ else]@ + for (jint i = 0; i < _jarray_@(member.name)_size; ++i) { + auto element = env->GetObjectArrayElement(_jarray_@(member.name)_obj, i); +@[ if isinstance(member.type.value_type, AbstractString)]@ jstring _jfield_@(member.name)_value = static_cast(element); if (_jfield_@(member.name)_value != nullptr) { - const char * _str@(member.name) = env->GetStringUTFChars(_jfield_@(member.name)_value, 0); + const char * _str_@(member.name) = env->GetStringUTFChars(_jfield_@(member.name)_value, 0); rosidl_generator_c__String__assign( - &_dest_@(member.name)[i], _str@(member.name)); - env->ReleaseStringUTFChars(_jfield_@(member.name)_value, _str@(member.name)); + &_dest_@(member.name)[i], _str_@(member.name)); + env->ReleaseStringUTFChars(_jfield_@(member.name)_value, _str_@(member.name)); } -@[ elif isinstance(member.type.value_type, AbstractWString)]@ +@[ elif isinstance(member.type.value_type, AbstractWString)]@ jstring _jfield_@(member.name)_value = static_cast(element); if (_jfield_@(member.name)_value != nullptr) { - const jchar * _str@(member.name) = env->GetStringChars(_jfield_@(member.name)_value, 0); + const jchar * _str_@(member.name) = env->GetStringChars(_jfield_@(member.name)_value, 0); rosidl_generator_c__U16String__assign( - &_dest_@(member.name)[i], _str@(member.name)); - env->ReleaseStringChars(_jfield_@(member.name)_value, _str@(member.name)); + &_dest_@(member.name)[i], _str_@(member.name)); + env->ReleaseStringChars(_jfield_@(member.name)_value, _str_@(member.name)); } -@[ elif isinstance(member.type.value_type, BasicType)]@ -@{ -call_method_name = 'Call%sMethod' % get_java_type(member.type.value_type, use_primitives=True).capitalize() -}@ - _dest_@(member.name)[i] = env->@(call_method_name)(element, _j@(normalized_type)_value_global); -@[ else]@ +@[ else]@ _dest_@(member.name)[i] = *_j@(normalized_type)_from_java_function(element, nullptr); -@[ end if]@ +@[ end if]@ env->DeleteLocalRef(element); } +@[ end if]@ + env->DeleteLocalRef(_jarray_@(member.name)_obj); } @[ else]@ @[ if isinstance(member.type, AbstractGenericString)]@ @@ -339,62 +348,74 @@ jobject @(underscore_separated_type_name)__convert_to_java(@(msg_normalized_type } @[for member in message.structure.members]@ @{ -normalized_type = get_normalized_type(member.type) +if isinstance(member.type, AbstractNestedType): + normalized_type = get_normalized_type(member.type.value_type) + get_java_name = get_java_type(member.type.value_type, use_primitives=True) + get_method_name = get_java_type(member.type.value_type, use_primitives=True).capitalize() + jni_signature = get_jni_signature(member.type.value_type) +else: + normalized_type = get_normalized_type(member.type) + get_java_name = get_java_type(member.type, use_primitives=True) + get_method_name = get_java_type(member.type, use_primitives=True).capitalize() + jni_signature = get_jni_signature(member.type) }@ @[ if isinstance(member.type, AbstractNestedType)]@ @[ if isinstance(member.type.value_type, (BasicType, AbstractGenericString))]@ - auto _jfield_@(member.name)_fid = env->GetFieldID(_j@(msg_normalized_type)_class_global, "@(member.name)", "L@(list_jni_type);"); - jobject _jarray_list_@(member.name)_obj = env->NewObject(_j@(array_list_normalized_type)_class_global, _j@(array_list_normalized_type)_constructor_global); + auto _jfield_@(member.name)_fid = env->GetFieldID(_j@(msg_normalized_type)_class_global, "@(member.name)", "[@(jni_signature)"); +@[ else]@ + auto _jfield_@(member.name)_fid = env->GetFieldID(_j@(msg_normalized_type)_class_global, "@(member.name)", "[L@('/'.join(member.type.value_type.namespaced_name()));"); +@[ end if]@ + +@[ if isinstance(member.type.value_type, BasicType)]@ @[ if isinstance(member.type, Array)]@ - for (size_t i = 0; i < @(member.type.size); ++i) { + j@(get_java_name)Array _jarray_@(member.name)_obj = env->New@(get_method_name)Array(@(member.type.size)); + j@(get_java_name) *_j@(get_java_name)_@(member.name)_buf = (j@(get_java_name) *)malloc(sizeof(j@(get_java_name)) * @(member.type.size)); + std::copy(_ros_message->@(member.name), _ros_message->@(member.name) + @(member.type.size), _j@(get_java_name)_@(member.name)_buf); + env->Set@(get_method_name)ArrayRegion(_jarray_@(member.name)_obj, 0, @(member.type.size), (const j@(get_java_name) *)_j@(get_java_name)_@(member.name)_buf); +@[ else]@ + j@(get_java_name)Array _jarray_@(member.name)_obj = env->New@(get_method_name)Array(_ros_message->@(member.name).size); + j@(get_java_name) *_j@(get_java_name)_@(member.name)_buf = (j@(get_java_name) *)malloc(sizeof(j@(get_java_name)) * _ros_message->@(member.name).size); + std::copy(_ros_message->@(member.name).data, _ros_message->@(member.name).data + _ros_message->@(member.name).size, _j@(get_java_name)_@(member.name)_buf); + env->Set@(get_method_name)ArrayRegion(_jarray_@(member.name)_obj, 0, _ros_message->@(member.name).size, (const j@(get_java_name) *)_j@(get_java_name)_@(member.name)_buf); +@[ end if]@ + free(_j@(get_java_name)_@(member.name)_buf); +@[ elif isinstance(member.type.value_type, AbstractGenericString)]@ +@[ if isinstance(member.type, Array)]@ + jobjectArray _jarray_@(member.name)_obj = (jobjectArray)env->NewObjectArray(@(member.type.size), env->FindClass("java/lang/String"), NULL); + for (size_t i = 0; i < @(member.type.size); i++) { auto _ros_@(member.name)_element = _ros_message->@(member.name)[i]; @[ else]@ - for (size_t i = 0; i < _ros_message->@(member.name).size; ++i) { + jobjectArray _jarray_@(member.name)_obj = (jobjectArray)env->NewObjectArray(_ros_message->@(member.name).size, env->FindClass("java/lang/String"), NULL); + for (size_t i = 0; i < _ros_message->@(member.name).size; i++) { auto _ros_@(member.name)_element = _ros_message->@(member.name).data[i]; @[ end if]@ -@[ if isinstance(member.type.value_type, AbstractGenericString)]@ - jobject _jlist_@(member.name)_element = nullptr; + jstring _jarray_@(member.name)_element = nullptr; if (_ros_@(member.name)_element.data != nullptr) { -@[ if isinstance(member.type.value_type, AbstractString)]@ - _jlist_@(member.name)_element = env->NewStringUTF(_ros_@(member.name)_element.data); -@[ else]@ - _jlist_@(member.name)_element = env->NewString(_ros_@(member.name)_element.data, _ros_@(member.name)_element.size); -@[ end if]@ - } +@[ if isinstance(member.type.value_type, AbstractString)]@ + _jarray_@(member.name)_element = env->NewStringUTF(_ros_@(member.name)_element.data); @[ else]@ - jobject _jlist_@(member.name)_element = env->NewObject( - _j@(normalized_type)_class_global, _j@(normalized_type)_constructor_global, _ros_@(member.name)_element); -@[ end if]@ - // TODO(esteve): replace ArrayList with a jobjectArray to initialize the array beforehand - jmethodID _jlist_@(member.name)_add_mid = env->GetMethodID( - _j@(array_list_normalized_type)_class_global, "add", "(Ljava/lang/Object;)Z"); - if (_jlist_@(member.name)_element != nullptr) { - jboolean _jlist_@(member.name)_add_result = env->CallBooleanMethod(_jarray_list_@(member.name)_obj, _jlist_@(member.name)_add_mid, _jlist_@(member.name)_element); - assert(_jlist_@(member.name)_add_result); + _jarray_@(member.name)_element = env->NewString(_ros_@(member.name)_element.data, _ros_@(member.name)_element.size); +@[ end if]@ } + env->SetObjectArrayElement(_jarray_@(member.name)_obj, i, _jarray_@(member.name)_element); + env->DeleteLocalRef(_jarray_@(member.name)_element); } @[ else]@ - - auto _jfield_@(member.name)_fid = env->GetFieldID(_j@(msg_normalized_type)_class_global, "@(member.name)", "L@(list_jni_type);"); - jobject _jarray_list_@(member.name)_obj = env->NewObject(_j@(array_list_normalized_type)_class_global, _j@(array_list_normalized_type)_constructor_global); - @[ if isinstance(member.type, Array)]@ - for (size_t i = 0; i < @(member.type.size); ++i) { - jobject _jlist_@(member.name)_element = _j@(normalized_type)_to_java_function(&(_ros_message->@(member.name)[i]), nullptr); + jobjectArray _jarray_@(member.name)_obj = (jobjectArray)env->NewObjectArray(@(member.type.size), _j@(normalized_type)_class_global, NULL); + for (size_t i = 0; i < @(member.type.size); i++) { + jobject _jarray_@(member.name)_element = _j@(normalized_type)_to_java_function(&(_ros_message->@(member.name)[i]), nullptr); @[ else]@ - for (size_t i = 0; i < _ros_message->@(member.name).size; ++i) { - jobject _jlist_@(member.name)_element = _j@(normalized_type)_to_java_function(&(_ros_message->@(member.name).data[i]), nullptr); + jobjectArray _jarray_@(member.name)_obj = (jobjectArray)env->NewObjectArray(_ros_message->@(member.name).size, _j@(normalized_type)_class_global, NULL); + for (size_t i = 0; i < _ros_message->@(member.name).size; i++) { + jobject _jarray_@(member.name)_element = _j@(normalized_type)_to_java_function(&(_ros_message->@(member.name).data[i]), nullptr); @[ end if]@ - // TODO(esteve): replace ArrayList with a jobjectArray to initialize the array beforehand - jmethodID _jlist_@(member.name)_add_mid = env->GetMethodID(_j@(array_list_normalized_type)_class_global, "add", "(Ljava/lang/Object;)Z"); - if (_jlist_@(member.name)_element != nullptr) { - jboolean _jlist_@(member.name)_add_result = env->CallBooleanMethod(_jarray_list_@(member.name)_obj, _jlist_@(member.name)_add_mid, _jlist_@(member.name)_element); - assert(_jlist_@(member.name)_add_result); - } + env->SetObjectArrayElement(_jarray_@(member.name)_obj, i, _jarray_@(member.name)_element); + env->DeleteLocalRef(_jarray_@(member.name)_element); } @[ end if]@ - env->SetObjectField(_jmessage_obj, _jfield_@(member.name)_fid, _jarray_list_@(member.name)_obj); - env->DeleteLocalRef(_jarray_list_@(member.name)_obj); + env->SetObjectField(_jmessage_obj, _jfield_@(member.name)_fid, _jarray_@(member.name)_obj); + env->DeleteLocalRef(_jarray_@(member.name)_obj); @[ else]@ @[ if isinstance(member.type, AbstractGenericString)]@ auto _jfield_@(member.name)_fid = env->GetFieldID(_j@(msg_normalized_type)_class_global, "@(member.name)", "Ljava/lang/String;"); From 779092399c379645c5c30ebde53cf99bd64aabb4 Mon Sep 17 00:00:00 2001 From: pluris Date: Wed, 25 Nov 2020 14:48:39 +0900 Subject: [PATCH 3/4] change logic(list -> array) in rcljava --- .../main/java/org/ros2/rcljava/node/Node.java | 12 +-- .../java/org/ros2/rcljava/node/NodeImpl.java | 41 +++++---- .../rcljava/parameters/ParameterVariant.java | 6 +- .../client/AsyncParametersClient.java | 40 ++++----- .../client/AsyncParametersClientImpl.java | 83 ++++++++++--------- .../client/SyncParametersClient.java | 16 ++-- .../client/SyncParametersClientImpl.java | 34 ++++---- .../service/ParameterServiceImpl.java | 28 ++++--- 8 files changed, 134 insertions(+), 126 deletions(-) diff --git a/rcljava/src/main/java/org/ros2/rcljava/node/Node.java b/rcljava/src/main/java/org/ros2/rcljava/node/Node.java index 0a3ba7ad..07cad1f1 100644 --- a/rcljava/src/main/java/org/ros2/rcljava/node/Node.java +++ b/rcljava/src/main/java/org/ros2/rcljava/node/Node.java @@ -175,15 +175,15 @@ Client createClient(final Class serviceType, String getName(); - List getParameters(List names); + ParameterVariant[] getParameters(String[] names); - List getParameterTypes(List names); + ParameterType[] getParameterTypes(String[] names); - List setParameters(List parameters); + rcl_interfaces.msg.SetParametersResult[] setParameters(ParameterVariant[] parameters); - rcl_interfaces.msg.SetParametersResult setParametersAtomically(List parameters); + rcl_interfaces.msg.SetParametersResult setParametersAtomically(ParameterVariant[] parameters); - List describeParameters(List names); + rcl_interfaces.msg.ParameterDescriptor[] describeParameters(String[] names); - rcl_interfaces.msg.ListParametersResult listParameters(List prefixes, long depth); + rcl_interfaces.msg.ListParametersResult listParameters(String[] prefixes, long depth); } diff --git a/rcljava/src/main/java/org/ros2/rcljava/node/NodeImpl.java b/rcljava/src/main/java/org/ros2/rcljava/node/NodeImpl.java index 9fdc1c27..29214690 100644 --- a/rcljava/src/main/java/org/ros2/rcljava/node/NodeImpl.java +++ b/rcljava/src/main/java/org/ros2/rcljava/node/NodeImpl.java @@ -50,6 +50,7 @@ import java.lang.reflect.Method; import java.util.ArrayList; +import java.util.Arrays; import java.util.Collection; import java.util.List; import java.util.Map; @@ -401,7 +402,7 @@ public final String getName() { return this.name; } - public List getParameters(List names) { + public ParameterVariant[] getParameters(String[] names) { synchronized (mutex) { List results = new ArrayList(); for (String name : names) { @@ -411,11 +412,11 @@ public List getParameters(List names) { } } } - return results; + return (ParameterVariant[])results.toArray(); } } - public List getParameterTypes(List names) { + public ParameterType[] getParameterTypes(String[] names) { synchronized (mutex) { List results = new ArrayList(); for (String name : names) { @@ -427,24 +428,24 @@ public List getParameterTypes(List names) { } } } - return results; + return (ParameterType[])results.toArray(); } } - public List setParameters( - List parameters) { + public rcl_interfaces.msg.SetParametersResult[] setParameters( + ParameterVariant[] parameters) { List results = new ArrayList(); for (ParameterVariant p : parameters) { rcl_interfaces.msg.SetParametersResult result = - this.setParametersAtomically(java.util.Arrays.asList(new ParameterVariant[] {p})); + this.setParametersAtomically(new ParameterVariant[] {p}); results.add(result); } - return results; + return (rcl_interfaces.msg.SetParametersResult[])results.toArray(); } public rcl_interfaces.msg.SetParametersResult setParametersAtomically( - List parameters) { + ParameterVariant[] parameters) { synchronized (mutex) { rcl_interfaces.msg.SetParametersResult result = new rcl_interfaces.msg.SetParametersResult(); for (ParameterVariant p : parameters) { @@ -455,8 +456,8 @@ public rcl_interfaces.msg.SetParametersResult setParametersAtomically( } } - public List describeParameters( - List names) { + public rcl_interfaces.msg.ParameterDescriptor[] describeParameters( + String[] names) { synchronized (mutex) { List results = new ArrayList(); @@ -471,20 +472,22 @@ public List describeParameters( } } } - return results; + return (rcl_interfaces.msg.ParameterDescriptor[])results.toArray(); } } public rcl_interfaces.msg.ListParametersResult listParameters( - List prefixes, long depth) { + String[] prefixes, long depth) { synchronized (mutex) { rcl_interfaces.msg.ListParametersResult result = new rcl_interfaces.msg.ListParametersResult(); String separator = "."; + List resultNames = Arrays.asList(result.getNames()); + List resultPrefixes = Arrays.asList(result.getPrefixes()); for (Map.Entry entry : this.parameters.entrySet()) { boolean getAll = - (prefixes.size() == 0) + (prefixes.length == 0) && ((depth == rcl_interfaces.srv.ListParameters_Request.DEPTH_RECURSIVE) || ((entry.getKey().length() - entry.getKey().replace(separator, "").length()) < depth)); @@ -502,16 +505,20 @@ public rcl_interfaces.msg.ListParametersResult listParameters( } } if (getAll || prefixMatches) { - result.getNames().add(entry.getKey()); + resultNames.add(entry.getKey()); int lastSeparator = entry.getKey().lastIndexOf(separator); if (-1 != lastSeparator) { String prefix = entry.getKey().substring(0, lastSeparator); - if (!result.getPrefixes().contains(prefix)) { - result.getPrefixes().add(prefix); + if (!resultPrefixes.contains(prefix)) { + resultPrefixes.add(prefix); } } } } + + result.setNames((String[])resultNames.toArray()); + result.setPrefixes((String[])resultPrefixes.toArray()); + return result; } } diff --git a/rcljava/src/main/java/org/ros2/rcljava/parameters/ParameterVariant.java b/rcljava/src/main/java/org/ros2/rcljava/parameters/ParameterVariant.java index aa274fb9..0d2b05d6 100644 --- a/rcljava/src/main/java/org/ros2/rcljava/parameters/ParameterVariant.java +++ b/rcljava/src/main/java/org/ros2/rcljava/parameters/ParameterVariant.java @@ -15,8 +15,6 @@ package org.ros2.rcljava.parameters; -import java.util.Arrays; -import java.util.List; import org.apache.commons.lang3.builder.EqualsBuilder; import org.apache.commons.lang3.builder.HashCodeBuilder; @@ -94,7 +92,7 @@ public ParameterVariant(final String name, final String stringValue) { this.value.setType(ParameterType.PARAMETER_STRING.getValue()); } - public ParameterVariant(final String name, final List byteArrayValue) { + public ParameterVariant(final String name, final byte[] byteArrayValue) { this.name = name; this.value = new rcl_interfaces.msg.ParameterValue(); this.value.setByteArrayValue(byteArrayValue); @@ -161,7 +159,7 @@ public final boolean asBool() { return this.value.getBoolValue(); } - public final List asByteArray() { + public final byte[] asByteArray() { if (getType() != ParameterType.PARAMETER_BYTE_ARRAY) { throw new IllegalArgumentException("Invalid type"); } diff --git a/rcljava/src/main/java/org/ros2/rcljava/parameters/client/AsyncParametersClient.java b/rcljava/src/main/java/org/ros2/rcljava/parameters/client/AsyncParametersClient.java index 5a7a74e7..3dafa361 100644 --- a/rcljava/src/main/java/org/ros2/rcljava/parameters/client/AsyncParametersClient.java +++ b/rcljava/src/main/java/org/ros2/rcljava/parameters/client/AsyncParametersClient.java @@ -23,40 +23,40 @@ import org.ros2.rcljava.parameters.ParameterVariant; public interface AsyncParametersClient { - public Future> getParameters(final List names); + public Future getParameters(final String[] names); - public Future> getParameters( - final List names, final Consumer>> callback); + public Future getParameters( + final String[] names, final Consumer> callback); - public Future> getParameterTypes(final List names); + public Future getParameterTypes(final String[] names); - public Future> getParameterTypes( - final List names, final Consumer>> callback); + public Future getParameterTypes( + final String[] names, final Consumer> callback); - public Future> setParameters( - final List parameters); + public Future setParameters( + final ParameterVariant[] parameters); - public Future> setParameters( - final List parameters, - final Consumer>> callback); + public Future setParameters( + final ParameterVariant[] parameters, + final Consumer> callback); public Future setParametersAtomically( - final List parameters); + final ParameterVariant[] parameters); public Future setParametersAtomically( - final List parameters, + final ParameterVariant[] parameters, final Consumer> callback); public Future listParameters( - final List prefixes, long depth); + final String[] prefixes, long depth); - public Future listParameters(final List prefixes, + public Future listParameters(final String[] prefixes, long depth, final Consumer> callback); - public Future> describeParameters( - final List names); + public Future describeParameters( + final String[] names); - public Future> describeParameters( - final List names, - final Consumer>> callback); + public Future describeParameters( + final String[] names, + final Consumer> callback); } \ No newline at end of file diff --git a/rcljava/src/main/java/org/ros2/rcljava/parameters/client/AsyncParametersClientImpl.java b/rcljava/src/main/java/org/ros2/rcljava/parameters/client/AsyncParametersClientImpl.java index 6d60c226..d4c5291f 100644 --- a/rcljava/src/main/java/org/ros2/rcljava/parameters/client/AsyncParametersClientImpl.java +++ b/rcljava/src/main/java/org/ros2/rcljava/parameters/client/AsyncParametersClientImpl.java @@ -19,6 +19,7 @@ import java.util.ArrayList; import java.util.List; +import java.util.Arrays; import java.util.concurrent.Future; @@ -98,14 +99,14 @@ public AsyncParametersClientImpl(final Node node) this(node, "", QoSProfile.PARAMETERS); } - public Future> getParameters(final List names) { + public Future getParameters(final String names[]) { return getParameters(names, null); } - public Future> getParameters( - final List names, final Consumer>> callback) { - final RCLFuture> futureResult = - new RCLFuture>(new WeakReference(this.node)); + public Future getParameters( + final String[] names, final Consumer> callback) { + final RCLFuture futureResult = + new RCLFuture(new WeakReference(this.node)); final rcl_interfaces.srv.GetParameters_Request request = new rcl_interfaces.srv.GetParameters_Request(); request.setNames(names); @@ -116,17 +117,17 @@ public void accept(final Future futur List parameterVariants = new ArrayList(); List pvalues = null; try { - pvalues = future.get().getValues(); + pvalues = Arrays.asList(future.get().getValues()); } catch (Exception e) { // TODO(esteve): do something } for (int i = 0; i < pvalues.size(); i++) { rcl_interfaces.msg.Parameter parameter = new rcl_interfaces.msg.Parameter(); - parameter.setName(request.getNames().get(i)); + parameter.setName(request.getNames()[i]); parameter.setValue(pvalues.get(i)); parameterVariants.add(ParameterVariant.fromParameter(parameter)); } - futureResult.set(parameterVariants); + futureResult.set((ParameterVariant[]) parameterVariants.toArray()); if (callback != null) { callback.accept(futureResult); } @@ -135,14 +136,14 @@ public void accept(final Future futur return futureResult; } - public Future> getParameterTypes(final List names) { + public Future getParameterTypes(final String[] names) { return getParameterTypes(names, null); } - public Future> getParameterTypes( - final List names, final Consumer>> callback) { - final RCLFuture> futureResult = - new RCLFuture>(new WeakReference(this.node)); + public Future getParameterTypes( + final String[] names, final Consumer> callback) { + final RCLFuture futureResult = + new RCLFuture(new WeakReference(this.node)); final rcl_interfaces.srv.GetParameterTypes_Request request = new rcl_interfaces.srv.GetParameterTypes_Request(); request.setNames(names); @@ -151,16 +152,16 @@ public Future> getParameterTypes( request, new Consumer>() { public void accept(final Future future) { List parameterTypes = new ArrayList(); - List pts = null; + byte[] pts = null; try { pts = future.get().getTypes(); } catch (Exception e) { // TODO(esteve): do something } - for (Byte pt : pts) { - parameterTypes.add(ParameterType.fromByte(pt)); + for (int i = 0; i < pts.length; i++) { + parameterTypes.add(ParameterType.fromByte(pts[i])); } - futureResult.set(parameterTypes); + futureResult.set((ParameterType[]) parameterTypes.toArray()); if (callback != null) { callback.accept(futureResult); } @@ -169,16 +170,16 @@ public void accept(final Future f return futureResult; } - public Future> setParameters( - final List parameters) { + public Future setParameters( + final ParameterVariant[] parameters) { return setParameters(parameters, null); } - public Future> setParameters( - final List parameters, - final Consumer>> callback) { - final RCLFuture> futureResult = - new RCLFuture>( + public Future setParameters( + final ParameterVariant[] parameters, + final Consumer> callback) { + final RCLFuture futureResult = + new RCLFuture( new WeakReference(this.node)); final rcl_interfaces.srv.SetParameters_Request request = new rcl_interfaces.srv.SetParameters_Request(); @@ -187,18 +188,18 @@ public Future> setParameters( for (ParameterVariant parameterVariant : parameters) { requestParameters.add(parameterVariant.toParameter()); } - request.setParameters(requestParameters); + request.setParameters((rcl_interfaces.msg.Parameter[])requestParameters.toArray()); setParametersClient.asyncSendRequest( request, new Consumer>() { public void accept(final Future future) { List setParametersResult = null; try { - setParametersResult = future.get().getResults(); + setParametersResult = Arrays.asList(future.get().getResults()); } catch (Exception e) { // TODO(esteve): do something } - futureResult.set(setParametersResult); + futureResult.set((rcl_interfaces.msg.SetParametersResult[])setParametersResult.toArray()); if (callback != null) { callback.accept(futureResult); } @@ -208,12 +209,12 @@ public void accept(final Future futur } public Future setParametersAtomically( - final List parameters) { + final ParameterVariant[] parameters) { return setParametersAtomically(parameters, null); } public Future setParametersAtomically( - final List parameters, + final ParameterVariant[] parameters, final Consumer> callback) { final RCLFuture futureResult = new RCLFuture(new WeakReference(this.node)); @@ -224,7 +225,7 @@ public Future setParametersAtomically( for (ParameterVariant parameterVariant : parameters) { requestParameters.add(parameterVariant.toParameter()); } - request.setParameters(requestParameters); + request.setParameters((rcl_interfaces.msg.Parameter[])requestParameters.toArray()); setParametersAtomicallyClient.asyncSendRequest( request, new Consumer>() { @@ -246,11 +247,11 @@ public void accept( } public Future listParameters( - final List prefixes, long depth) { + final String[] prefixes, long depth) { return listParameters(prefixes, depth, null); } - public Future listParameters(final List prefixes, + public Future listParameters(final String[] prefixes, long depth, final Consumer> callback) { final RCLFuture futureResult = new RCLFuture(new WeakReference(this.node)); @@ -277,16 +278,16 @@ public void accept(final Future futu return futureResult; } - public Future> describeParameters( - final List names) { + public Future describeParameters( + final String[] names) { return describeParameters(names, null); } - public Future> describeParameters( - final List names, - final Consumer>> callback) { - final RCLFuture> futureResult = - new RCLFuture>( + public Future describeParameters( + final String[] names, + final Consumer> callback) { + final RCLFuture futureResult = + new RCLFuture( new WeakReference(this.node)); final rcl_interfaces.srv.DescribeParameters_Request request = new rcl_interfaces.srv.DescribeParameters_Request(); @@ -297,11 +298,11 @@ public Future> describeParameters( public void accept(final Future future) { List parameterDescriptors = null; try { - parameterDescriptors = future.get().getDescriptors(); + parameterDescriptors = Arrays.asList(future.get().getDescriptors()); } catch (Exception e) { // TODO(esteve): do something } - futureResult.set(parameterDescriptors); + futureResult.set((rcl_interfaces.msg.ParameterDescriptor[])parameterDescriptors.toArray()); if (callback != null) { callback.accept(futureResult); } diff --git a/rcljava/src/main/java/org/ros2/rcljava/parameters/client/SyncParametersClient.java b/rcljava/src/main/java/org/ros2/rcljava/parameters/client/SyncParametersClient.java index eaafbe4f..0ce75964 100644 --- a/rcljava/src/main/java/org/ros2/rcljava/parameters/client/SyncParametersClient.java +++ b/rcljava/src/main/java/org/ros2/rcljava/parameters/client/SyncParametersClient.java @@ -24,23 +24,23 @@ import org.ros2.rcljava.parameters.ParameterVariant; public interface SyncParametersClient { - public List getParameters(final List names) + public ParameterVariant[] getParameters(final String[] names) throws InterruptedException, ExecutionException; - public List getParameterTypes(final List names) + public ParameterType[] getParameterTypes(final String[] names) throws InterruptedException, ExecutionException; - public List setParameters( - final List parameters) + public rcl_interfaces.msg.SetParametersResult[] setParameters( + final ParameterVariant[] parameters) throws InterruptedException, ExecutionException; public rcl_interfaces.msg.SetParametersResult setParametersAtomically( - final List parameters) + final ParameterVariant[] parameters) throws InterruptedException, ExecutionException; - public rcl_interfaces.msg.ListParametersResult listParameters(final List prefixes, + public rcl_interfaces.msg.ListParametersResult listParameters(final String[] prefixes, long depth) throws InterruptedException, ExecutionException; - public List describeParameters( - final List names) throws InterruptedException, ExecutionException; + public rcl_interfaces.msg.ParameterDescriptor[] describeParameters( + final String[] names) throws InterruptedException, ExecutionException; } \ No newline at end of file diff --git a/rcljava/src/main/java/org/ros2/rcljava/parameters/client/SyncParametersClientImpl.java b/rcljava/src/main/java/org/ros2/rcljava/parameters/client/SyncParametersClientImpl.java index d2b4a78f..0b182c70 100644 --- a/rcljava/src/main/java/org/ros2/rcljava/parameters/client/SyncParametersClientImpl.java +++ b/rcljava/src/main/java/org/ros2/rcljava/parameters/client/SyncParametersClientImpl.java @@ -96,37 +96,37 @@ public SyncParametersClientImpl(final Executor executor, final Node node) this(executor, node, "", QoSProfile.PARAMETERS); } - public List getParameters(final List names) + public ParameterVariant[] getParameters(final String[] names) throws InterruptedException, ExecutionException { if (executor != null) { - RCLFuture> future = new RCLFuture>(executor); + RCLFuture future = new RCLFuture(executor); asyncParametersClient.getParameters( - names, new ConsumerHelper>(future)); + names, new ConsumerHelper(future)); return future.get(); } else { return asyncParametersClient.getParameters(names, null).get(); } } - public List getParameterTypes(final List names) + public ParameterType[] getParameterTypes(final String[] names) throws InterruptedException, ExecutionException { if (executor != null) { - RCLFuture> future = new RCLFuture>(executor); + RCLFuture future = new RCLFuture(executor); asyncParametersClient.getParameterTypes( - names, new ConsumerHelper>(future)); + names, new ConsumerHelper(future)); return future.get(); } else { return asyncParametersClient.getParameterTypes(names, null).get(); } } - public List setParameters( - final List parameters) throws InterruptedException, ExecutionException { + public rcl_interfaces.msg.SetParametersResult[] setParameters( + final ParameterVariant[] parameters) throws InterruptedException, ExecutionException { if (executor != null) { - RCLFuture> future = - new RCLFuture>(executor); + RCLFuture future = + new RCLFuture(executor); asyncParametersClient.setParameters( - parameters, new ConsumerHelper>(future)); + parameters, new ConsumerHelper(future)); return future.get(); } else { return asyncParametersClient.setParameters(parameters, null).get(); @@ -134,7 +134,7 @@ public List setParameters( } public rcl_interfaces.msg.SetParametersResult setParametersAtomically( - final List parameters) throws InterruptedException, ExecutionException { + final ParameterVariant[] parameters) throws InterruptedException, ExecutionException { if (executor != null) { RCLFuture future = new RCLFuture(executor); @@ -147,7 +147,7 @@ public rcl_interfaces.msg.SetParametersResult setParametersAtomically( } public rcl_interfaces.msg.ListParametersResult listParameters( - final List prefixes, long depth) throws InterruptedException, ExecutionException { + final String[] prefixes, long depth) throws InterruptedException, ExecutionException { if (executor != null) { RCLFuture future = new RCLFuture(executor); @@ -159,13 +159,13 @@ public rcl_interfaces.msg.ListParametersResult listParameters( } } - public List describeParameters(final List names) + public rcl_interfaces.msg.ParameterDescriptor[] describeParameters(final String[] names) throws InterruptedException, ExecutionException { if (executor != null) { - RCLFuture> future = - new RCLFuture>(executor); + RCLFuture future = + new RCLFuture(executor); asyncParametersClient.describeParameters( - names, new ConsumerHelper>(future)); + names, new ConsumerHelper(future)); return future.get(); } else { return asyncParametersClient.describeParameters(names, null).get(); diff --git a/rcljava/src/main/java/org/ros2/rcljava/parameters/service/ParameterServiceImpl.java b/rcljava/src/main/java/org/ros2/rcljava/parameters/service/ParameterServiceImpl.java index b13d8e86..274beaf5 100644 --- a/rcljava/src/main/java/org/ros2/rcljava/parameters/service/ParameterServiceImpl.java +++ b/rcljava/src/main/java/org/ros2/rcljava/parameters/service/ParameterServiceImpl.java @@ -16,6 +16,7 @@ package org.ros2.rcljava.parameters.service; import java.util.ArrayList; +import java.util.Arrays; import java.util.List; import org.ros2.rcljava.consumers.TriConsumer; @@ -48,11 +49,11 @@ public ParameterServiceImpl(final Node node, final QoSProfile qosProfile) public void accept(RMWRequestId rmwRequestId, rcl_interfaces.srv.GetParameters_Request request, rcl_interfaces.srv.GetParameters_Response response) { - List values = node.getParameters(request.getNames()); - List pvalues = - new ArrayList(); - for (ParameterVariant pvariant : values) { - pvalues.add(pvariant.getParameterValue()); + ParameterVariant[] values = node.getParameters(request.getNames()); + rcl_interfaces.msg.ParameterValue[] pvalues = + new rcl_interfaces.msg.ParameterValue[values.length]; + for (int i = 0; i < values.length; i++) { + pvalues[i] = values[i].getParameterValue(); } response.setValues(pvalues); } @@ -67,10 +68,10 @@ public void accept(RMWRequestId rmwRequestId, public void accept(RMWRequestId rmwRequestId, rcl_interfaces.srv.GetParameterTypes_Request request, rcl_interfaces.srv.GetParameterTypes_Response response) { - List types = node.getParameterTypes(request.getNames()); - List ptypes = new ArrayList(); - for (ParameterType type : types) { - ptypes.add(type.getValue()); + ParameterType[] types = node.getParameterTypes(request.getNames()); + byte[] ptypes = new byte[types.length]; + for (int i = 0; i < types.length; i++) { + ptypes[i] = types[i].getValue(); } response.setTypes(ptypes); } @@ -89,7 +90,8 @@ public void accept(RMWRequestId rmwRequestId, for (rcl_interfaces.msg.Parameter p : request.getParameters()) { pvariants.add(ParameterVariant.fromParameter(p)); } - List results = node.setParameters(pvariants); + rcl_interfaces.msg.SetParametersResult[] results = + node.setParameters((ParameterVariant[])pvariants.toArray()); response.setResults(results); } }, @@ -109,7 +111,7 @@ public void accept(RMWRequestId rmwRequestId, pvariants.add(ParameterVariant.fromParameter(p)); } rcl_interfaces.msg.SetParametersResult result = - node.setParametersAtomically(pvariants); + node.setParametersAtomically((ParameterVariant[])pvariants.toArray()); response.setResult(result); } }, @@ -124,8 +126,8 @@ public void accept(RMWRequestId rmwRequestId, rcl_interfaces.srv.DescribeParameters_Request request, rcl_interfaces.srv.DescribeParameters_Response response) { List descriptors = - node.describeParameters(request.getNames()); - response.setDescriptors(descriptors); + Arrays.asList(node.describeParameters(request.getNames())); + response.setDescriptors((rcl_interfaces.msg.ParameterDescriptor[])descriptors.toArray()); } }, qosProfile); From 4c8cca395b64f08aec628fc316f0543d19d5cfb8 Mon Sep 17 00:00:00 2001 From: pluris Date: Wed, 25 Nov 2020 14:49:06 +0900 Subject: [PATCH 4/4] change logic(list -> array) in InterfacesTest.java --- .../org/ros2/generator/InterfacesTest.java | 186 +++++++++--------- 1 file changed, 93 insertions(+), 93 deletions(-) diff --git a/rosidl_generator_java/src/test/java/org/ros2/generator/InterfacesTest.java b/rosidl_generator_java/src/test/java/org/ros2/generator/InterfacesTest.java index 00638e09..f1e63c83 100644 --- a/rosidl_generator_java/src/test/java/org/ros2/generator/InterfacesTest.java +++ b/rosidl_generator_java/src/test/java/org/ros2/generator/InterfacesTest.java @@ -197,101 +197,101 @@ public final void testArrays() { arrays.setAlignmentCheck(42); // Test setting/getting fixed length arrays of primitive types - List boolList = Arrays.asList(true, false, true); + Boolean boolList[] = {true, false, true}; arrays.setBoolValues(boolList); assertEquals(boolList, arrays.getBoolValues()); assertThrows(IllegalArgumentException.class, - () -> arrays.setBoolValues(Arrays.asList(true, false, true, false))); - List byteList = Arrays.asList((byte) 0, (byte) 1, (byte) 255); + () -> arrays.setBoolValues({true, false, true, false}))); + byte byteList[] = {(byte) 0, (byte) 1, (byte) 255}; arrays.setByteValues(byteList); assertEquals(byteList, arrays.getByteValues()); assertThrows(IllegalArgumentException.class, - () -> arrays.setByteValues(Arrays.asList((byte) 1, (byte) 2))); - List charList = Arrays.asList(' ', 'a', 'Z'); + () -> arrays.setByteValues({(byte) 1, (byte) 2}))); + Character charList[] = {' ', 'a', 'Z'}); arrays.setCharValues(charList); assertEquals(charList, arrays.getCharValues()); assertThrows(IllegalArgumentException.class, - () -> arrays.setCharValues(Arrays.asList((byte) 'a', (byte) 'b', (byte) 'c', (byte) 'd'))); - List float32List = Arrays.asList(0.0f, -1.125f, 1.125f); + () -> arrays.setCharValues({(byte) 'a', (byte) 'b', (byte) 'c', (byte) 'd'}); + float float32List[] = { 0.0f, -1.125f, 1.125f }; arrays.setFloat32Values(float32List); assertEquals(float32List, arrays.getFloat32Values()); assertThrows(IllegalArgumentException.class, - () -> arrays.setFloat32Values(Arrays.asList(1.0f, 2.0f))); - List float64List = Arrays.asList(0.0f, -3.1415, 3.1415); + () -> arrays.setFloat32Values({ 1.0f, 2.0f })); + double float64List[] = { 0.0f, -3.1415, 3.1415 }; arrays.setFloat64Values(float64List); assertEquals(float64List, arrays.getFloat64Values()); assertThrows(IllegalArgumentException.class, - () -> arrays.setFloat64Values(Arrays.asList(1.0, 2.0, 3.0, 4.0))); - List int8List = Arrays.asList(0, -128, 127); + () -> arrays.setFloat64Values({ 1.0, 2.0, 3.0, 4.0 })); + byte int8List[] = { 0, -128, 127 }; arrays.setInt8Values(int8List); assertEquals(int8List, arrays.getInt8Values()); assertThrows(IllegalArgumentException.class, - () ->arrays.setInt8Values(Arrays.asList((byte) 1, (byte) 2))); - List uint8List = Arrays.asList(0, 1, 255); + () ->arrays.setInt8Values({ (byte) 1, (byte) 2) })); + byte uint8List[] = { 0, 1, 255 }; arrays.setUint8Values(uint8List); assertEquals(uint8List, arrays.getUint8Values()); assertThrows(IllegalArgumentException.class, - () -> arrays.setUint8Values(Arrays.asList((byte) 1, (byte) 2, (byte) 3, (byte) 4))); - List int16List = Arrays.asList(0, -32768, 32767); + () -> arrays.setUint8Values({ (byte) 1, (byte) 2, (byte) 3, (byte) 4 })); + short int16List[] = { 0, -32768, 32767 }; arrays.setInt16Values(int16List); assertEquals(int16List, arrays.getInt16Values()); assertThrows(IllegalArgumentException.class, - () -> arrays.setInt16Values(Arrays.asList((short) 1, (short) 2))); - List uint16List = Arrays.asList(0, 1, 65535); + () -> arrays.setInt16Values({ (short) 1, (short) 2 })); + short uint16List[] = { 0, 1, 65535 }; arrays.setUint16Values(uint16List); assertEquals(uint16List, arrays.getUint16Values()); assertThrows(IllegalArgumentException.class, - () -> arrays.setUint16Values(Arrays.asList((short) 1, (short) 2, (short) 3, (short) 4))); - List int32List = Arrays.asList(0, -2147483648, 2147483647); + () -> arrays.setUint16Values({ (short) 1, (short) 2, (short) 3, (short) 4 })); + int int32List = { 0, -2147483648, 2147483647 }; arrays.setInt32Values(int32List); assertEquals(int32List, arrays.getInt32Values()); assertThrows(IllegalArgumentException.class, - () -> arrays.setInt32Values(Arrays.asList(1, 2))); - List uint32List = Arrays.asList(0, 1, 4294967295L); + () -> arrays.setInt32Values({ 1, 2 })); + int uint32List = { 0, 1, 4294967295L }; arrays.setUint32Values(uint32List); assertEquals(uint32List, arrays.getUint32Values()); assertThrows(IllegalArgumentException.class, - () -> arrays.setUint32Values(Arrays.asList(1, 2, 3, 4))); - List int64List = Arrays.asList(0, -9223372036854775808L, 9223372036854775807L); + () -> arrays.setUint32Values({ 1, 2, 3, 4 })); + long int64List = { 0, -9223372036854775808L, 9223372036854775807L }; arrays.setInt64Values(int64List); assertEquals(int64List, arrays.getInt64Values()); assertThrows(IllegalArgumentException.class, - () -> arrays.setInt64Values(Arrays.asList(1L, 2L))); - List uint64List = Arrays.asList(0, 1, -1); + () -> arrays.setInt64Values({ 1L, 2L })); + long uint64List = { 0, 1, -1 }; arrays.setUint64Values(uint64List); assertEquals(uint64List, arrays.getUint64Values()); assertThrows(IllegalArgumentException.class, - () ->arrays.setUint64Values(Arrays.asList(1L, 2L, 3L, 4L))); + () ->arrays.setUint64Values({ 1L, 2L, 3L, 4L })); // Test setting/getting fixed length arrays of strings - List stringList = Arrays.asList("", "min value", "max_value"); + String stringList[] = { "", "min value", "max_value" }; arrays.setStringValues(stringList); assertEquals(stringList, arrays.getStringValues()); assertThrows(IllegalArgumentException.class, - () -> arrays.setStringValues(Arrays.asList("too", "few"))); + () -> arrays.setStringValues({ "too", "few" })); // Test setting/getting fixed length arrays of nested types rosidl_generator_java.msg.BasicTypes basicTypes = new rosidl_generator_java.msg.BasicTypes(); - List basicTypesList = Arrays.asList( - new rosidl_generator_java.msg.BasicTypes[] {basicTypes, basicTypes, basicTypes}); + rosidl_generator_java.msg.BasicTypes basicTypesList[] = + new rosidl_generator_java.msg.BasicTypes[] { basicTypes, basicTypes, basicTypes }; arrays.setBasicTypesValues(basicTypesList); assertEquals(basicTypesList, arrays.getBasicTypesValues()); assertThrows(IllegalArgumentException.class, - () -> arrays.setBasicTypesValues(Arrays.asList(new rosidl_generator_java.msg.BasicTypes[] {basicTypes}))); + () -> arrays.setBasicTypesValues(new rosidl_generator_java.msg.BasicTypes[] {basicTypes})); rosidl_generator_java.msg.Constants constants = new rosidl_generator_java.msg.Constants(); - List constantsList = Arrays.asList( - new rosidl_generator_java.msg.Constants[] {constants, constants, constants}); + rosidl_generator_java.msg.Constants constantsList[] = + new rosidl_generator_java.msg.Constants[] { constants, constants, constants }; arrays.setConstantsValues(constantsList); assertEquals(constantsList, arrays.getConstantsValues()); assertThrows(IllegalArgumentException.class, - () -> arrays.setConstantsValues(Arrays.asList(new rosidl_generator_java.msg.Constants[] {constants}))); + () -> arrays.setConstantsValues(new rosidl_generator_java.msg.Constants[] {constants})); rosidl_generator_java.msg.Defaults defaults = new rosidl_generator_java.msg.Defaults(); - List defaultsList = Arrays.asList( - new rosidl_generator_java.msg.Defaults[] {defaults, defaults, defaults}); + rosidl_generator_java.msg.Defaults defaultsList = + new rosidl_generator_java.msg.Defaults[] { defaults, defaults, defaults }; arrays.setDefaultsValues(defaultsList); assertEquals(defaultsList, arrays.getDefaultsValues()); assertThrows(IllegalArgumentException.class, - () -> arrays.setDefaultsValues(Arrays.asList(new rosidl_generator_java.msg.Defaults[] {defaults}))); + () -> arrays.setDefaultsValues(new rosidl_generator_java.msg.Defaults[] { defaults })); assertEquals(42, arrays.getAlignmentCheck()); } @@ -304,158 +304,158 @@ public final void testBoundedSequences() { bounded_seq.setAlignmentCheck(42); // Test setting/getting fixed length bounded_seq of primitive types - List boolList = Arrays.asList(true, false, true); + Boolean boolList[] = { true, false, true }; bounded_seq.setBoolValues(boolList); assertEquals(boolList, bounded_seq.getBoolValues()); - List boolListShort = Arrays.asList(false); + Boolean boolListShort[] = { true }; bounded_seq.setBoolValues(boolListShort); assertEquals(boolListShort, bounded_seq.getBoolValues()); assertThrows(IllegalArgumentException.class, - () -> bounded_seq.setBoolValues(Arrays.asList(true, false, true, false))); - List byteList = Arrays.asList((byte) 0, (byte) 1, (byte) 255); + () -> bounded_seq.setBoolValues({ true, false, true, false })); + byte byteList[] = { (byte) 0, (byte) 1, (byte) 255 }; bounded_seq.setByteValues(byteList); assertEquals(byteList, bounded_seq.getByteValues()); - List byteListShort = Arrays.asList((byte) 1); + byte byteListShort[] = { (byte) 1 }; bounded_seq.setByteValues(byteListShort); assertEquals(byteListShort, bounded_seq.getByteValues()); assertThrows(IllegalArgumentException.class, - () -> bounded_seq.setByteValues(Arrays.asList((byte) 1, (byte) 2, (byte) 3, (byte) 4))); - List charList = Arrays.asList(' ', 'a', 'Z'); + () -> bounded_seq.setByteValues({ (byte) 1, (byte) 2, (byte) 3, (byte) 4 })); + Character charList[] = { ' ', 'a', 'Z' }); bounded_seq.setCharValues(charList); assertEquals(charList, bounded_seq.getCharValues()); - List charListShort = Arrays.asList('z', 'A'); + Character charListShort[] = { 'z', 'A' }; bounded_seq.setCharValues(charListShort); assertEquals(charListShort, bounded_seq.getCharValues()); assertThrows(IllegalArgumentException.class, - () -> bounded_seq.setCharValues(Arrays.asList((byte) 'a', (byte) 'b', (byte) 'c', (byte) 'd'))); - List float32List = Arrays.asList(0.0f, -1.125f, 1.125f); + () -> bounded_seq.setCharValues({ (byte) 'a', (byte) 'b', (byte) 'c', (byte) 'd' })); + float float32List[] = { 0.0f, -1.125f, 1.125f }; bounded_seq.setFloat32Values(float32List); assertEquals(float32List, bounded_seq.getFloat32Values()); - List float32ListShort = Arrays.asList(1.125f, -1.125f); + float float32ListShort[] = { 1.125f, -1.125f }; bounded_seq.setFloat32Values(float32ListShort); assertEquals(float32ListShort, bounded_seq.getFloat32Values()); assertThrows(IllegalArgumentException.class, - () -> bounded_seq.setFloat32Values(Arrays.asList(1.0f, 2.0f, 3.0f, 4.0f))); - List float64List = Arrays.asList(0.0f, -3.1415, 3.1415); + () -> bounded_seq.setFloat32Values({ 1.0f, 2.0f, 3.0f, 4.0f })); + double float64List[] = { 0.0f, -3.1415, 3.1415 }; bounded_seq.setFloat64Values(float64List); assertEquals(float64List, bounded_seq.getFloat64Values()); - List float64ListShort = Arrays.asList(3.1415, -3.1415); + double float64ListShort[] = { 3.1415, -3.1415 }; bounded_seq.setFloat64Values(float64ListShort); assertEquals(float64ListShort, bounded_seq.getFloat64Values()); assertThrows(IllegalArgumentException.class, - () -> bounded_seq.setFloat64Values(Arrays.asList(1.0, 2.0, 3.0, 4.0))); - List int8List = Arrays.asList(0, -128, 127); + () -> bounded_seq.setFloat64Values({ 1.0, 2.0, 3.0, 4.0 })); + byte int8List = { 0, -128, 127 }; bounded_seq.setInt8Values(int8List); assertEquals(int8List, bounded_seq.getInt8Values()); - List int8ListShort = Arrays.asList(127, -128); + byte int8ListShort = { 127, -128 }; bounded_seq.setInt8Values(int8ListShort); assertEquals(int8ListShort, bounded_seq.getInt8Values()); assertThrows(IllegalArgumentException.class, - () -> bounded_seq.setInt8Values(Arrays.asList((byte) 1, (byte) 2, (byte) 3, (byte) 4))); - List uint8List = Arrays.asList(0, 1, 255); + () -> bounded_seq.setInt8Values({ (byte) 1, (byte) 2, (byte) 3, (byte) 4 })); + byte uint8List = { 0, 1, 255 }; bounded_seq.setUint8Values(uint8List); assertEquals(uint8List, bounded_seq.getUint8Values()); - List uint8ListShort = Arrays.asList(255, 1); + byte uint8ListShort = { 255, 1 }; bounded_seq.setUint8Values(uint8ListShort); assertEquals(uint8ListShort, bounded_seq.getUint8Values()); assertThrows(IllegalArgumentException.class, - () -> bounded_seq.setUint8Values(Arrays.asList((byte) 1, (byte) 2, (byte) 3, (byte) 4))); - List int16List = Arrays.asList(0, -32768, 32767); + () -> bounded_seq.setUint8Values({ (byte) 1, (byte) 2, (byte) 3, (byte) 4 })); + short int16List = { 0, -32768, 32767 }; bounded_seq.setInt16Values(int16List); assertEquals(int16List, bounded_seq.getInt16Values()); - List int16ListShort = Arrays.asList(32767, -32768); + short int16ListShort = { 32767, -32768 }; bounded_seq.setInt16Values(int16ListShort); assertEquals(int16ListShort, bounded_seq.getInt16Values()); assertThrows(IllegalArgumentException.class, - () -> bounded_seq.setInt16Values(Arrays.asList((short) 1, (short) 2, (short) 3, (short) 4))); - List uint16List = Arrays.asList(0, 1, 65535); + () -> bounded_seq.setInt16Values({ (short) 1, (short) 2, (short) 3, (short) 4) }); + short uint16List = { 0, 1, 65535 }; bounded_seq.setUint16Values(uint16List); assertEquals(uint16List, bounded_seq.getUint16Values()); - List uint16ListShort = Arrays.asList(0, 1, 65535); + short uint16ListShort = { 0, 1, 65535 }; bounded_seq.setUint16Values(uint16ListShort); assertEquals(uint16ListShort, bounded_seq.getUint16Values()); assertThrows(IllegalArgumentException.class, - () -> bounded_seq.setUint16Values(Arrays.asList((short) 1, (short) 2, (short) 3, (short) 4))); - List int32List = Arrays.asList(0, -2147483648, 2147483647); + () -> bounded_seq.setUint16Values({ (short) 1, (short) 2, (short) 3, (short) 4 })); + int int32List = { 0, -2147483648, 2147483647 }; bounded_seq.setInt32Values(int32List); assertEquals(int32List, bounded_seq.getInt32Values()); - List int32ListShort = Arrays.asList(2147483647, -2147483648); + int int32ListShort = { 2147483647, -2147483648 }; bounded_seq.setInt32Values(int32ListShort); assertEquals(int32ListShort, bounded_seq.getInt32Values()); assertThrows(IllegalArgumentException.class, - () -> bounded_seq.setInt32Values(Arrays.asList(1, 2, 3, 4))); - List uint32List = Arrays.asList(0, 1, 4294967295L); + () -> bounded_seq.setInt32Values({ 1, 2, 3, 4 })); + int uint32List = { 0, 1, 4294967295L }; bounded_seq.setUint32Values(uint32List); assertEquals(uint32List, bounded_seq.getUint32Values()); - List uint32ListShort = Arrays.asList(4294967295L, 1); + int uint32ListShort = { 4294967295L, 1 }; bounded_seq.setUint32Values(uint32ListShort); assertEquals(uint32ListShort, bounded_seq.getUint32Values()); assertThrows(IllegalArgumentException.class, - () -> bounded_seq.setUint32Values(Arrays.asList(1, 2, 3, 4))); - List int64List = Arrays.asList(0, -9223372036854775808L, 9223372036854775807L); + () -> bounded_seq.setUint32Values({ 1, 2, 3, 4 })); + long int64List = { 0, -9223372036854775808L, 9223372036854775807L }; bounded_seq.setInt64Values(int64List); assertEquals(int64List, bounded_seq.getInt64Values()); - List int64ListShort = Arrays.asList(0, -9223372036854775808L, 9223372036854775807L); + long int64ListShort = { 0, -9223372036854775808L, 9223372036854775807L }; bounded_seq.setInt64Values(int64ListShort); assertEquals(int64ListShort, bounded_seq.getInt64Values()); assertThrows(IllegalArgumentException.class, - () -> bounded_seq.setInt64Values(Arrays.asList(1L, 2L, 3L, 4L))); - List uint64List = Arrays.asList(0, 1, -1); + () -> bounded_seq.setInt64Values({ 1L, 2L, 3L, 4L })); + long uint64List = { 0, 1, -1 }; bounded_seq.setUint64Values(uint64List); assertEquals(uint64List, bounded_seq.getUint64Values()); - List uint64ListShort = Arrays.asList(0, 1, -1); + long uint64ListShort = { 0, 1, -1 }; bounded_seq.setUint64Values(uint64ListShort); assertEquals(uint64ListShort, bounded_seq.getUint64Values()); assertThrows(IllegalArgumentException.class, - () -> bounded_seq.setUint64Values(Arrays.asList(1L, 2L, 3L, 4L))); + () -> bounded_seq.setUint64Values({ 1L, 2L, 3L, 4L })); // Test setting/getting fixed length bounded_seq of strings - List stringList = Arrays.asList("", "min value", "max_value"); + String stringList[] = { "", "min value", "max_value" }; bounded_seq.setStringValues(stringList); assertEquals(stringList, bounded_seq.getStringValues()); - List stringListShort = Arrays.asList("max_value", ""); + String stringListShort[] = { "max_value", "" }; bounded_seq.setStringValues(stringListShort); assertEquals(stringListShort, bounded_seq.getStringValues()); assertThrows(IllegalArgumentException.class, - () -> bounded_seq.setStringValues(Arrays.asList("too", "many", "values", "!"))); + () -> bounded_seq.setStringValues({ "too", "many", "values", "!" })); // Test setting/getting fixed length bounded_seq of nested types rosidl_generator_java.msg.BasicTypes basicTypes = new rosidl_generator_java.msg.BasicTypes(); - List basicTypesList = Arrays.asList( - new rosidl_generator_java.msg.BasicTypes[] {basicTypes, basicTypes, basicTypes}); + rosidl_generator_java.msg.BasicTypes basicTypesList[] = + new rosidl_generator_java.msg.BasicTypes[] {basicTypes, basicTypes, basicTypes}; bounded_seq.setBasicTypesValues(basicTypesList); assertEquals(basicTypesList, bounded_seq.getBasicTypesValues()); - List basicTypesListShort = Arrays.asList( - new rosidl_generator_java.msg.BasicTypes[] {basicTypes}); + rosidl_generator_java.msg.BasicTypes basicTypesListShort[] = + new rosidl_generator_java.msg.BasicTypes[] {basicTypes}; bounded_seq.setBasicTypesValues(basicTypesListShort); assertEquals(basicTypesListShort, bounded_seq.getBasicTypesValues()); assertThrows(IllegalArgumentException.class, () -> bounded_seq.setBasicTypesValues( - Arrays.asList(new rosidl_generator_java.msg.BasicTypes[] {basicTypes, basicTypes, basicTypes, basicTypes}))); + new rosidl_generator_java.msg.BasicTypes[] {basicTypes, basicTypes, basicTypes, basicTypes})); rosidl_generator_java.msg.Constants constants = new rosidl_generator_java.msg.Constants(); - List constantsList = Arrays.asList( - new rosidl_generator_java.msg.Constants[] {constants, constants, constants}); + rosidl_generator_java.msg.Constants constantsList = + new rosidl_generator_java.msg.Constants[] {constants, constants, constants}; bounded_seq.setConstantsValues(constantsList); assertEquals(constantsList, bounded_seq.getConstantsValues()); - List constantsListShort = Arrays.asList( + rosidl_generator_java.msg.Constants constantsListShort = new rosidl_generator_java.msg.Constants[] {constants}); bounded_seq.setConstantsValues(constantsListShort); assertEquals(constantsListShort, bounded_seq.getConstantsValues()); assertThrows(IllegalArgumentException.class, () -> bounded_seq.setConstantsValues( - Arrays.asList(new rosidl_generator_java.msg.Constants[] {constants, constants, constants, constants}))); + new rosidl_generator_java.msg.Constants[] {constants, constants, constants, constants})); rosidl_generator_java.msg.Defaults defaults = new rosidl_generator_java.msg.Defaults(); - List defaultsList = Arrays.asList( - new rosidl_generator_java.msg.Defaults[] {defaults, defaults, defaults}); + rosidl_generator_java.msg.Defaults defaultsList = + new rosidl_generator_java.msg.Defaults[] {defaults, defaults, defaults}; bounded_seq.setDefaultsValues(defaultsList); assertEquals(defaultsList, bounded_seq.getDefaultsValues()); - List defaultsListShort = Arrays.asList( - new rosidl_generator_java.msg.Defaults[] {defaults, defaults, defaults}); + rosidl_generator_java.msg.Defaults defaultsListShort = + new rosidl_generator_java.msg.Defaults[] {defaults, defaults, defaults}; bounded_seq.setDefaultsValues(defaultsListShort); assertEquals(defaultsListShort, bounded_seq.getDefaultsValues()); assertThrows(IllegalArgumentException.class, () -> bounded_seq.setDefaultsValues( - Arrays.asList(new rosidl_generator_java.msg.Defaults[] {defaults, defaults, defaults, defaults}))); + new rosidl_generator_java.msg.Defaults[] {defaults, defaults, defaults, defaults})); assertEquals(42, bounded_seq.getAlignmentCheck()); }