antlr / antlr/antlr4

[Swift] public override should override public method

Open
#2,807 1 comment 0 reactions 0 assignees View on GitHub
Dominant language
Java
Stars
19k
Forks
3.5k
PR merge metrics
No merged PRs in 30d

Description

When trying to generate an xcframework from the Swift runtime and using that in my application I bumped into some nasty errors:

```
/Users/martinvw/Library/Developer/Xcode/DerivedData/test-acqlbgtzsvmmgafvduarmjnwwrtr/Build/Products/Debug-iphonesimulator/Antlr4.framework/Modules/Antlr4.swiftmodule/x86_64-apple-ios-simulator.swiftinterface:244:19: error: initializer does not override a designated initializer from its superclass
override public init()
~~~~~~~~ ^
/Users/martinvw/Library/Developer/Xcode/DerivedData/test-acqlbgtzsvmmgafvduarmjnwwrtr/Build/Products/Debug-iphonesimulator/Antlr4.framework/Modules/Antlr4.swiftmodule/x86_64-apple-ios-simulator.swiftinterface:1089:31: error: initializer does not override a designated initializer from its superclass
convenience override public init(_ target: Antlr4.ATNState)
~~~~~~~~ ^
/Users/martinvw/Library/Developer/Xcode/DerivedData/test-acqlbgtzsvmmgafvduarmjnwwrtr/Build/Products/Debug-iphonesimulator/Antlr4.framework/Modules/Antlr4.swiftmodule/x86_64-apple-ios-simulator.swiftinterface:1558:21: error: initializer does not override a designated initializer from its superclass
override public init()
~~~~~~~~ ^
/Users/martinvw/Library/Developer/Xcode/DerivedData/test-acqlbgtzsvmmgafvduarmjnwwrtr/Build/Products/Debug-iphonesimulator/Antlr4.framework/Modules/Antlr4.swiftmodule/x86_64-apple-ios-simulator.swiftinterface:1684:19: error: initializer does not override a designated initializer from its superclass
override public init(_ target: Antlr4.ATNState)
~~~~~~~~ ^
/Users/martinvw/Library/Developer/Xcode/DerivedData/test-acqlbgtzsvmmgafvduarmjnwwrtr/Build/Products/Debug-iphonesimulator/CsdYaraIOS.framework/Modules/CsdYaraIOS.swiftmodule/x86_64-apple-ios-simulator.swiftinterface:4:8: error: failed to load module 'Antlr4'
import Antlr4

```

After a long search I ender up at: https://forums.swift.org/t/generated-swiftinterface-has-wrong-content/28543

Where the following message is the most relevant:

> doesn't have a public init, and so calling DisposeBag's init an override is incorrect from outside the module. However, I'm not sure we actually implement this correctly (where calling DisposeBag's init from a convenience initializer works without being able to see DisposeBase's init), so the broken interface is potentially protecting you from this issue.

And also:

> tested serval libraries and found it pretty common to get an error:
>
>correct: lottie-ios, SnapKit
got errors: Alamofire, SwiftyJSON, RxSwift
Here's a detail description to reproduce the errors:

So the `init` methods in the parent classes should also be public, I can/will create a PR for that when desired.

Contributor guide

Open the contributing guide

Research direction

The report concerns public initializers in the Swift runtime and generated .swiftinterface files during xcframework generation. Start by reproducing the reported module-loading errors and inspect the parent classes' initializer visibility. Done means the generated interfaces compile without override errors when the runtime is consumed as an xcframework.

Written by the indexing model from the issue text.

Assessment

Tech stack
swift
Domain
build-system, mobile-dev
Issue type
Bug
Difficulty
3/5
Estimated time
1-2 days
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
35/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.