1919
2020package org .elasticsearch .action .admin .indices .analyze ;
2121
22- import org .elasticsearch .action . ActionType ;
22+ import org .elasticsearch .Version ;
2323import org .elasticsearch .action .ActionRequestValidationException ;
2424import org .elasticsearch .action .ActionResponse ;
25+ import org .elasticsearch .action .ActionType ;
2526import org .elasticsearch .action .support .single .shard .SingleShardRequest ;
2627import org .elasticsearch .common .ParseField ;
2728import org .elasticsearch .common .Strings ;
@@ -292,22 +293,29 @@ public static class Response extends ActionResponse implements ToXContentObject
292293 private final List <AnalyzeToken > tokens ;
293294
294295 public Response (List <AnalyzeToken > tokens , DetailAnalyzeResponse detail ) {
296+ if (tokens == null && detail == null ) {
297+ throw new IllegalArgumentException ("Neither token nor detail set on AnalysisAction.Response" );
298+ }
295299 this .tokens = tokens ;
296300 this .detail = detail ;
297301 }
298302
299303 public Response (StreamInput in ) throws IOException {
300304 super .readFrom (in );
301- int size = in .readVInt ();
302- if (size > 0 ) {
303- tokens = new ArrayList <>(size );
304- for (int i = 0 ; i < size ; i ++) {
305- tokens .add (new AnalyzeToken (in ));
305+ if (in .getVersion ().onOrAfter (Version .V_8_0_0 )) {
306+ AnalyzeToken [] tokenArray = in .readOptionalArray (AnalyzeToken ::new , AnalyzeToken []::new );
307+ tokens = tokenArray != null ? Arrays .asList (tokenArray ) : null ;
308+ } else {
309+ int size = in .readVInt ();
310+ if (size > 0 ) {
311+ tokens = new ArrayList <>(size );
312+ for (int i = 0 ; i < size ; i ++) {
313+ tokens .add (new AnalyzeToken (in ));
314+ }
315+ } else {
316+ tokens = null ;
306317 }
307318 }
308- else {
309- tokens = null ;
310- }
311319 detail = in .readOptionalWriteable (DetailAnalyzeResponse ::new );
312320 }
313321
@@ -346,21 +354,33 @@ public XContentBuilder toXContent(XContentBuilder builder, Params params) throws
346354
347355 @ Override
348356 public void writeTo (StreamOutput out ) throws IOException {
349- if (tokens != null ) {
350- out . writeVInt ( tokens . size ()) ;
351- for ( AnalyzeToken token : tokens ) {
352- token . writeTo ( out );
357+ if (out . getVersion (). onOrAfter ( Version . V_8_0_0 ) ) {
358+ AnalyzeToken [] tokenArray = null ;
359+ if ( tokens != null ) {
360+ tokenArray = tokens . toArray ( new AnalyzeToken [ 0 ] );
353361 }
362+ out .writeOptionalArray (tokenArray );
354363 } else {
355- out .writeVInt (0 );
364+ if (tokens != null ) {
365+ out .writeVInt (tokens .size ());
366+ for (AnalyzeToken token : tokens ) {
367+ token .writeTo (out );
368+ }
369+ } else {
370+ out .writeVInt (0 );
371+ }
356372 }
357373 out .writeOptionalWriteable (detail );
358374 }
359375
360376 @ Override
361377 public boolean equals (Object o ) {
362- if (this == o ) return true ;
363- if (o == null || getClass () != o .getClass ()) return false ;
378+ if (this == o ) {
379+ return true ;
380+ }
381+ if (o == null || getClass () != o .getClass ()) {
382+ return false ;
383+ }
364384 Response that = (Response ) o ;
365385 return Objects .equals (detail , that .detail ) &&
366386 Objects .equals (tokens , that .tokens );
@@ -401,8 +421,12 @@ public static class AnalyzeToken implements Writeable, ToXContentObject {
401421
402422 @ Override
403423 public boolean equals (Object o ) {
404- if (this == o ) return true ;
405- if (o == null || getClass () != o .getClass ()) return false ;
424+ if (this == o ) {
425+ return true ;
426+ }
427+ if (o == null || getClass () != o .getClass ()) {
428+ return false ;
429+ }
406430 AnalyzeToken that = (AnalyzeToken ) o ;
407431 return startOffset == that .startOffset &&
408432 endOffset == that .endOffset &&
@@ -582,8 +606,12 @@ public AnalyzeTokenList[] tokenfilters() {
582606
583607 @ Override
584608 public boolean equals (Object o ) {
585- if (this == o ) return true ;
586- if (o == null || getClass () != o .getClass ()) return false ;
609+ if (this == o ) {
610+ return true ;
611+ }
612+ if (o == null || getClass () != o .getClass ()) {
613+ return false ;
614+ }
587615 DetailAnalyzeResponse that = (DetailAnalyzeResponse ) o ;
588616 return customAnalyzer == that .customAnalyzer &&
589617 Objects .equals (analyzer , that .analyzer ) &&
@@ -669,8 +697,12 @@ public static class AnalyzeTokenList implements Writeable, ToXContentObject {
669697
670698 @ Override
671699 public boolean equals (Object o ) {
672- if (this == o ) return true ;
673- if (o == null || getClass () != o .getClass ()) return false ;
700+ if (this == o ) {
701+ return true ;
702+ }
703+ if (o == null || getClass () != o .getClass ()) {
704+ return false ;
705+ }
674706 AnalyzeTokenList that = (AnalyzeTokenList ) o ;
675707 return Objects .equals (name , that .name ) &&
676708 Arrays .equals (tokens , that .tokens );
@@ -690,16 +722,19 @@ public AnalyzeTokenList(String name, AnalyzeToken[] tokens) {
690722
691723 AnalyzeTokenList (StreamInput in ) throws IOException {
692724 name = in .readString ();
693- int size = in .readVInt ();
694- if (size > 0 ) {
695- tokens = new AnalyzeToken [size ];
696- for (int i = 0 ; i < size ; i ++) {
697- tokens [i ] = new AnalyzeToken (in );
725+ if (in .getVersion ().onOrAfter (Version .V_8_0_0 )) {
726+ tokens = in .readOptionalArray (AnalyzeToken ::new , AnalyzeToken []::new );
727+ } else {
728+ int size = in .readVInt ();
729+ if (size > 0 ) {
730+ tokens = new AnalyzeToken [size ];
731+ for (int i = 0 ; i < size ; i ++) {
732+ tokens [i ] = new AnalyzeToken (in );
733+ }
734+ } else {
735+ tokens = null ;
698736 }
699737 }
700- else {
701- tokens = null ;
702- }
703738 }
704739
705740 public String getName () {
@@ -732,13 +767,17 @@ public XContentBuilder toXContent(XContentBuilder builder, Params params) throws
732767 @ Override
733768 public void writeTo (StreamOutput out ) throws IOException {
734769 out .writeString (name );
735- if (tokens != null ) {
736- out .writeVInt (tokens .length );
737- for (AnalyzeToken token : tokens ) {
738- token .writeTo (out );
739- }
770+ if (out .getVersion ().onOrAfter (Version .V_8_0_0 )) {
771+ out .writeOptionalArray (tokens );
740772 } else {
741- out .writeVInt (0 );
773+ if (tokens != null ) {
774+ out .writeVInt (tokens .length );
775+ for (AnalyzeToken token : tokens ) {
776+ token .writeTo (out );
777+ }
778+ } else {
779+ out .writeVInt (0 );
780+ }
742781 }
743782 }
744783 }
@@ -789,8 +828,12 @@ public void writeTo(StreamOutput out) throws IOException {
789828
790829 @ Override
791830 public boolean equals (Object o ) {
792- if (this == o ) return true ;
793- if (o == null || getClass () != o .getClass ()) return false ;
831+ if (this == o ) {
832+ return true ;
833+ }
834+ if (o == null || getClass () != o .getClass ()) {
835+ return false ;
836+ }
794837 CharFilteredText that = (CharFilteredText ) o ;
795838 return Objects .equals (name , that .name ) &&
796839 Arrays .equals (texts , that .texts );
0 commit comments