From 612f2ef3f434704226191805f9347fec2db40317 Mon Sep 17 00:00:00 2001 From: Ebrahim Byagowi Date: Tue, 3 May 2022 00:32:34 +0430 Subject: [PATCH 1/2] jvm demos: Apply IDE provided suggestions --- .../github/cosinekitty/astronomy/demo/Main.java | 13 ++++++------- demo/kotlin/src/main/kotlin/Main.kt | 17 +++++++++-------- 2 files changed, 15 insertions(+), 15 deletions(-) diff --git a/demo/java/src/main/java/io/github/cosinekitty/astronomy/demo/Main.java b/demo/java/src/main/java/io/github/cosinekitty/astronomy/demo/Main.java index 16f6c5d5..40a2e6a1 100644 --- a/demo/java/src/main/java/io/github/cosinekitty/astronomy/demo/Main.java +++ b/demo/java/src/main/java/io/github/cosinekitty/astronomy/demo/Main.java @@ -6,7 +6,7 @@ import java.time.format.DateTimeParseException; import io.github.cosinekitty.astronomy.*; public class Main { - private static String usageText = String.join(System.getProperty("line.separator"), + private static final String usageText = String.join(System.getProperty("line.separator"), "Command line arguments:", "", " jupiter_moons [yyyy-mm-ddThh:mm:ssZ]", @@ -49,8 +49,7 @@ public class Main { try { String verb = args[0]; boolean found = false; - for (int i = 0; i < demoList.length; ++i) { - Demo demo = demoList[i]; + for (Demo demo : demoList) { if (demo.name.equals(verb)) { found = true; if (args.length >= demo.minArgs && args.length <= demo.maxArgs) { @@ -75,7 +74,7 @@ public class Main { System.exit(rc); } - private static Time parseTime(String args[], int index) { + private static Time parseTime(String[] args, int index) { long millis = (index >= 0 && index < args.length) ? Instant.parse(args[index]).toEpochMilli() @@ -114,8 +113,8 @@ public class Main { return new Observer(latitude, longitude, 0.0); } - private static interface DemoRunner { - public int run(String[] args) throws DemoException; + private interface DemoRunner { + int run(String[] args) throws DemoException; } private static class Demo { @@ -132,7 +131,7 @@ public class Main { } } - private static Demo[] demoList = new Demo[] { + private static final Demo[] demoList = new Demo[] { new Demo("jupiter_moons", 1, 2, args -> JupiterMoons.run( parseTime(args, 1) diff --git a/demo/kotlin/src/main/kotlin/Main.kt b/demo/kotlin/src/main/kotlin/Main.kt index 1623ba8c..f7cdc6c1 100644 --- a/demo/kotlin/src/main/kotlin/Main.kt +++ b/demo/kotlin/src/main/kotlin/Main.kt @@ -1,8 +1,9 @@ import java.time.Instant import java.time.format.DateTimeParseException import io.github.cosinekitty.astronomy.* +import kotlin.system.exitProcess -private val usageText = """ +private const val usageText = """ Command line arguments: jupiter_moons [yyyy-mm-ddThh:mm:ssZ] @@ -44,28 +45,28 @@ internal class Demo( ) fun main(args: Array) { - System.exit(runDemo(args)) + exitProcess(runDemo(args)) } class DemoException(message:String): Exception(message) internal fun runDemo(args: Array): Int { - if (args.size > 0) { - val verb = args[0]; + if (args.isNotEmpty()) { + val verb = args[0] for (demo in demoList) { if (demo.name == verb) { if (args.size < demo.minArgs || args.size > demo.maxArgs) { println("ERROR: Incorrect number of command-line arguments.") return 1 } - try { - return demo.func(args) + return try { + demo.func(args) } catch (_: DateTimeParseException) { println("ERROR: Invalid date/time format on command line.") - return 1 + 1 } catch (e: DemoException) { println("ERROR: ${e.message}") - return 1 + 1 } } } From 6c55d15778bff2b3875277192e7db68c0a46ed9b Mon Sep 17 00:00:00 2001 From: Ebrahim Byagowi Date: Tue, 3 May 2022 01:23:40 +0430 Subject: [PATCH 2/2] jvm demos: Simplify main function Also makes the two more similar. --- .../cosinekitty/astronomy/demo/Main.java | 67 ++++++++++--------- demo/kotlin/src/main/kotlin/Main.kt | 45 ++++++------- 2 files changed, 58 insertions(+), 54 deletions(-) diff --git a/demo/java/src/main/java/io/github/cosinekitty/astronomy/demo/Main.java b/demo/java/src/main/java/io/github/cosinekitty/astronomy/demo/Main.java index 40a2e6a1..18928d3f 100644 --- a/demo/java/src/main/java/io/github/cosinekitty/astronomy/demo/Main.java +++ b/demo/java/src/main/java/io/github/cosinekitty/astronomy/demo/Main.java @@ -2,6 +2,9 @@ package io.github.cosinekitty.astronomy.demo; import java.time.Instant; import java.time.format.DateTimeParseException; +import java.util.Arrays; +import java.util.List; +import java.util.Optional; import io.github.cosinekitty.astronomy.*; @@ -35,6 +38,11 @@ public class Main { "" ); + private static int printUsage() { + System.out.println(usageText); + return 1; + } + private static class DemoException extends Exception { public DemoException(String message) { super(message); @@ -42,36 +50,33 @@ public class Main { } public static void main(String[] args) { - int rc = 1; - if (args.length == 0) { - System.out.println(usageText); - } else { - try { - String verb = args[0]; - boolean found = false; - for (Demo demo : demoList) { - if (demo.name.equals(verb)) { - found = true; - if (args.length >= demo.minArgs && args.length <= demo.maxArgs) { - rc = demo.runner.run(args); - } else { - System.out.println(usageText); - } - break; - } - } - if (!found) { - System.out.printf("ERROR: Unknown command '%s'.%n", verb); - } - } catch (DateTimeParseException e) { - System.out.println("ERROR: Invalid date/time format on command line."); - rc = 1; - } catch (DemoException e) { - System.out.printf("ERROR: %s%n", e.getMessage()); - rc = 1; - } + System.exit(runDemos(args)); + } + + private static int runDemos(String[] args) { + if (args.length == 0) return printUsage(); + String verb = args[0]; + Optional foundDemo = demoList.stream() + .filter(demo -> demo.name.equals(verb)) + .findFirst(); + if (foundDemo.isEmpty()) { + System.out.printf("ERROR: Unknown command '%s'.%n", verb); + return 1; + } + Demo demo = foundDemo.get(); + if (args.length < demo.minArgs || args.length > demo.maxArgs) { + System.out.println("ERROR: Incorrect number of command-line arguments."); + return 1; + } + try { + return demo.runner.run(args); + } catch (DateTimeParseException e) { + System.out.println("ERROR: Invalid date/time format on command line."); + return 1; + } catch (DemoException e) { + System.out.printf("ERROR: %s%n", e.getMessage()); + return 1; } - System.exit(rc); } private static Time parseTime(String[] args, int index) { @@ -131,7 +136,7 @@ public class Main { } } - private static final Demo[] demoList = new Demo[] { + private static final List demoList = Arrays.asList( new Demo("jupiter_moons", 1, 2, args -> JupiterMoons.run( parseTime(args, 1) @@ -153,5 +158,5 @@ public class Main { parseYear(args[1]) ) ) - }; + ); } diff --git a/demo/kotlin/src/main/kotlin/Main.kt b/demo/kotlin/src/main/kotlin/Main.kt index f7cdc6c1..f5114395 100644 --- a/demo/kotlin/src/main/kotlin/Main.kt +++ b/demo/kotlin/src/main/kotlin/Main.kt @@ -32,7 +32,7 @@ Command line arguments: """ -internal fun printUsage(): Int { +private fun printUsage(): Int { println(usageText) return 1 } @@ -50,28 +50,27 @@ fun main(args: Array) { class DemoException(message:String): Exception(message) -internal fun runDemo(args: Array): Int { - if (args.isNotEmpty()) { - val verb = args[0] - for (demo in demoList) { - if (demo.name == verb) { - if (args.size < demo.minArgs || args.size > demo.maxArgs) { - println("ERROR: Incorrect number of command-line arguments.") - return 1 - } - return try { - demo.func(args) - } catch (_: DateTimeParseException) { - println("ERROR: Invalid date/time format on command line.") - 1 - } catch (e: DemoException) { - println("ERROR: ${e.message}") - 1 - } - } - } +private fun runDemo(args: Array): Int { + if (args.isEmpty()) return printUsage() + val verb = args[0] + val demo = demoList.firstOrNull { it.name == verb } + if (demo == null) { + println("ERROR: Unknown command '$verb'.") + return 1 + } + if (args.size < demo.minArgs || args.size > demo.maxArgs) { + println("ERROR: Incorrect number of command-line arguments.") + return 1 + } + return try { + demo.func(args) + } catch (_: DateTimeParseException) { + println("ERROR: Invalid date/time format on command line.") + 1 + } catch (e: DemoException) { + println("ERROR: ${e.message}") + 1 } - return printUsage() } internal fun parseTime(args: Array, index: Int): Time { @@ -114,7 +113,7 @@ internal fun parseObserver(args: Array, index: Int): Observer { return Observer(latitude, longitude, 0.0) } -internal val demoList = arrayOf( +internal val demoList = listOf( Demo("jupiter_moons", 1, 2) { args -> `Jupiter moons demo`( parseTime(args, 1)