1616package org .ros2 .rcljava .action ;
1717
1818import java .lang .ref .WeakReference ;
19+ import java .lang .SuppressWarnings ;
1920import java .util .ArrayList ;
2021import java .util .Collection ;
2122import java .util .HashMap ;
@@ -171,6 +172,8 @@ public synchronized void abort(ResultDefinition<T> result) {
171172 /**
172173 * {@inheritDoc}
173174 */
175+ // TODO(ivanpauno): Improve generated code API so we don't need this.
176+ @ SuppressWarnings ("unchecked" )
174177 public synchronized void publishFeedback (FeedbackDefinition <T > feedback ) {
175178 Class <? extends FeedbackMessageDefinition > feedbackMessageType =
176179 ActionServerImpl .this .actionTypeInstance .getFeedbackMessageType ();
@@ -202,7 +205,7 @@ public final long getHandle() {
202205
203206 private synchronized final void toTerminalState (byte status , ResultDefinition <T > result ) {
204207 nativeUpdateGoalState (this .handle , status );
205- ResultResponseDefinition <T > resultResponse = ActionServerImpl .this .createResultResponse ();
208+ ResultResponseDefinition <T > resultResponse = ActionServerImpl .this .createResultResponseUnchecked ();
206209 resultResponse .setGoalStatus (status );
207210 resultResponse .setResult (result );
208211 ActionServerImpl .this .sendResult (goalInfo .getGoalId ().getUuidAsList (), resultResponse );
@@ -337,6 +340,12 @@ public boolean isReady(long waitSetHandle) {
337340 return false ;
338341 }
339342
343+ @ SuppressWarnings ("unchecked" )
344+ private GoalCallback .GoalResponse
345+ handleGoalUnchecked (GoalRequestDefinition <T > requestMessage ) {
346+ return this .goalCallback .handleGoal (requestMessage );
347+ }
348+
340349 private ActionServerGoalHandle <T > executeGoalRequest (
341350 RMWRequestId rmwRequestId ,
342351 GoalRequestDefinition <T > requestMessage ,
@@ -358,7 +367,7 @@ private ActionServerGoalHandle<T> executeGoalRequest(
358367 }
359368
360369 // Call user callback
361- GoalCallback .GoalResponse response = this .goalCallback . handleGoal (requestMessage );
370+ GoalCallback .GoalResponse response = this .handleGoalUnchecked (requestMessage );
362371
363372 boolean accepted = GoalCallback .GoalResponse .ACCEPT_AND_DEFER == response
364373 || GoalCallback .GoalResponse .ACCEPT_AND_EXECUTE == response ;
@@ -542,17 +551,6 @@ private action_msgs.msg.GoalInfo createGoalInfo(List<Byte> goalUuid) {
542551 return goalInfo ;
543552 }
544553
545- private ResultResponseDefinition <T > createResultResponse () {
546- ResultResponseDefinition <T > resultResponse ;
547- try {
548- resultResponse =
549- this .actionTypeInstance .getGetResultResponseType ().getDeclaredConstructor ().newInstance ();
550- } catch (ReflectiveOperationException ex ) {
551- throw new IllegalStateException ("Failed to instantiate provided action type: " , ex );
552- }
553- return resultResponse ;
554- }
555-
556554 // This will store the result, so it can be sent to future result requests, and
557555 // will also send a result response to all requests that were already made.
558556 private void sendResult (List <Byte > goalUuid , ResultResponseDefinition <T > resultResponse ) {
@@ -571,23 +569,61 @@ private void sendResult(List<Byte> goalUuid, ResultResponseDefinition<T> resultR
571569 }
572570 }
573571
572+ // TODO(ivanpauno): Improve generated code API so we don't need this.
573+ @ SuppressWarnings ("unchecked" )
574+ private ResultRequestDefinition <T > createResultRequestUnchecked () {
575+ ResultRequestDefinition <T > resultRequest ;
576+ try {
577+ resultRequest =
578+ this .actionTypeInstance .getGetResultRequestType ().getDeclaredConstructor ().newInstance ();
579+ } catch (ReflectiveOperationException ex ) {
580+ throw new IllegalStateException ("Failed to instantiate provided action type: " , ex );
581+ }
582+ return resultRequest ;
583+ }
584+
585+ // TODO(ivanpauno): Improve generated code API so we don't need this.
586+ @ SuppressWarnings ("unchecked" )
587+ private ResultResponseDefinition <T > createResultResponseUnchecked () {
588+ ResultResponseDefinition <T > resultResponse ;
589+ try {
590+ resultResponse =
591+ this .actionTypeInstance .getGetResultResponseType ().getDeclaredConstructor ().newInstance ();
592+ } catch (ReflectiveOperationException ex ) {
593+ throw new IllegalStateException ("Failed to instantiate provided action type: " , ex );
594+ }
595+ return resultResponse ;
596+ }
597+
598+ // TODO(ivanpauno): Improve generated code API so we don't need this.
599+ @ SuppressWarnings ("unchecked" )
600+ private GoalRequestDefinition <T > newRequestUnchecked () {
601+ Class <? extends GoalRequestDefinition > requestType = this .actionTypeInstance .getSendGoalRequestType ();
602+ try {
603+ return requestType .getDeclaredConstructor ().newInstance ();
604+ } catch (ReflectiveOperationException ex ) {
605+ throw new IllegalStateException ("Failed to instantiate request: " , ex );
606+ }
607+ }
608+
609+ // TODO(ivanpauno): Improve generated code API so we don't need this.
610+ @ SuppressWarnings ("unchecked" )
611+ private GoalResponseDefinition <T > newResponseUnchecked () {
612+ Class <? extends GoalResponseDefinition > responseType = this .actionTypeInstance .getSendGoalResponseType ();
613+ try {
614+ return responseType .getDeclaredConstructor ().newInstance ();
615+ } catch (ReflectiveOperationException ex ) {
616+ throw new IllegalStateException ("Failed to instantiate responce: " , ex );
617+ }
618+ }
619+
574620 /**
575621 * {@inheritDoc}
576622 */
577623 public void execute () {
578624 if (this .isGoalRequestReady ()) {
579- Class <? extends GoalRequestDefinition > requestType = this .actionTypeInstance .getSendGoalRequestType ();
580- Class <? extends GoalResponseDefinition > responseType = this .actionTypeInstance .getSendGoalResponseType ();
581-
582- GoalRequestDefinition <T > requestMessage = null ;
583- GoalResponseDefinition <T > responseMessage = null ;
584-
585- try {
586- requestMessage = requestType .getDeclaredConstructor ().newInstance ();
587- responseMessage = responseType .getDeclaredConstructor ().newInstance ();
588- } catch (ReflectiveOperationException ex ) {
589- throw new IllegalStateException ("Failed to instantiate request or responce: " , ex );
590- }
625+ GoalRequestDefinition <T > requestMessage = newRequestUnchecked ();
626+ GoalResponseDefinition <T > responseMessage = newResponseUnchecked ();
591627
592628 if (requestMessage != null && responseMessage != null ) {
593629 long requestFromJavaConverterHandle = requestMessage .getFromJavaConverterInstance ();
@@ -643,14 +679,7 @@ public void execute() {
643679 }
644680
645681 if (this .isResultRequestReady ()) {
646- Class <? extends ResultRequestDefinition > requestType = this .actionTypeInstance .getGetResultRequestType ();
647-
648- ResultRequestDefinition <T > requestMessage = null ;
649- try {
650- requestMessage = requestType .getDeclaredConstructor ().newInstance ();
651- } catch (ReflectiveOperationException ex ) {
652- throw new IllegalArgumentException ("Failed to instantiate action result request: " , ex );
653- }
682+ ResultRequestDefinition <T > requestMessage = createResultRequestUnchecked ();
654683
655684 if (requestMessage != null ) {
656685 long requestFromJavaConverterHandle = requestMessage .getFromJavaConverterInstance ();
@@ -672,7 +701,7 @@ public void execute() {
672701
673702 ResultResponseDefinition <T > resultResponse = null ;
674703 if (!goalExists ) {
675- resultResponse = this .createResultResponse ();
704+ resultResponse = this .createResultResponseUnchecked ();
676705 resultResponse .setGoalStatus (action_msgs .msg .GoalStatus .STATUS_UNKNOWN );
677706 } else {
678707 resultResponse = this .goalResults .get (goalUuid );
@@ -682,7 +711,7 @@ public void execute() {
682711 List <RMWRequestId > requestIds = null ;
683712 requestIds = this .goalRequests .get (goalUuid );
684713 if (requestIds == null ) {
685- requestIds = new ArrayList ();
714+ requestIds = new ArrayList < RMWRequestId > ();
686715 this .goalRequests .put (goalUuid , requestIds );
687716 }
688717 requestIds .add (rmwRequestId );
0 commit comments