@@ -678,13 +678,13 @@ class ArrayLiteral extends Literal, TArrayLiteral {
678678 final override string getAPrimaryQlClass ( ) { result = "ArrayLiteral" }
679679
680680 /** Gets the `n`th element in this array literal. */
681- Expr getElement ( int n ) { none ( ) }
681+ final Expr getElement ( int n ) { result = this . ( ArrayLiteralImpl ) . getElementImpl ( n ) }
682682
683683 /** Gets an element in this array literal. */
684684 final Expr getAnElement ( ) { result = this .getElement ( _) }
685685
686686 /** Gets the number of elements in this array literal. */
687- final int getNumberOfElements ( ) { result = count ( this .getAnElement ( ) ) }
687+ final int getNumberOfElements ( ) { result = this .( ArrayLiteralImpl ) . getNumberOfElementsImpl ( ) }
688688
689689 final override AstNode getAChild ( string pred ) {
690690 result = super .getAChild ( pred )
@@ -693,32 +693,44 @@ class ArrayLiteral extends Literal, TArrayLiteral {
693693 }
694694}
695695
696- private class RegularArrayLiteral extends ArrayLiteral , TRegularArrayLiteral {
696+ abstract private class ArrayLiteralImpl extends ArrayLiteral {
697+ abstract Expr getElementImpl ( int n ) ;
698+
699+ abstract int getNumberOfElementsImpl ( ) ;
700+ }
701+
702+ private class RegularArrayLiteral extends ArrayLiteralImpl , TRegularArrayLiteral {
697703 private Ruby:: Array g ;
698704
699705 RegularArrayLiteral ( ) { this = TRegularArrayLiteral ( g ) }
700706
701- final override Expr getElement ( int i ) { toGenerated ( result ) = g .getChild ( i ) }
707+ final override Expr getElementImpl ( int i ) { toGenerated ( result ) = g .getChild ( i ) }
708+
709+ final override int getNumberOfElementsImpl ( ) { result = count ( g .getChild ( _) ) }
702710
703711 final override string toString ( ) { result = "[...]" }
704712}
705713
706- private class StringArrayLiteral extends ArrayLiteral , TStringArrayLiteral {
714+ private class StringArrayLiteral extends ArrayLiteralImpl , TStringArrayLiteral {
707715 private Ruby:: StringArray g ;
708716
709717 StringArrayLiteral ( ) { this = TStringArrayLiteral ( g ) }
710718
711- final override Expr getElement ( int i ) { toGenerated ( result ) = g .getChild ( i ) }
719+ final override Expr getElementImpl ( int i ) { toGenerated ( result ) = g .getChild ( i ) }
720+
721+ final override int getNumberOfElementsImpl ( ) { result = count ( g .getChild ( _) ) }
712722
713723 final override string toString ( ) { result = "%w(...)" }
714724}
715725
716- private class SymbolArrayLiteral extends ArrayLiteral , TSymbolArrayLiteral {
726+ private class SymbolArrayLiteral extends ArrayLiteralImpl , TSymbolArrayLiteral {
717727 private Ruby:: SymbolArray g ;
718728
719729 SymbolArrayLiteral ( ) { this = TSymbolArrayLiteral ( g ) }
720730
721- final override Expr getElement ( int i ) { toGenerated ( result ) = g .getChild ( i ) }
731+ final override Expr getElementImpl ( int i ) { toGenerated ( result ) = g .getChild ( i ) }
732+
733+ final override int getNumberOfElementsImpl ( ) { result = count ( g .getChild ( _) ) }
722734
723735 final override string toString ( ) { result = "%i(...)" }
724736}
0 commit comments