@@ -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 /**
@@ -271,6 +271,11 @@ module AssignableInternal {
271271 def = TPatternDefinition ( result )
272272 or
273273 def = TAssignOperationDefinition ( result )
274+ or
275+ exists ( Parameter p |
276+ def = TImplicitParameterDefinition ( p , true ) and
277+ result = p .getDefaultValue ( )
278+ )
274279 }
275280
276281 /** A local variable declaration at the top-level of a pattern. */
@@ -304,12 +309,18 @@ module AssignableInternal {
304309 not lvde instanceof TopLevelPatternDecl and
305310 not lvde .isOutArgument ( )
306311 } or
307- TImplicitParameterDefinition ( Parameter p ) {
312+ TImplicitParameterDefinition ( Parameter p , boolean isDefault ) {
308313 exists ( Callable c | p = c .getAParameter ( ) |
309314 c .hasBody ( )
310315 or
311316 // Same as `c.(Constructor).hasInitializer()`, but avoids negative recursion warning
312317 c .getAChildExpr ( ) instanceof @constructor_init_expr
318+ ) and
319+ (
320+ isDefault = false
321+ or
322+ p .hasDefaultValue ( ) and
323+ isDefault = true
313324 )
314325 } or
315326 TAddressOfDefinition ( AddressOfExpr aoe ) or
@@ -673,7 +684,7 @@ module AssignableDefinitions {
673684 class ImplicitParameterDefinition extends AssignableDefinition , TImplicitParameterDefinition {
674685 Parameter p ;
675686
676- ImplicitParameterDefinition ( ) { this = TImplicitParameterDefinition ( p ) }
687+ ImplicitParameterDefinition ( ) { this = TImplicitParameterDefinition ( p , false ) }
677688
678689 /** Gets the underlying parameter. */
679690 Parameter getParameter ( ) { result = p }
@@ -688,7 +699,27 @@ module AssignableDefinitions {
688699
689700 override string toString ( ) { result = p .toString ( ) }
690701
691- override Location getLocation ( ) { result = this .getTarget ( ) .getLocation ( ) }
702+ override Location getLocation ( ) { result = p .getLocation ( ) }
703+ }
704+
705+ /**
706+ * A default value assigned to a parameter.
707+ */
708+ class ParameterDefaultDefinition extends AssignableDefinition , TImplicitParameterDefinition {
709+ Parameter p ;
710+
711+ ParameterDefaultDefinition ( ) { this = TImplicitParameterDefinition ( p , true ) }
712+
713+ /** Gets the underlying parameter. */
714+ Parameter getParameter ( ) { result = p }
715+
716+ override Expr getElement ( ) { result = p .getDefaultValue ( ) }
717+
718+ override Callable getEnclosingCallable ( ) { result = p .getCallable ( ) }
719+
720+ override string toString ( ) { result = p .getDefaultValue ( ) .toString ( ) }
721+
722+ override Location getLocation ( ) { result = p .getDefaultValue ( ) .getLocation ( ) }
692723 }
693724
694725 /**
0 commit comments