You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
No state hints when an overload with the same arity hides an inherited refinement #463
Impact: a refinement in a superclass's spec is not used for hints on a subclass receiver when some class in between declares an overload with the same name and number of parameters. The error has no hints at all, although the fix is a single call the spec describes.
Actual (main @ 19991d3, and with the PR for #456): found noPopup(f) but expected hasPopup(f) with no hints. Main has no hints because the machine is only built from Frame's own spec. With #456, the state machine for a Frame receiver includes inherited refinements, but only when the nearest type that declares a method with that name and number of parameters is the type the refinement is written for. Container declares add(Component), which also has one parameter, so Component.add(PopupMenu) is left out (the machine is marked incomplete, so the hints stay sound).
Expected:
Hints:
- Call f.add(PopupMenu) before this call to move f from noPopup to hasPopup
To get there, StateMachineBuilder should match a declaring method by its erased parameter types, and fall back to the number of parameters only when the types cannot be compared (e.g. type variables).
Activity
Give state hints when the state set or methods come from the receiver…