@@ -541,20 +541,25 @@ public static CastToNode getUncached() {
541
541
*/
542
542
public final Object findTypeOrNull (
543
543
Type type , EnsoMultiValue mv , boolean reorderOnly , boolean allTypes ) {
544
- var i = findNode .executeFindIndex (type , mv .dispatch );
544
+ var dispatch = mv .dispatch ;
545
+ var i = findNode .executeFindIndex (type , dispatch );
545
546
if (i == -1 && allTypes ) {
546
547
var extraIndex = findNode .executeFindIndex (type , mv .extra );
547
- i = extraIndex == -1 ? -1 : mv . dispatch .typesLength () + extraIndex ;
548
+ i = extraIndex == -1 ? -1 : dispatch .typesLength () + extraIndex ;
548
549
}
549
550
if (i != -1 ) {
550
551
if (reorderOnly ) {
551
- var copyTypes = allTypesWith .executeAllTypes (mv .dispatch , mv .extra );
552
- var copyValues = mv .values .clone ();
553
- copyTypes [0 ] = copyTypes [i ];
554
- copyValues [0 ] = copyValues [i ];
555
- copyTypes [i ] = mv .dispatch .firstType ();
556
- copyValues [i ] = mv .values [0 ];
557
- return newNode .newValue (copyTypes , 1 , copyValues );
552
+ var copyTypes = allTypesWith .executeAllTypes (dispatch , mv .extra );
553
+ if (i == 0 && dispatch .typesLength () == 1 ) {
554
+ return newNode .newValue (copyTypes , 1 , mv .values );
555
+ } else {
556
+ var copyValues = mv .values .clone ();
557
+ copyTypes [0 ] = copyTypes [i ];
558
+ copyValues [0 ] = copyValues [i ];
559
+ copyTypes [i ] = dispatch .firstType ();
560
+ copyValues [i ] = mv .values [0 ];
561
+ return newNode .newValue (copyTypes , 1 , copyValues );
562
+ }
558
563
} else {
559
564
return mv .values [i ];
560
565
}
0 commit comments