Skip to content

Commit eca2feb

Browse files
authored
jextract/jni: Use switch expressions in getCase() (#717)
1 parent 2b8aa85 commit eca2feb

3 files changed

Lines changed: 9 additions & 11 deletions

File tree

Sources/CodePrinting/CodePrinter.swift

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,7 @@ public struct CodePrinter {
9191
public mutating func printBraceBlock(
9292
_ header: Any,
9393
parameters: [String]? = nil,
94+
_ terminator: PrinterTerminator = .sloc,
9495
function: String = #function,
9596
file: String = #fileID,
9697
line: UInt = #line,
@@ -104,7 +105,7 @@ public struct CodePrinter {
104105
indent()
105106
try body(&self)
106107
outdent()
107-
print("}", .sloc, function: function, file: file, line: line)
108+
print("}", terminator, function: function, file: file, line: line)
108109
}
109110

110111
public mutating func printIfBlock(
@@ -224,6 +225,7 @@ public enum PrinterTerminator: String {
224225
case commaNewLine = ",\n"
225226
case `continue` = ""
226227
case sloc = "// <source location>"
228+
case semicolonNewLine = ";\n"
227229

228230
public static func parameterSeparator(_ isLast: Bool) -> Self {
229231
if isLast {

Sources/JExtractSwiftLib/JNI/JNISwift2JavaGenerator+JavaBindingsPrinting.swift

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -528,19 +528,17 @@ extension JNISwift2JavaGenerator {
528528
}.contains(where: \.requiresSwiftArena)
529529

530530
printer.printBraceBlock("public Case getCase(\(requiresSwiftArena ? "SwiftArena swiftArena" : ""))") { printer in
531-
printer.print("Discriminator discriminator = this.getDiscriminator();")
532-
printer.printBraceBlock("switch (discriminator)") { printer in
531+
printer.printBraceBlock("return switch (this.getDiscriminator())", .semicolonNewLine) { printer in
533532
for enumCase in decl.cases {
534533
guard let translatedCase = self.translatedEnumCase(for: enumCase) else {
535534
continue
536535
}
537536
let arenaArgument = translatedCase.requiresSwiftArena ? "swiftArena" : ""
538537
printer.print(
539-
"case \(enumCase.name.uppercased()): return this.getAs\(enumCase.name.firstCharacterUppercased)(\(arenaArgument)).orElseThrow();"
538+
"case \(enumCase.name.uppercased()) -> this.getAs\(enumCase.name.firstCharacterUppercased)(\(arenaArgument)).orElseThrow();"
540539
)
541540
}
542541
}
543-
printer.print(#"throw new RuntimeException("Unknown discriminator value " + discriminator);"#)
544542
}
545543
}
546544

Tests/JExtractSwiftTests/JNI/JNIEnumTests.swift

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -177,13 +177,11 @@ struct JNIEnumTests {
177177
""",
178178
"""
179179
public Case getCase() {
180-
Discriminator discriminator = this.getDiscriminator();
181-
switch (discriminator) {
182-
case FIRST: return this.getAsFirst().orElseThrow();
183-
case SECOND: return this.getAsSecond().orElseThrow();
184-
case THIRD: return this.getAsThird().orElseThrow();
180+
return switch (this.getDiscriminator()) {
181+
case FIRST -> this.getAsFirst().orElseThrow();
182+
case SECOND -> this.getAsSecond().orElseThrow();
183+
case THIRD -> this.getAsThird().orElseThrow();
185184
}
186-
throw new RuntimeException("Unknown discriminator value " + discriminator);
187185
}
188186
""",
189187
]

0 commit comments

Comments
 (0)