Skip to content

SwiftExtract: distinguish protocol requirements from default implementations and extension members - #934

Open
Hokila wants to merge 1 commit into
swiftlang:mainfrom
Hokila:fix-891-swift-extract-requirements
Open

Hokila wants to merge 1 commit into
swiftlang:mainfrom
Hokila:fix-891-swift-extract-requirements

Conversation

@Hokila

@Hokila Hokila commented Oct 15, 2026 •

Copy link
Copy Markdown
Contributor

Fixes #891 (replace #916).

  1. Primarily modify SwiftExtract to separate members into three distinct categories: protocol requirements, default implementations, and extension members, instead of directly appending extensions to ExtractedNominalType.methods.
  2. Defer unconstrained protocol extensions until all nominal declarations are indexed: store matched default implementations in protocolDefaultImplementations, and store non-requirement extension members in protocolExtensionMethods / protocolExtensionVariables.
  3. Validate protocol requirements in supportedProtocolRequirements to avoid cache poisoning caused by premature method name caching in translatedDecl(for:).

Testing

• swift test --filter JNIProtocolTests
• swift test --filter SwiftExtractTests

…tations and extension members

- Fixes swiftlang#891 at collection time by distinguishing genuine protocol requirements
  from default implementations and extension members in SwiftExtract.
- Defer unconstrained protocol extensions until all nominal declarations are visited,
  ensuring all requirements are populated before matching default implementations.
- Record default implementations in ExtractedNominalType.protocolDefaultImplementations
  and non-requirement extension members in protocolExtensionMethods / protocolExtensionVariables.
- Add regression tests covering default implementations and extension members.
@Hokila
Hokila force-pushed the fix-891-swift-extract-requirements branch from a7ad721 to 99645f6 Compare October 16, 2026 00:45
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.

Compilation error for default protocol function implementation: "invalid redeclaration of..."

1 participant