@@ -54,21 +54,41 @@ private string genericCollectionTypeName() {
5454 ]
5555}
5656
57- /** A collection type. */
58- class CollectionType extends RefType {
59- CollectionType ( ) {
57+ /** A collection type */
58+ abstract private class CollectionTypeImpl extends RefType {
59+ abstract Type getElementType ( ) ;
60+ }
61+
62+ private class GenericCollectionType extends CollectionTypeImpl {
63+ private ConstructedType base ;
64+
65+ GenericCollectionType ( ) {
66+ base = this .getABaseType * ( ) and
67+ base .getUnboundGeneric ( )
68+ .hasFullyQualifiedName ( genericCollectionNamespaceName ( ) , genericCollectionTypeName ( ) )
69+ }
70+
71+ override Type getElementType ( ) {
72+ result = base .getTypeArgument ( 0 ) and base .getNumberOfTypeArguments ( ) = 1
73+ }
74+ }
75+
76+ private class NonGenericCollectionType extends CollectionTypeImpl {
77+ NonGenericCollectionType ( ) {
6078 exists ( RefType base | base = this .getABaseType * ( ) |
6179 base .hasFullyQualifiedName ( collectionNamespaceName ( ) , collectionTypeName ( ) )
62- or
63- base .( ConstructedType )
64- .getUnboundGeneric ( )
65- .hasFullyQualifiedName ( genericCollectionNamespaceName ( ) , genericCollectionTypeName ( ) )
6680 )
67- or
68- this instanceof ArrayType
6981 }
82+
83+ override Type getElementType ( ) { none ( ) }
7084}
7185
86+ private class ArrayCollectionType extends CollectionTypeImpl instanceof ArrayType {
87+ override Type getElementType ( ) { result = ArrayType .super .getElementType ( ) }
88+ }
89+
90+ final class CollectionType = CollectionTypeImpl ;
91+
7292/**
7393 * A collection type that can be used as a `params` parameter type.
7494 */
0 commit comments