Skip to content

Read final from trait aliases - #892

Merged
Firehed merged 4 commits into
mainfrom
891/alias-final
Oct 30, 2026
Merged

Firehed merged 4 commits into
mainfrom
891/alias-final

Conversation

@Firehed

@Firehed Firehed commented Oct 30, 2026

Copy link
Copy Markdown
Owner

Closes #891.

A trait adaptation can make a method final, with or without renaming it or changing its visibility:

class C {
    use T {
        run as final protected;
        stop as final;
    }
}

The server ignored the final, so hover showed these methods without it. Worse, stop as final, with no visibility written, was read as making stop public, whatever its own visibility.

Change

  • TraitAlias records whether the adaptation adds final (addsFinal). PHP lets an adaptation add final, never remove it.
  • Reading source, an adaptation's visibility is recorded only when one is written; otherwise the method keeps its own.
  • The method a class gets through such an alias is final.

Tests

  • ParsedDeclarationSourceTest reads both forms from TraitCompositionUser, which gains a renaming as final and a final-only adaptation.
  • MemberResolverTypeGraphTest now also compares whether each public method is final with PHP's reflection, across every fixture class.

🤖 Generated with Claude Code

Firehed and others added 3 commits October 29, 2026 17:39
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@codecov

codecov Bot commented Oct 30, 2026 •

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 99.70%. Comparing base (2e54eaa) to head (c3d299f).
✅ All tests successful. No failed tests found.

Additional details and impacted files
@@            Coverage Diff            @@
##               main     #892   +/-   ##
=========================================
  Coverage     99.70%   99.70%           
- Complexity     1969     1970    +1     
=========================================
  Files           147      147           
  Lines          4479     4481    +2     
=========================================
+ Hits           4466     4468    +2     
  Misses           13       13           

☔ View full report in Codecov by Harness.
📢 Have feedback on the report? Share it here.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@Firehed
Firehed marked this pull request as ready for review October 30, 2026 00:48
@Firehed
Firehed merged commit c82b088 into main Oct 30, 2026
8 checks passed
@Firehed
Firehed deleted the 891/alias-final branch October 30, 2026 00:50
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Trait aliases must carry a final modifier

1 participant