You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@avro.apache.org by dk...@apache.org on 2020/05/29 13:10:30 UTC

[avro] branch master updated: [AVRO-2649] Better fix for allowing args in various orders

This is an automated email from the ASF dual-hosted git repository.

dkulp pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/avro.git


The following commit(s) were added to refs/heads/master by this push:
     new 1c5e32d  [AVRO-2649] Better fix for allowing args in various orders
1c5e32d is described below

commit 1c5e32d2b98e193ea048f8ece8ee3984c6165bfe
Author: Daniel Kulp <dk...@apache.org>
AuthorDate: Fri May 29 09:09:45 2020 -0400

    [AVRO-2649] Better fix for allowing args in various orders
---
 .../org/apache/avro/tool/SpecificCompilerTool.java | 33 ++++++++++++----------
 1 file changed, 18 insertions(+), 15 deletions(-)

diff --git a/lang/java/tools/src/main/java/org/apache/avro/tool/SpecificCompilerTool.java b/lang/java/tools/src/main/java/org/apache/avro/tool/SpecificCompilerTool.java
index e50af59..4077e63 100644
--- a/lang/java/tools/src/main/java/org/apache/avro/tool/SpecificCompilerTool.java
+++ b/lang/java/tools/src/main/java/org/apache/avro/tool/SpecificCompilerTool.java
@@ -46,8 +46,8 @@ import org.apache.avro.compiler.specific.SpecificCompiler.FieldVisibility;
 
 public class SpecificCompilerTool implements Tool {
   @Override
-  public int run(InputStream in, PrintStream out, PrintStream err, List<String> args) throws Exception {
-    if (args.size() < 3) {
+  public int run(InputStream in, PrintStream out, PrintStream err, List<String> origArgs) throws Exception {
+    if (origArgs.size() < 3) {
       System.err.println(
           "Usage: [-encoding <outputencoding>] [-string] [-bigDecimal] [-fieldVisibility <visibilityType>] [-templateDir <templateDir>] (schema|protocol) input... outputdir");
       System.err.println(" input - input files or directories");
@@ -68,41 +68,44 @@ public class SpecificCompilerTool implements Tool {
     Optional<FieldVisibility> fieldVisibility = Optional.empty();
 
     int arg = 0;
-    int counter = 0;
+    List<String> args = new ArrayList<>(origArgs);
 
     if (args.contains("-encoding")) {
       arg = args.indexOf("-encoding") + 1;
       encoding = Optional.of(args.get(arg));
-      counter = counter + 2;
+      args.remove(arg);
+      args.remove(arg - 1);
     }
 
     if (args.contains("-string")) {
       stringType = StringType.String;
-      counter = counter + 1;
+      args.remove(args.indexOf("-string"));
     }
 
-    if ("-fieldVisibility".equals(args.get(arg))) {
-      arg++;
+    if (args.contains("-fieldVisibility")) {
+      arg = args.indexOf("-fieldVisibility") + 1;
       try {
         fieldVisibility = Optional.of(FieldVisibility.valueOf(args.get(arg).toUpperCase(Locale.ENGLISH)));
       } catch (IllegalArgumentException | IndexOutOfBoundsException e) {
         System.err.println("Expected one of" + Arrays.toString(FieldVisibility.values()));
         return 1;
       }
-      arg++;
+      args.remove(arg);
+      args.remove(arg - 1);
+    }
+    if (args.contains("-templateDir")) {
+      arg = args.indexOf("-templateDir") + 1;
+      templateDir = Optional.of(args.get(arg));
+      args.remove(arg);
+      args.remove(arg - 1);
     }
 
+    arg = 0;
     if ("-bigDecimal".equalsIgnoreCase(args.get(arg))) {
       useLogicalDecimal = true;
-      counter = counter + 1;
+      arg++;
     }
 
-    if (args.contains("-templateDir")) {
-      arg = args.indexOf("-templateDir") + 1;
-      templateDir = Optional.of(args.get(arg));
-      counter = counter + 2;
-    }
-    arg = counter;
     String method = args.get(arg);
     List<File> inputs = new ArrayList<>();
     File output = new File(args.get(args.size() - 1));