@@ -476,48 +476,69 @@ static List<String> getModifiers(final String fullPatternName) {
476476 }
477477
478478 HandshakePattern withModifier (final String modifier ) {
479- final MessagePattern [] modifiedPreMessagePatterns ;
480- final MessagePattern [] modifiedHandshakeMessagePatterns ;
479+ final MessagePattern [][] modifiedMessagePatterns ;
481480
482481 if ("fallback" .equals (modifier )) {
483- if (!isValidFallbackMessagePattern (handshakeMessagePatterns [0 ])) {
484- throw new IllegalStateException ("Cannot generate fallback pattern; first message pattern is not a fallback-eligible message pattern" );
485- }
482+ modifiedMessagePatterns = getPatternsWithFallbackModifier ();
483+ } else if (modifier .startsWith ("psk" )) {
484+ modifiedMessagePatterns = getPatternsWithPskModifier (modifier );
485+ } else {
486+ throw new IllegalArgumentException ("Unrecognized modifier: " + modifier );
487+ }
486488
487- modifiedPreMessagePatterns = new MessagePattern [getPreMessagePatterns ().length + 1 ];
488- modifiedHandshakeMessagePatterns = new MessagePattern [getHandshakeMessagePatterns ().length - 1 ];
489+ assert modifiedMessagePatterns .length == 2 ;
489490
490- System . arraycopy ( getPreMessagePatterns ( ), 0 , modifiedPreMessagePatterns , 0 , getPreMessagePatterns (). length );
491- modifiedPreMessagePatterns [ modifiedPreMessagePatterns . length - 1 ] = getHandshakeMessagePatterns ()[ 0 ];
491+ return new HandshakePattern ( getModifiedName ( modifier ), modifiedMessagePatterns [ 0 ], modifiedMessagePatterns [ 1 ] );
492+ }
492493
493- System .arraycopy (getHandshakeMessagePatterns (), 1 , modifiedHandshakeMessagePatterns , 0 , getHandshakeMessagePatterns ().length - 1 );
494- } else if (modifier .startsWith ("psk" )) {
495- final int pskIndex = Integer .parseInt (modifier .substring ("psk" .length ()));
496-
497- modifiedPreMessagePatterns = getPreMessagePatterns ().clone ();
498- modifiedHandshakeMessagePatterns = getHandshakeMessagePatterns ().clone ();
499-
500- if (pskIndex == 0 ) {
501- // Insert a PSK token at the start of the first message
502- final Token [] originalTokens = modifiedHandshakeMessagePatterns [0 ].tokens ();
503- final Token [] modifiedTokens = new Token [originalTokens .length + 1 ];
504- modifiedTokens [0 ] = Token .PSK ;
505- System .arraycopy (originalTokens , 0 , modifiedTokens , 1 , originalTokens .length );
506-
507- modifiedHandshakeMessagePatterns [0 ] = new MessagePattern (modifiedHandshakeMessagePatterns [0 ].sender , modifiedTokens );
508- } else {
509- // Insert a PSK at the end of the N-1st message
510- final Token [] originalTokens = modifiedHandshakeMessagePatterns [pskIndex - 1 ].tokens ();
511- final Token [] modifiedTokens = new Token [originalTokens .length + 1 ];
512- modifiedTokens [modifiedTokens .length - 1 ] = Token .PSK ;
513- System .arraycopy (originalTokens , 0 , modifiedTokens , 0 , originalTokens .length );
514-
515- modifiedHandshakeMessagePatterns [pskIndex - 1 ] = new MessagePattern (modifiedHandshakeMessagePatterns [pskIndex - 1 ].sender , modifiedTokens );
516- }
494+ private MessagePattern [][] getPatternsWithFallbackModifier () {
495+ if (!isValidFallbackMessagePattern (handshakeMessagePatterns [0 ])) {
496+ throw new IllegalStateException ("Cannot generate fallback pattern; first message pattern is not a fallback-eligible message pattern" );
497+ }
498+
499+ final MessagePattern [] modifiedPreMessagePatterns = new MessagePattern [getPreMessagePatterns ().length + 1 ];
500+ final MessagePattern [] modifiedHandshakeMessagePatterns =
501+ new MessagePattern [getHandshakeMessagePatterns ().length - 1 ];
502+
503+ System .arraycopy (getPreMessagePatterns (), 0 , modifiedPreMessagePatterns , 0 , getPreMessagePatterns ().length );
504+ modifiedPreMessagePatterns [modifiedPreMessagePatterns .length - 1 ] = getHandshakeMessagePatterns ()[0 ];
505+
506+ System .arraycopy (getHandshakeMessagePatterns (), 1 , modifiedHandshakeMessagePatterns ,
507+ 0 , getHandshakeMessagePatterns ().length - 1 );
508+
509+ return new MessagePattern [][] { modifiedPreMessagePatterns , modifiedHandshakeMessagePatterns };
510+ }
511+
512+ private MessagePattern [][] getPatternsWithPskModifier (final String modifier ) {
513+ final int pskIndex = Integer .parseInt (modifier .substring ("psk" .length ()));
514+
515+ final MessagePattern [] modifiedPreMessagePatterns = getPreMessagePatterns ().clone ();
516+ final MessagePattern [] modifiedHandshakeMessagePatterns = getHandshakeMessagePatterns ().clone ();
517+
518+ if (pskIndex == 0 ) {
519+ // Insert a PSK token at the start of the first message
520+ final Token [] originalTokens = modifiedHandshakeMessagePatterns [0 ].tokens ();
521+ final Token [] modifiedTokens = new Token [originalTokens .length + 1 ];
522+ modifiedTokens [0 ] = Token .PSK ;
523+ System .arraycopy (originalTokens , 0 , modifiedTokens , 1 , originalTokens .length );
524+
525+ modifiedHandshakeMessagePatterns [0 ] =
526+ new MessagePattern (modifiedHandshakeMessagePatterns [0 ].sender , modifiedTokens );
517527 } else {
518- throw new IllegalArgumentException ("Unrecognized modifier: " + modifier );
528+ // Insert a PSK at the end of the N-1st message
529+ final Token [] originalTokens = modifiedHandshakeMessagePatterns [pskIndex - 1 ].tokens ();
530+ final Token [] modifiedTokens = new Token [originalTokens .length + 1 ];
531+ modifiedTokens [modifiedTokens .length - 1 ] = Token .PSK ;
532+ System .arraycopy (originalTokens , 0 , modifiedTokens , 0 , originalTokens .length );
533+
534+ modifiedHandshakeMessagePatterns [pskIndex - 1 ] =
535+ new MessagePattern (modifiedHandshakeMessagePatterns [pskIndex - 1 ].sender , modifiedTokens );
519536 }
520537
538+ return new MessagePattern [][] { modifiedPreMessagePatterns , modifiedHandshakeMessagePatterns };
539+ }
540+
541+ private String getModifiedName (final String modifier ) {
521542 final String modifiedName ;
522543
523544 if (getName ().equals (getFundamentalPatternName (getName ()))) {
@@ -527,7 +548,7 @@ HandshakePattern withModifier(final String modifier) {
527548 modifiedName = getName () + "+" + modifier ;
528549 }
529550
530- return new HandshakePattern ( modifiedName , modifiedPreMessagePatterns , modifiedHandshakeMessagePatterns ) ;
551+ return modifiedName ;
531552 }
532553
533554 static boolean isValidFallbackMessagePattern (final MessagePattern messagePattern ) {
0 commit comments