@@ -204,7 +204,7 @@ private class RefArg extends AssignableAccess {
204204 AssignableDefinition getAnAnalyzableRefDef ( Parameter p ) {
205205 this .isAnalyzable ( p ) and
206206 result .getTarget ( ) = p and
207- not result = TImplicitParameterDefinition ( _, _ )
207+ not result = TImplicitParameterDefinition ( _)
208208 }
209209
210210 /**
@@ -272,10 +272,7 @@ module AssignableInternal {
272272 or
273273 def = TAssignOperationDefinition ( result )
274274 or
275- exists ( Parameter p |
276- def = TImplicitParameterDefinition ( p , true ) and
277- result = p .getDefaultValue ( )
278- )
275+ def = TParameterDefaultDefinition ( _, result )
279276 }
280277
281278 /** A local variable declaration at the top-level of a pattern. */
@@ -309,20 +306,21 @@ module AssignableInternal {
309306 not lvde instanceof TopLevelPatternDecl and
310307 not lvde .isOutArgument ( )
311308 } or
312- TImplicitParameterDefinition ( Parameter p , boolean isDefault ) {
309+ TImplicitParameterDefinition ( Parameter p ) {
313310 exists ( Callable c | p = c .getAParameter ( ) |
314311 c .hasBody ( )
315312 or
316- // Same as `c.(Constructor).hasInitializer()`, but avoids negative recursion warning
317- c .getAChildExpr ( ) instanceof @constructor_init_expr
318- ) and
319- (
320- isDefault = false
321- or
322- p .hasDefaultValue ( ) and
323- isDefault = true
313+ c .( Constructor ) .hasInitializer ( )
324314 )
325315 } or
316+ TParameterDefaultDefinition ( Parameter p , Expr default ) {
317+ exists ( Callable c | p = c .getAParameter ( ) |
318+ c .hasBody ( )
319+ or
320+ c .( Constructor ) .hasInitializer ( )
321+ ) and
322+ default = p .getDefaultValue ( )
323+ } or
326324 TAddressOfDefinition ( AddressOfExpr aoe ) or
327325 TPatternDefinition ( TopLevelPatternDecl tlpd ) or
328326 TAssignOperationDefinition ( AssignOperation ao ) {
@@ -361,7 +359,7 @@ module AssignableInternal {
361359 or
362360 def = any ( AssignableDefinitions:: InitializerDefinition init | result = init .getAssignable ( ) )
363361 or
364- def = TImplicitParameterDefinition ( result , _)
362+ def = TParameterDefaultDefinition ( result , _)
365363 }
366364
367365 // Not defined by dispatch in order to avoid too conservative negative recursion error
@@ -681,7 +679,7 @@ module AssignableDefinitions {
681679 class ImplicitParameterDefinition extends AssignableDefinition , TImplicitParameterDefinition {
682680 Parameter p ;
683681
684- ImplicitParameterDefinition ( ) { this = TImplicitParameterDefinition ( p , false ) }
682+ ImplicitParameterDefinition ( ) { this = TImplicitParameterDefinition ( p ) }
685683
686684 /** Gets the underlying parameter. */
687685 Parameter getParameter ( ) { result = p }
@@ -702,26 +700,27 @@ module AssignableDefinitions {
702700 /**
703701 * A default value assigned to a parameter.
704702 */
705- class ParameterDefaultDefinition extends AssignableDefinition , TImplicitParameterDefinition {
703+ class ParameterDefaultDefinition extends AssignableDefinition , TParameterDefaultDefinition {
706704 Parameter p ;
705+ Expr default ;
707706
708- ParameterDefaultDefinition ( ) { this = TImplicitParameterDefinition ( p , true ) }
707+ ParameterDefaultDefinition ( ) { this = TParameterDefaultDefinition ( p , default ) }
709708
710709 /** Gets the underlying parameter. */
711710 Parameter getParameter ( ) { result = p }
712711
713712 /** Gets the default value expression for the parameter. */
714- Expr getDefaultValue ( ) { result = p . getDefaultValue ( ) }
713+ Expr getDefaultValue ( ) { result = default }
715714
716- override Expr getSource ( ) { result = p . getDefaultValue ( ) }
715+ override Expr getSource ( ) { result = default }
717716
718- override Expr getElement ( ) { result = p . getDefaultValue ( ) }
717+ override Expr getElement ( ) { result = default }
719718
720719 override Callable getEnclosingCallable ( ) { result = p .getCallable ( ) }
721720
722721 override string toString ( ) { result = p .toString ( ) + " = ..." }
723722
724- override Location getLocation ( ) { result = p . getDefaultValue ( ) .getLocation ( ) }
723+ override Location getLocation ( ) { result = default .getLocation ( ) }
725724 }
726725
727726 /**
0 commit comments