Skip to content

Commit 0e3fc53

Browse files
committed
Java2Swift: Use @_nonoverride on generated convenience initializers
Swift has inheritance of initializers, while Java does not have inheritance of constructors. This means that Swift's attempt to treat a convenience initializer as an override within a subclass can cause problems with mismatched signatures. Use `@_nonoverride` to avoid this problem.
1 parent 7346359 commit 0e3fc53

File tree

2 files changed

+4
-3
lines changed

2 files changed

+4
-3
lines changed

Sources/Java2SwiftLib/JavaClassTranslator.swift

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -492,9 +492,10 @@ extension JavaClassTranslator {
492492
let throwsStr = javaConstructor.throwsCheckedException ? "throws" : ""
493493
let accessModifier = javaConstructor.isPublic ? "public " : ""
494494
let convenienceModifier = translateAsClass ? "convenience " : ""
495+
let nonoverrideAttribute = translateAsClass ? "@_nonoverride " : ""
495496
return """
496497
@JavaMethod
497-
\(raw: accessModifier)\(raw: convenienceModifier)init(\(raw: parametersStr))\(raw: throwsStr)
498+
\(raw: nonoverrideAttribute)\(raw: accessModifier)\(raw: convenienceModifier)init(\(raw: parametersStr))\(raw: throwsStr)
498499
"""
499500
}
500501

Tests/Java2SwiftTests/Java2SwiftTests.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -280,7 +280,7 @@ class Java2SwiftTests: XCTestCase {
280280
""",
281281
"""
282282
@JavaMethod
283-
public convenience init(environment: JNIEnvironment? = nil)
283+
@_nonoverride public convenience init(environment: JNIEnvironment? = nil)
284284
""",
285285
"""
286286
@JavaMethod
@@ -314,7 +314,7 @@ class Java2SwiftTests: XCTestCase {
314314
""",
315315
"""
316316
@JavaMethod
317-
public convenience init(environment: JNIEnvironment? = nil)
317+
@_nonoverride public convenience init(environment: JNIEnvironment? = nil)
318318
""",
319319
"""
320320
@JavaMethod

0 commit comments

Comments
 (0)