@@ -11,9 +11,9 @@ private newtype TParameterEx =
1111 TImplicitReceiverParameter ( Callable c ) {
1212 exists ( LocalVariable v | v .isImplicitReceiverParameter ( c ) )
1313 } or
14- TDefaultConstructorParameter ( ConstructorDeclaration cd , int i , string name ) {
14+ TDefaultConstructorParameter ( ConstructorDeclaration cd , int i , string name , boolean hasDefault ) {
1515 cd .hasModifier ( "generated" ) and
16- defaultConstructorParameter ( cd , i , name )
16+ defaultConstructorParameter ( cd , i , name , hasDefault )
1717 }
1818
1919final class ParameterEx = ParameterExImpl ;
@@ -42,7 +42,7 @@ abstract private class ParameterExImpl extends TParameterEx {
4242 * constructor `cd` with name `name`.
4343 */
4444 predicate isDefaultConstructorParameter ( ConstructorDeclaration cd , int i , string name ) {
45- this = TDefaultConstructorParameter ( cd , i , name )
45+ this = TDefaultConstructorParameter ( cd , i , name , _ )
4646 }
4747
4848 /** Gets the callable that this parameter belongs to. */
@@ -60,6 +60,12 @@ abstract private class ParameterExImpl extends TParameterEx {
6060 this .isDefaultConstructorParameter ( result , _, _)
6161 }
6262
63+ /** Holds if this parameter has a default value. */
64+ abstract predicate hasDefault ( ) ;
65+
66+ /** Gets the type declaration of this parameter, if any. */
67+ abstract AstNode getType ( ) ;
68+
6369 /** Gets a textual representation of this parameter. */
6470 abstract string toString ( ) ;
6571
@@ -72,6 +78,10 @@ private class AstParameterEx extends ParameterExImpl, TAstParameter {
7278
7379 AstParameterEx ( ) { this = TAstParameter ( p ) }
7480
81+ override predicate hasDefault ( ) { exists ( p .getDefault ( ) ) }
82+
83+ override AstNode getType ( ) { result = p .getType ( ) }
84+
7585 override string toString ( ) { result = p .toString ( ) }
7686
7787 override Location getLocation ( ) { result = p .getLocation ( ) }
@@ -82,6 +92,10 @@ private class ImplicitReceiverParameterEx extends ParameterExImpl, TImplicitRece
8292
8393 ImplicitReceiverParameterEx ( ) { this = TImplicitReceiverParameter ( c ) }
8494
95+ override predicate hasDefault ( ) { none ( ) }
96+
97+ override AstNode getType ( ) { none ( ) }
98+
8599 override string toString ( ) {
86100 exists ( LocalVariable v |
87101 v .isImplicitReceiverParameter ( c ) and
@@ -96,8 +110,13 @@ private class DefaultConstructorParameterEx extends ParameterExImpl, TDefaultCon
96110 ConstructorDeclaration cd ;
97111 int i ;
98112 string name ;
113+ boolean hasDefault ;
114+
115+ DefaultConstructorParameterEx ( ) { this = TDefaultConstructorParameter ( cd , i , name , hasDefault ) }
116+
117+ override AstNode getType ( ) { defaultConstructorParameterType ( cd , i , result ) }
99118
100- DefaultConstructorParameterEx ( ) { this = TDefaultConstructorParameter ( cd , i , name ) }
119+ override predicate hasDefault ( ) { hasDefault = true }
101120
102121 override string toString ( ) { result = name + " [" + cd .getName ( ) + " default constructor]" }
103122
0 commit comments