You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@aurora.apache.org by wf...@apache.org on 2017/10/11 00:29:17 UTC

[8/8] aurora git commit: Use a simpler command line argument system

Use a simpler command line argument system

Reviewed at https://reviews.apache.org/r/62623/


Project: http://git-wip-us.apache.org/repos/asf/aurora/repo
Commit: http://git-wip-us.apache.org/repos/asf/aurora/commit/519e3df7
Tree: http://git-wip-us.apache.org/repos/asf/aurora/tree/519e3df7
Diff: http://git-wip-us.apache.org/repos/asf/aurora/diff/519e3df7

Branch: refs/heads/master
Commit: 519e3df732ea5d009d92685ee3c4823606eb2462
Parents: cb8e956
Author: Bill Farner <wf...@apache.org>
Authored: Tue Oct 10 17:24:45 2017 -0700
Committer: Bill Farner <wf...@apache.org>
Committed: Tue Oct 10 17:24:45 2017 -0700

----------------------------------------------------------------------
 build.gradle                                    |  67 +-
 .../java/org/apache/aurora/common/args/Arg.java | 127 ----
 .../apache/aurora/common/args/ArgParser.java    |  28 -
 .../org/apache/aurora/common/args/CmdLine.java  |  54 --
 .../org/apache/aurora/common/args/NoParser.java |  23 -
 .../org/apache/aurora/common/args/Parser.java   |  35 -
 .../apache/aurora/common/args/ParserOracle.java |  31 -
 .../org/apache/aurora/common/args/Verifier.java |  37 --
 .../apache/aurora/common/args/VerifierFor.java  |  34 -
 .../common/args/apt/CmdLineProcessor.java       | 628 ------------------
 .../aurora/common/args/apt/Configuration.java   | 476 --------------
 .../javax.annotation.processing.Processor       |   1 -
 .../apache/aurora/common/args/ArgFilters.java   | 109 ----
 .../apache/aurora/common/args/ArgScanner.java   | 473 --------------
 .../org/apache/aurora/common/args/Args.java     | 171 -----
 .../apache/aurora/common/args/ArgumentInfo.java | 216 -------
 .../apache/aurora/common/args/OptionInfo.java   | 145 -----
 .../org/apache/aurora/common/args/Parsers.java  | 110 ----
 .../org/apache/aurora/common/args/TypeUtil.java | 120 ----
 .../apache/aurora/common/args/Verifiers.java    |  89 ---
 .../common/args/constraints/CanExecute.java     |  30 -
 .../constraints/CanExecuteFileVerifier.java     |  40 --
 .../aurora/common/args/constraints/CanRead.java |  30 -
 .../args/constraints/CanReadFileVerifier.java   |  40 --
 .../common/args/constraints/CanWrite.java       |  30 -
 .../args/constraints/CanWriteFileVerifier.java  |  40 --
 .../aurora/common/args/constraints/Exists.java  |  30 -
 .../args/constraints/ExistsFileVerifier.java    |  40 --
 .../common/args/constraints/IsDirectory.java    |  30 -
 .../constraints/IsDirectoryFileVerifier.java    |  40 --
 .../common/args/constraints/NotEmpty.java       |  30 -
 .../constraints/NotEmptyIterableVerifier.java   |  41 --
 .../constraints/NotEmptyStringVerifier.java     |  39 --
 .../common/args/constraints/NotNegative.java    |  30 -
 .../constraints/NotNegativeNumberVerifier.java  |  39 --
 .../aurora/common/args/constraints/NotNull.java |  30 -
 .../args/constraints/NotNullVerifier.java       |  39 --
 .../common/args/constraints/Positive.java       |  30 -
 .../constraints/PositiveNumberVerifier.java     |  39 --
 .../aurora/common/args/constraints/Range.java   |  40 --
 .../args/constraints/RangeNumberVerifier.java   |  70 --
 .../common/args/parsers/AmountParser.java       |  86 ---
 .../common/args/parsers/BooleanParser.java      |  30 -
 .../aurora/common/args/parsers/ByteParser.java  |  29 -
 .../common/args/parsers/CharacterParser.java    |  33 -
 .../aurora/common/args/parsers/ClassParser.java |  48 --
 .../aurora/common/args/parsers/DateParser.java  |  41 --
 .../common/args/parsers/DoubleParser.java       |  29 -
 .../common/args/parsers/DurationParser.java     |  80 ---
 .../aurora/common/args/parsers/EnumParser.java  |  37 --
 .../aurora/common/args/parsers/FileParser.java  |  31 -
 .../aurora/common/args/parsers/FloatParser.java |  29 -
 .../args/parsers/InetSocketAddressParser.java   |  32 -
 .../common/args/parsers/IntegerParser.java      |  29 -
 .../aurora/common/args/parsers/ListParser.java  |  47 --
 .../aurora/common/args/parsers/LongParser.java  |  29 -
 .../aurora/common/args/parsers/MapParser.java   |  68 --
 .../common/args/parsers/MultimapParser.java     |  65 --
 .../parsers/NonParameterizedTypeParser.java     |  41 --
 .../common/args/parsers/NumberParser.java       |  41 --
 .../aurora/common/args/parsers/PairParser.java  |  57 --
 .../common/args/parsers/PatternParser.java      |  35 -
 .../aurora/common/args/parsers/RangeParser.java |  46 --
 .../aurora/common/args/parsers/SetParser.java   |  49 --
 .../aurora/common/args/parsers/ShortParser.java |  29 -
 .../common/args/parsers/StringParser.java       |  29 -
 .../args/parsers/TypeParameterizedParser.java   |  65 --
 .../aurora/common/args/parsers/URIParser.java   |  36 --
 .../aurora/common/args/parsers/URLParser.java   |  36 --
 .../aurora/common/args/parsers/UnitParser.java  |  54 --
 .../apache/aurora/common/quantity/Amount.java   |   2 +-
 .../aurora/common/args/ArgFiltersTest.java      |  98 ---
 .../aurora/common/args/ArgScannerTest.java      | 632 -------------------
 .../org/apache/aurora/common/args/ArgTest.java  |  34 -
 .../org/apache/aurora/common/args/ArgsTest.java |  67 --
 .../aurora/common/args/OptionInfoTest.java      |  62 --
 .../apache/aurora/common/args/ParsersTest.java  |  80 ---
 .../common/args/argfilterstest/ArgsRoot.java    |  29 -
 .../args/argfilterstest/subpackageA/ArgsA.java  |  29 -
 .../subpackageA/subsubpackage1/ArgsA1.java      |  29 -
 .../args/argfilterstest/subpackageB/ArgsB.java  |  29 -
 .../subpackageBwithSuffix/ArgsBWithSuffix.java  |  29 -
 config/checkstyle/checkstyle.xml                |   5 -
 config/checkstyle/suppressions.xml              |   2 +-
 config/findbugs/excludeFilter.xml               |   6 +
 .../aurora/benchmark/SchedulingBenchmarks.java  |  14 +-
 .../benchmark/StateManagerBenchmarks.java       |   4 +-
 .../aurora/benchmark/StatusUpdateBenchmark.java |   3 +-
 .../aurora/benchmark/TaskStoreBenchmarks.java   |   4 +-
 .../aurora/benchmark/ThriftApiBenchmarks.java   |   4 +-
 .../aurora/scheduler/SchedulerModule.java       |  60 +-
 .../org/apache/aurora/scheduler/TierModule.java |  33 +-
 .../apache/aurora/scheduler/app/AppModule.java  | 158 ++---
 .../aurora/scheduler/app/MoreModules.java       |  67 +-
 .../aurora/scheduler/app/SchedulerMain.java     | 176 +++---
 .../aurora/scheduler/app/VolumeConverter.java   |  54 ++
 .../aurora/scheduler/app/VolumeParser.java      |  46 --
 .../aurora/scheduler/async/AsyncModule.java     |  21 +-
 .../aurora/scheduler/base/TaskTestUtil.java     |   3 +-
 .../aurora/scheduler/config/CliOptions.java     | 114 ++++
 .../aurora/scheduler/config/CommandLine.java    | 198 ++++++
 .../config/converters/ClassConverter.java       |  49 ++
 .../config/converters/DataAmountConverter.java  |  57 ++
 .../converters/DockerParameterConverter.java    |  36 ++
 .../converters/InetSocketAddressConverter.java  |  32 +
 .../config/converters/TimeAmountConverter.java  |  57 ++
 .../scheduler/config/types/DataAmount.java      |  28 +
 .../scheduler/config/types/TimeAmount.java      |  28 +
 .../config/validators/NotEmptyIterable.java     |  28 +
 .../config/validators/NotEmptyString.java       |  27 +
 .../config/validators/NotNegativeAmount.java    |  29 +
 .../config/validators/PositiveAmount.java       |  29 +
 .../config/validators/PositiveNumber.java       |  27 +
 .../config/validators/ReadableFile.java         |  29 +
 .../configuration/ConfigurationManager.java     |  14 +-
 .../configuration/executor/ExecutorModule.java  | 147 +++--
 .../scheduler/cron/quartz/CronModule.java       |  61 +-
 .../discovery/FlaggedZooKeeperConfig.java       |  79 +--
 .../scheduler/discovery/ZooKeeperConfig.java    |   5 +
 .../aurora/scheduler/events/WebhookModule.java  |  58 +-
 .../aurora/scheduler/http/H2ConsoleModule.java  |  18 +-
 .../scheduler/http/JettyServerModule.java       |  95 +--
 .../aurora/scheduler/http/api/ApiModule.java    |  31 +-
 .../http/api/security/HttpSecurityModule.java   |  78 ++-
 .../http/api/security/IniShiroRealmModule.java  |  31 +-
 .../api/security/Kerberos5ShiroRealmModule.java |  44 +-
 .../security/KerberosPrincipalConverter.java    |  39 ++
 .../api/security/KerberosPrincipalParser.java   |  27 -
 .../http/api/security/ModuleParser.java         |  54 --
 .../http/api/security/ShiroIniConverter.java    |  91 +++
 .../http/api/security/ShiroIniParser.java       |  84 ---
 .../log/mesos/MesosLogStreamModule.java         | 154 +++--
 .../mesos/CommandLineDriverSettingsModule.java  | 160 ++---
 .../scheduler/mesos/LibMesosLoadingModule.java  |   6 +-
 .../scheduler/mesos/SchedulerDriverModule.java  |   6 +-
 .../aurora/scheduler/offers/OffersModule.java   | 123 ++--
 .../offers/RandomJitterReturnDelay.java         |   8 +-
 .../scheduler/preemptor/PreemptorModule.java    | 140 ++--
 .../aurora/scheduler/pruning/PruningModule.java |  68 +-
 .../reconciliation/ReconciliationModule.java    | 128 ++--
 .../scheduler/resources/ResourceSettings.java   |  23 +-
 .../scheduler/resources/ResourceType.java       |  13 +-
 .../scheduling/RescheduleCalculator.java        |  10 +-
 .../scheduler/scheduling/SchedulingModule.java  | 147 ++---
 .../aurora/scheduler/sla/MetricCalculator.java  |   4 +-
 .../apache/aurora/scheduler/sla/SlaModule.java  |  66 +-
 .../aurora/scheduler/state/StateModule.java     |  35 +-
 .../scheduler/stats/AsyncStatsModule.java       |  43 +-
 .../aurora/scheduler/stats/StatsModule.java     |  31 +-
 .../scheduler/storage/backup/BackupModule.java  |  71 +--
 .../aurora/scheduler/storage/db/DbModule.java   | 117 ++--
 .../scheduler/storage/log/LogStorageModule.java |  70 +-
 .../storage/log/SnapshotStoreImpl.java          |   2 +-
 .../storage/mem/InMemStoresModule.java          |  14 +-
 .../aurora/scheduler/thrift/ThriftModule.java   |   2 -
 .../aurora/scheduler/thrift/aop/AopModule.java  |  30 +-
 .../aurora/scheduler/updater/UpdaterModule.java |  40 +-
 .../org/apache/aurora/scheduler/webhook.json    |   8 -
 .../apache/aurora/scheduler/TierModuleTest.java |   2 +-
 .../aurora/scheduler/app/MoreModulesTest.java   |  39 +-
 .../aurora/scheduler/app/SchedulerIT.java       |  17 +-
 .../scheduler/app/VolumeConverterTest.java      |  55 ++
 .../aurora/scheduler/app/VolumeParserTest.java  |  53 --
 .../scheduler/app/local/LocalSchedulerMain.java |   7 +-
 .../aurora/scheduler/async/AsyncModuleTest.java |   2 +-
 .../scheduler/config/CommandLineTest.java       | 479 ++++++++++++++
 .../aurora/scheduler/config/CustomModule.java   |  48 ++
 .../configuration/ConfigurationManagerTest.java |   9 +-
 .../aurora/scheduler/cron/quartz/CronIT.java    |   2 +-
 .../aurora/scheduler/events/WebhookTest.java    |  12 +-
 .../scheduler/http/AbstractJettyTest.java       |   9 +-
 .../aurora/scheduler/http/api/ApiBetaTest.java  |   2 +-
 .../apache/aurora/scheduler/http/api/ApiIT.java |   2 +-
 .../http/api/security/HttpSecurityIT.java       |   2 +-
 .../KerberosPrincipalConverterTest.java         |  37 ++
 .../security/KerberosPrincipalParserTest.java   |  35 -
 .../http/api/security/ModuleParserTest.java     |  81 ---
 .../api/security/ShiroIniConverterTest.java     |  74 +++
 .../http/api/security/ShiroIniParserTest.java   |  73 ---
 .../CommandLineDriverSettingsModuleTest.java    |   8 +-
 .../mesos/MesosTaskFactoryImplTest.java         |   2 +
 .../scheduler/offers/OfferManagerImplTest.java  |   2 +
 .../preemptor/PreemptionVictimFilterTest.java   |   1 +
 .../preemptor/PreemptorModuleTest.java          |  33 +-
 .../scheduler/resources/AcceptedOfferTest.java  |   6 +
 .../resources/ResourceManagerTest.java          |   2 +
 .../RescheduleCalculatorImplTest.java           |   6 +-
 .../aurora/scheduler/sla/SlaModuleTest.java     |  12 +-
 .../scheduler/stats/AsyncStatsModuleTest.java   |   8 +
 .../storage/db/RowGarbageCollectorTest.java     |   2 +-
 .../storage/log/SnapshotStoreImplIT.java        |   5 +-
 .../storage/mem/InMemTaskStoreTest.java         |   4 +-
 .../storage/mem/MemCronJobStoreTest.java        |   4 +-
 .../aurora/scheduler/thrift/ThriftIT.java       |  21 +-
 .../aurora/scheduler/updater/JobUpdaterIT.java  |  10 +-
 .../sh/org/apache/aurora/e2e/Dockerfile.python  |   4 +-
 196 files changed, 3264 insertions(+), 7941 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/aurora/blob/519e3df7/build.gradle
----------------------------------------------------------------------
diff --git a/build.gradle b/build.gradle
index d7a4287..fa3ed0d 100644
--- a/build.gradle
+++ b/build.gradle
@@ -171,25 +171,6 @@ project(':ui') {
 // building the Scheduler JAR, the JS bundle is built first.
 tasks.processResources.dependsOn(':ui:webpack')
 
-/* This gradle project contains the annotation procesor from
- * com.twitter.common.args and related dependencies. It needs to be outside of
- * the commons project because gradle needs to compile the annotation processor
- * first.
- */
-project(':commons-args') {
-  dependencies {
-    compile "com.google.guava:guava:${guavaRev}"
-    compile "com.google.code.findbugs:jsr305:${jsrRev}"
-    compile "commons-lang:commons-lang:${commonsLangRev}"
-  }
-
-  apply plugin: 'license'
-  license {
-    header rootProject.file('config/checkstyle/apache.header')
-    strictCheck true
-  }
-}
-
 project(':commons') {
   apply plugin: org.apache.aurora.build.ThriftPlugin
   thrift {
@@ -391,10 +372,10 @@ dependencies {
 
   compile project(':api')
   compile project(':commons')
-  compile project(':commons-args')
 
   compile 'aopalliance:aopalliance:1.0'
   compile "ch.qos.logback:logback-classic:${logbackRev}"
+  compile "com.beust:jcommander:1.72"
   compile "com.google.code.findbugs:jsr305:${jsrRev}"
   compile "com.google.inject:guice:${guiceRev}"
   compile "com.google.inject.extensions:guice-assistedinject:${guiceRev}"
@@ -492,15 +473,6 @@ tasks.withType(Test) {
   maxParallelForks = Runtime.runtime.availableProcessors()
 }
 
-// Turn on annotation processors for commons (uses commons-args) and aurora
-// (uses commons-args, forward, ...).  The crux here is _not_ turning annotation processing on
-// for commons-args (this leads to an attempt at self-processing before its processor is
-// compiled); so the strategy taken is to white-list modules.
-//
-// NB: Unfortunately, most of the ipr/iml modeling we need is not exposed by the idea plugin DSL so
-// we drop to xml manipulation here only out of necessity.
-def apt_projects = ['commons', 'aurora']
-
 idea {
   project {
     vcs = 'Git'
@@ -511,6 +483,9 @@ idea {
       withXml {
         def projectNode = it.asNode()
 
+        // TODO(wfarner): Does the below work?  It still seems necessary to manually turn on
+        // annotation processing.
+
         // Configure an annotation processor profile.
         def compilerConfiguration = projectNode.find {
           it.name() == 'component' && it.@name == 'CompilerConfiguration'
@@ -524,9 +499,7 @@ idea {
               sourceOutputDir(name: 'generated')
               sourceTestOutputDir(name: 'generated')
               processorPath(useClasspath: 'true')
-              apt_projects.each {
-                module(name: it)
-              }
+              module(name: 'aurora')
             }
           }
         }
@@ -534,11 +507,6 @@ idea {
           it.name() == 'component' && it.@name == 'ProjectRootManager'
         }
         projectRoot.remove(projectRoot.output)
-
-        // Add parameter names to generated class file debug info.
-        projectNode
-            .appendNode('component', [name: 'JavacSettings'])
-            .appendNode('option', [name: 'ADDITIONAL_OPTIONS_STRING', value: '-parameters'])
       }
     }
   }
@@ -548,21 +516,18 @@ idea {
 // generated code output dirs as source (and test) dirs.  The key difficulty being worked around
 // here is the fact that excludes higher in a directory tree override includes deeper in the tree.
 allprojects {
-  def isApt = it.name in apt_projects
   def generatedSourceDir = file("${it.projectDir}/out/production/generated")
   def generatedTestDir = file("${it.projectDir}/out/test/generated")
 
   idea {
     module {
-      if (isApt) {
-        generatedSourceDir.exists() || generatedSourceDir.mkdirs()
-        sourceDirs += generatedSourceDir
-        generatedSourceDirs += generatedSourceDir
-
-        generatedTestDir.exists() || generatedTestDir.mkdirs()
-        testSourceDirs += generatedTestDir
-        generatedSourceDirs += generatedTestDir
-      }
+      generatedSourceDir.exists() || generatedSourceDir.mkdirs()
+      sourceDirs += generatedSourceDir
+      generatedSourceDirs += generatedSourceDir
+
+      generatedTestDir.exists() || generatedTestDir.mkdirs()
+      testSourceDirs += generatedTestDir
+      generatedSourceDirs += generatedTestDir
 
       iml {
         withXml {
@@ -574,11 +539,9 @@ allprojects {
           moduleConfiguration.appendNode('output', [url: 'file://$MODULE_DIR$/out/production'])
           moduleConfiguration.appendNode('output-test', [url: 'file://$MODULE_DIR$/out/test'])
 
-          if (isApt) {
-            def excludeOutput = moduleConfiguration.find { it.name() == 'exclude-output' }
-            if (excludeOutput) {
-              moduleConfiguration.remove(excludeOutput)
-            }
+          def excludeOutput = moduleConfiguration.find { it.name() == 'exclude-output' }
+          if (excludeOutput) {
+            moduleConfiguration.remove(excludeOutput)
           }
         }
       }

http://git-wip-us.apache.org/repos/asf/aurora/blob/519e3df7/commons-args/src/main/java/org/apache/aurora/common/args/Arg.java
----------------------------------------------------------------------
diff --git a/commons-args/src/main/java/org/apache/aurora/common/args/Arg.java b/commons-args/src/main/java/org/apache/aurora/common/args/Arg.java
deleted file mode 100644
index 4da9159..0000000
--- a/commons-args/src/main/java/org/apache/aurora/common/args/Arg.java
+++ /dev/null
@@ -1,127 +0,0 @@
-/**
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.aurora.common.args;
-
-import javax.annotation.Nullable;
-import java.util.function.Supplier;
-
-import com.google.common.annotations.VisibleForTesting;
-import com.google.common.base.Preconditions;
-
-/**
- * Wrapper class for the value of an argument.  For proper behavior, an {@code Arg} should always
- * be annotated with {@link CmdLine}, which will define the command line interface to the argument.
- */
-public class Arg<T> implements Supplier<T> {
-
-  @Nullable private final T defaultValue;
-  @Nullable private T value;
-  private boolean hasDefault = true;
-  private boolean valueApplied = false;
-  private boolean valueObserved = false;
-
-  /**
-   * Creates an arg that has no default value, meaning that its value can only ever be retrieved
-   * if it has been externally set.
-   */
-  public Arg() {
-    this(null);
-    hasDefault = false;
-  }
-
-  /**
-   * Creates an arg that has a default value, and may optionally be set.
-   *
-   * @param defaultValue The default value for the arg.
-   */
-  public Arg(@Nullable T defaultValue) {
-    this.defaultValue = defaultValue;
-    value = defaultValue;
-  }
-
-  synchronized void set(@Nullable T appliedValue) {
-    Preconditions.checkState(!valueApplied, "A value cannot be applied twice to an argument.");
-    Preconditions.checkState(!valueObserved, "A value cannot be changed after it was read.");
-    valueApplied = true;
-    value = appliedValue;
-  }
-
-  @VisibleForTesting
-  synchronized void reset() {
-    valueApplied = false;
-    valueObserved = false;
-    value = hasDefault ? defaultValue : null;
-  }
-
-  public boolean hasDefault() {
-    return hasDefault;
-  }
-
-  /**
-   * Gets the value of the argument.  If a value has not yet been applied to the argument, or the
-   * argument did not provide a default value, {@link IllegalStateException} will be thrown.
-   *
-   * @return The argument value.
-   */
-  @Nullable
-  public synchronized T get() {
-    // TODO(William Farner): This has a tendency to break bad-arg reporting by ArgScanner.  Fix.
-    Preconditions.checkState(valueApplied || hasDefault,
-        "A value may only be retrieved from a variable that has a default or has been set.");
-    valueObserved = true;
-    return uncheckedGet();
-  }
-
-  /**
-   * Checks whether a value has been applied to the argument (i.e., apart from the default).
-   *
-   * @return {@code true} if a value from the command line has been applied to this arg,
-   *         {@code false} otherwise.
-   */
-  public synchronized boolean hasAppliedValue() {
-    return valueApplied;
-  }
-
-  /**
-   * Gets the value of the argument, without checking whether a default was available or if a
-   * value was applied.
-   *
-   * @return The argument value.
-   */
-  @Nullable
-  synchronized T uncheckedGet() {
-    return value;
-  }
-
-  /**
-   * Convenience factory method to create an arg that has no default value.
-   *
-   * @param <T> Type of arg value.
-   * @return A new arg.
-   */
-  public static <T> Arg<T> create() {
-    return new Arg<T>();
-  }
-
-  /**
-   * Convenience factory method to create an arg with a default value.
-   *
-   * @param value Default argument value.
-   * @param <T> Type of arg value.
-   * @return A new arg.
-   */
-  public static <T> Arg<T> create(@Nullable T value) {
-    return new Arg<T>(value);
-  }
-}

http://git-wip-us.apache.org/repos/asf/aurora/blob/519e3df7/commons-args/src/main/java/org/apache/aurora/common/args/ArgParser.java
----------------------------------------------------------------------
diff --git a/commons-args/src/main/java/org/apache/aurora/common/args/ArgParser.java b/commons-args/src/main/java/org/apache/aurora/common/args/ArgParser.java
deleted file mode 100644
index 25ed250..0000000
--- a/commons-args/src/main/java/org/apache/aurora/common/args/ArgParser.java
+++ /dev/null
@@ -1,28 +0,0 @@
-/**
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.aurora.common.args;
-
-import java.lang.annotation.Retention;
-import java.lang.annotation.Target;
-
-import static java.lang.annotation.ElementType.TYPE;
-import static java.lang.annotation.RetentionPolicy.SOURCE;
-
-/**
- * Annotation to register a command line argument parser globally.
- */
-@Target(TYPE)
-@Retention(SOURCE)
-public @interface ArgParser {
-}

http://git-wip-us.apache.org/repos/asf/aurora/blob/519e3df7/commons-args/src/main/java/org/apache/aurora/common/args/CmdLine.java
----------------------------------------------------------------------
diff --git a/commons-args/src/main/java/org/apache/aurora/common/args/CmdLine.java b/commons-args/src/main/java/org/apache/aurora/common/args/CmdLine.java
deleted file mode 100644
index a72ea7a..0000000
--- a/commons-args/src/main/java/org/apache/aurora/common/args/CmdLine.java
+++ /dev/null
@@ -1,54 +0,0 @@
-/**
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.aurora.common.args;
-
-import java.lang.annotation.Retention;
-import java.lang.annotation.Target;
-
-import static java.lang.annotation.ElementType.FIELD;
-import static java.lang.annotation.RetentionPolicy.RUNTIME;
-
-/**
- * Annotation for a command line argument.
- */
-@Target(FIELD)
-@Retention(RUNTIME)
-public @interface CmdLine {
-  /**
-   * The short name of the argument, as supplied on the command line.  The argument can also be
-   * accessed by the canonical name, which is {@code com.foo.bar.MyArgClass.arg_name}.
-   * If the global scope contains more than one argument with the same name, all colliding arguments
-   * must be disambiguated with the canonical form.
-   *
-   * The argument name must match the format {@code [\w\-\.]+}.
-   */
-  String name();
-
-  /**
-   * The help string to display on the command line in a usage message.
-   */
-  String help();
-
-  /**
-   * The parser class to use for parsing this argument.  The parser must return the same type as
-   * the field being annotated.
-   */
-  Class<? extends Parser<?>> parser() default NoParser.class;
-
-  /**
-   * The flag to indicate whether an argument file is accepted for this argument.
-   *
-   */
-  boolean argFile() default false;
-}

http://git-wip-us.apache.org/repos/asf/aurora/blob/519e3df7/commons-args/src/main/java/org/apache/aurora/common/args/NoParser.java
----------------------------------------------------------------------
diff --git a/commons-args/src/main/java/org/apache/aurora/common/args/NoParser.java b/commons-args/src/main/java/org/apache/aurora/common/args/NoParser.java
deleted file mode 100644
index 3366531..0000000
--- a/commons-args/src/main/java/org/apache/aurora/common/args/NoParser.java
+++ /dev/null
@@ -1,23 +0,0 @@
-/**
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.aurora.common.args;
-
-/**
- * A sentinel parser type for internal use indicating no parser has been selected yet.
- */
-abstract class NoParser implements Parser<Object> {
-  private NoParser() {
-    throw new UnsupportedOperationException("Not intended for construction.");
-  }
-}

http://git-wip-us.apache.org/repos/asf/aurora/blob/519e3df7/commons-args/src/main/java/org/apache/aurora/common/args/Parser.java
----------------------------------------------------------------------
diff --git a/commons-args/src/main/java/org/apache/aurora/common/args/Parser.java b/commons-args/src/main/java/org/apache/aurora/common/args/Parser.java
deleted file mode 100644
index 93c2323..0000000
--- a/commons-args/src/main/java/org/apache/aurora/common/args/Parser.java
+++ /dev/null
@@ -1,35 +0,0 @@
-/**
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.aurora.common.args;
-
-import java.lang.reflect.Type;
-
-/**
- * An interface to a command line argument parser.
- *
- * @param <T> The base class this parser can parse all subtypes of.
- */
-public interface Parser<T> {
-  /**
-   * Parses strings as arguments of a given subtype of {@code T}.
-   *
-   * @param parserOracle The registered parserOracle for delegation.
-   * @param type The target type of the parsed argument.
-   * @param raw The raw value of the argument.
-   * @return A value of the given type parsed from the raw value.
-   * @throws IllegalArgumentException if the raw value could not be parsed into a value of the
-   *     given type.
-   */
-  T parse(ParserOracle parserOracle, Type type, String raw) throws IllegalArgumentException;
-}

http://git-wip-us.apache.org/repos/asf/aurora/blob/519e3df7/commons-args/src/main/java/org/apache/aurora/common/args/ParserOracle.java
----------------------------------------------------------------------
diff --git a/commons-args/src/main/java/org/apache/aurora/common/args/ParserOracle.java b/commons-args/src/main/java/org/apache/aurora/common/args/ParserOracle.java
deleted file mode 100644
index e84d302..0000000
--- a/commons-args/src/main/java/org/apache/aurora/common/args/ParserOracle.java
+++ /dev/null
@@ -1,31 +0,0 @@
-/**
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.aurora.common.args;
-
-import com.google.common.reflect.TypeToken;
-
-/**
- * A registry of Parsers for different supported argument types.
- */
-public interface ParserOracle {
-
-  /**
-   * Gets the parser associated with a class.
-   *
-   * @param type Type to get the parser for.
-   * @return The parser for {@code cls}.
-   * @throws IllegalArgumentException If no parser was found for {@code cls}.
-   */
-  <T> Parser<T> get(TypeToken<T> type) throws IllegalArgumentException;
-}

http://git-wip-us.apache.org/repos/asf/aurora/blob/519e3df7/commons-args/src/main/java/org/apache/aurora/common/args/Verifier.java
----------------------------------------------------------------------
diff --git a/commons-args/src/main/java/org/apache/aurora/common/args/Verifier.java b/commons-args/src/main/java/org/apache/aurora/common/args/Verifier.java
deleted file mode 100644
index 8f09a98..0000000
--- a/commons-args/src/main/java/org/apache/aurora/common/args/Verifier.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/**
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.aurora.common.args;
-
-import java.lang.annotation.Annotation;
-
-/**
- * Typedef for a constraint verifier.
- */
-public interface Verifier<T> {
-  /**
-   * Verifies the value against the annotation.
-   *
-   * @param value Value that is being applied.
-   * @throws IllegalArgumentException if the value is invalid.
-   */
-  void verify(T value, Annotation annotation) throws IllegalArgumentException;
-
-  /**
-   * Returns a representation of the constraint this verifier checks.
-   *
-   * @param argType The type of the {@link Arg} this annotation applies to.
-   * @return A representation of the constraint this verifier checks.
-   */
-  String toString(Class<? extends T> argType, Annotation annotation);
-}

http://git-wip-us.apache.org/repos/asf/aurora/blob/519e3df7/commons-args/src/main/java/org/apache/aurora/common/args/VerifierFor.java
----------------------------------------------------------------------
diff --git a/commons-args/src/main/java/org/apache/aurora/common/args/VerifierFor.java b/commons-args/src/main/java/org/apache/aurora/common/args/VerifierFor.java
deleted file mode 100644
index aad8807..0000000
--- a/commons-args/src/main/java/org/apache/aurora/common/args/VerifierFor.java
+++ /dev/null
@@ -1,34 +0,0 @@
-/**
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.aurora.common.args;
-
-import java.lang.annotation.Annotation;
-import java.lang.annotation.Retention;
-import java.lang.annotation.Target;
-
-import static java.lang.annotation.ElementType.TYPE;
-import static java.lang.annotation.RetentionPolicy.SOURCE;
-
-/**
- * Annotation to register a command line argument verifier.
- */
-@Target(TYPE)
-@Retention(SOURCE)
-public @interface VerifierFor {
-  /**
-   * Returns the annotation that marks a field for verification by the annotated
-   * {@link Verifier} class.
-   */
-  Class<? extends Annotation> value();
-}

http://git-wip-us.apache.org/repos/asf/aurora/blob/519e3df7/commons-args/src/main/java/org/apache/aurora/common/args/apt/CmdLineProcessor.java
----------------------------------------------------------------------
diff --git a/commons-args/src/main/java/org/apache/aurora/common/args/apt/CmdLineProcessor.java b/commons-args/src/main/java/org/apache/aurora/common/args/apt/CmdLineProcessor.java
deleted file mode 100644
index 5fda5dc..0000000
--- a/commons-args/src/main/java/org/apache/aurora/common/args/apt/CmdLineProcessor.java
+++ /dev/null
@@ -1,628 +0,0 @@
-/**
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.aurora.common.args.apt;
-
-import java.io.Closeable;
-import java.io.IOException;
-import java.io.PrintWriter;
-import java.io.Writer;
-import java.lang.annotation.Annotation;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
-import javax.annotation.Nullable;
-import javax.annotation.processing.AbstractProcessor;
-import javax.annotation.processing.ProcessingEnvironment;
-import javax.annotation.processing.RoundEnvironment;
-import javax.annotation.processing.SupportedOptions;
-import javax.lang.model.SourceVersion;
-import javax.lang.model.element.AnnotationMirror;
-import javax.lang.model.element.AnnotationValue;
-import javax.lang.model.element.Element;
-import javax.lang.model.element.ElementKind;
-import javax.lang.model.element.ExecutableElement;
-import javax.lang.model.element.Modifier;
-import javax.lang.model.element.TypeElement;
-import javax.lang.model.type.DeclaredType;
-import javax.lang.model.type.TypeMirror;
-import javax.lang.model.util.Elements;
-import javax.lang.model.util.SimpleAnnotationValueVisitor6;
-import javax.lang.model.util.SimpleTypeVisitor6;
-import javax.lang.model.util.Types;
-import javax.tools.Diagnostic.Kind;
-import javax.tools.FileObject;
-import javax.tools.StandardLocation;
-
-import com.google.common.base.Function;
-import com.google.common.base.Functions;
-import com.google.common.base.Optional;
-import com.google.common.base.Predicates;
-import com.google.common.base.Supplier;
-import com.google.common.base.Suppliers;
-import com.google.common.base.Throwables;
-import com.google.common.collect.ImmutableList;
-import com.google.common.collect.ImmutableSet;
-import com.google.common.collect.Iterables;
-import com.google.common.collect.Lists;
-
-import org.apache.aurora.common.args.Arg;
-import org.apache.aurora.common.args.ArgParser;
-import org.apache.aurora.common.args.CmdLine;
-import org.apache.aurora.common.args.Parser;
-import org.apache.aurora.common.args.Verifier;
-import org.apache.aurora.common.args.VerifierFor;
-import org.apache.aurora.common.args.apt.Configuration.ParserInfo;
-
-import static org.apache.aurora.common.args.apt.Configuration.ArgInfo;
-import static org.apache.aurora.common.args.apt.Configuration.VerifierInfo;
-
-/**
- * Processes {@literal @CmdLine} annotated fields and {@literal @ArgParser} and
- * {@literal @VerifierFor} parser and verifier registrations and stores configuration data listing
- * these fields, parsers and verifiers on the classpath for discovery via
- * {@link Configuration#load()}.
- *
- * <p>Supports an apt option useful for some build setups that create monolithic jars aggregating
- * many library jars, one or more of which have embedded arg definitions themselves.  By adding the
- * following flag to a javac invocation:
- * <code>-Acom.twitter.common.args.apt.CmdLineProcessor.main</code>
- * you signal this apt processor that the compilation target is a leaf target that will comprise one
- * or more executable mains (as opposed to a library jar).  As a result, the embedded arg
- * definitions generated will occupy a special resource that is always checked for first during
- * runtime arg parsing.
- */
-@SupportedOptions({
-    CmdLineProcessor.MAIN_OPTION,
-    CmdLineProcessor.CHECK_LINKAGE_OPTION
-})
-public class CmdLineProcessor extends AbstractProcessor {
-  static final String MAIN_OPTION =
-      "com.twitter.common.args.apt.CmdLineProcessor.main";
-  static final String CHECK_LINKAGE_OPTION =
-      "com.twitter.common.args.apt.CmdLineProcessor.check_linkage";
-
-  private static final Function<Class<?>, String> GET_NAME = Class::getName;
-
-  private final Supplier<Configuration> configSupplier =
-      Suppliers.memoize(new Supplier<Configuration>() {
-        @Override public Configuration get() {
-          try {
-            Configuration configuration = Configuration.load();
-            for (ArgInfo argInfo : configuration.optionInfo()) {
-              configBuilder.addCmdLineArg(argInfo);
-            }
-            for (ParserInfo parserInfo : configuration.parserInfo()) {
-              configBuilder.addParser(parserInfo);
-            }
-            for (VerifierInfo verifierInfo : configuration.verifierInfo()) {
-              configBuilder.addVerifier(verifierInfo);
-            }
-            return configuration;
-          } catch (IOException e) {
-            error("Problem loading existing flags on compile time classpath: %s",
-                Throwables.getStackTraceAsString(e));
-            return null;
-          }
-        }
-      });
-
-  private final Configuration.Builder configBuilder = new Configuration.Builder();
-  private final ImmutableSet.Builder<String> contributingClassNamesBuilder = ImmutableSet.builder();
-
-  private Types typeUtils;
-  private Elements elementUtils;
-  private boolean isMain;
-  private boolean isCheckLinkage;
-
-  private static boolean getBooleanOption(Map<String, String> options, String name,
-      boolean defaultValue) {
-
-    if (!options.containsKey(name)) {
-      return defaultValue;
-    }
-
-    // We want to map the presence of a boolean option without a value to indicate true, giving the
-    // following accepted boolean option formats:
-    // -Afoo -> true
-    // -Afoo=false -> false
-    // -Afoo=true -> true
-
-    String isOption = options.get(name);
-    return (isOption == null) || Boolean.parseBoolean(isOption);
-  }
-
-  @Override
-  public void init(ProcessingEnvironment processingEnv) {
-    super.init(processingEnv);
-
-    typeUtils = processingEnv.getTypeUtils();
-    elementUtils = processingEnv.getElementUtils();
-
-    Map<String, String> options = processingEnv.getOptions();
-    isMain = getBooleanOption(options, MAIN_OPTION, false);
-    isCheckLinkage = getBooleanOption(options, CHECK_LINKAGE_OPTION, true);
-  }
-
-  @Override
-  public SourceVersion getSupportedSourceVersion() {
-    return SourceVersion.latest();
-  }
-
-  @Override
-  public Set<String> getSupportedAnnotationTypes() {
-    return ImmutableSet.copyOf(Iterables.transform(
-        ImmutableList.of(CmdLine.class, ArgParser.class, VerifierFor.class),
-        GET_NAME));
-  }
-
-  @Override
-  public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment roundEnv) {
-    try {
-      @Nullable Configuration classpathConfiguration = configSupplier.get();
-
-      Set<? extends Element> parsers = getAnnotatedElements(roundEnv, ArgParser.class);
-      contributingClassNamesBuilder.addAll(extractClassNames(parsers));
-      @Nullable Set<String> parsedTypes = getParsedTypes(classpathConfiguration, parsers);
-
-      Set<? extends Element> cmdlineArgs = getAnnotatedElements(roundEnv, CmdLine.class);
-      contributingClassNamesBuilder.addAll(extractEnclosingClassNames(cmdlineArgs));
-
-      for (ArgInfo cmdLineInfo : processAnnotatedArgs(parsedTypes, cmdlineArgs, CmdLine.class)) {
-        configBuilder.addCmdLineArg(cmdLineInfo);
-      }
-
-      processParsers(parsers);
-
-      Set<? extends Element> verifiers = getAnnotatedElements(roundEnv, VerifierFor.class);
-      contributingClassNamesBuilder.addAll(extractClassNames(verifiers));
-      processVerifiers(verifiers);
-
-      if (roundEnv.processingOver()) {
-        if (classpathConfiguration != null
-            && (!classpathConfiguration.isEmpty() || !configBuilder.isEmpty())) {
-
-          @Nullable Resource cmdLinePropertiesResource =
-              openCmdLinePropertiesResource(classpathConfiguration);
-          if (cmdLinePropertiesResource != null) {
-            Writer writer = cmdLinePropertiesResource.getWriter();
-            try {
-              configBuilder.build(classpathConfiguration).store(writer,
-                  "Generated via apt by " + getClass().getName());
-            } finally {
-              closeQuietly(writer);
-            }
-
-            writeResourceMapping(contributingClassNamesBuilder.build(),
-                cmdLinePropertiesResource.getResource());
-          }
-        }
-      }
-    // TODO(John Sirois): Investigate narrowing this catch - its not clear there is any need to be
-    // so general.
-    // SUPPRESS CHECKSTYLE RegexpSinglelineJava
-    } catch (RuntimeException e) {
-      // Catch internal errors - when these bubble more useful queued error messages are lost in
-      // some javac implementations.
-      error("Unexpected error completing annotation processing:\n%s",
-          Throwables.getStackTraceAsString(e));
-    }
-    return true;
-  }
-
-  private void writeResourceMapping(
-      Set<String> contributingClassNames,
-      FileObject cmdLinePropertiesResourcePath) {
-
-    // TODO(John Sirois): Lift the compiler resource-mappings writer to its own class/artifact to be
-    // re-used by other apt processors: https://github.com/twitter/commons/issues/319
-
-    // NB: javac rejects a package name with illegal package name characters like '-' so we just
-    // pass the empty package and the fully qualified resource file name.
-    @Nullable Resource resource = openResource("",
-        "META-INF/compiler/resource-mappings/" + getClass().getName());
-    if (resource != null) {
-      PrintWriter writer = new PrintWriter(resource.getWriter());
-      writer.printf("resources by class name:\n");
-      writer.printf("%d items\n", contributingClassNames.size());
-      try {
-        for (String className : contributingClassNames) {
-          writer.printf("%s -> %s\n", className, cmdLinePropertiesResourcePath.toUri().getPath());
-        }
-      } finally {
-        closeQuietly(writer);
-      }
-    }
-  }
-
-  private static final Function<Element, Element> EXTRACT_ENCLOSING_CLASS =
-      Element::getEnclosingElement;
-
-  private final Function<Element, String> extractClassName = element -> getBinaryName((TypeElement) element);
-
-  private final Function<Element, String> extractEnclosingClassName =
-      Functions.compose(extractClassName, EXTRACT_ENCLOSING_CLASS);
-
-  private Iterable<String> extractEnclosingClassNames(Iterable<? extends Element> elements) {
-    return Iterables.transform(elements, extractEnclosingClassName);
-  }
-
-  private Iterable<String> extractClassNames(Iterable<? extends Element> elements) {
-    return Iterables.transform(elements, extractClassName);
-  }
-
-  private void closeQuietly(Closeable closeable) {
-    try {
-      closeable.close();
-    } catch (IOException e) {
-      log(Kind.MANDATORY_WARNING, "Failed to close %s: %s", closeable, e);
-    }
-  }
-
-  @Nullable
-  private Set<String> getParsedTypes(@Nullable Configuration configuration,
-      Set<? extends Element> parsers) {
-
-    if (!isCheckLinkage) {
-      return null;
-    }
-
-    Iterable<String> parsersFor = Optional.presentInstances(Iterables.transform(parsers,
-        parser -> {
-          TypeMirror parsedType = getTypeArgument(parser.asType(), typeElement(Parser.class));
-          if (parsedType == null) {
-            error("failed to find a type argument for Parser: %s", parser);
-            return Optional.absent();
-          }
-          // Equals on TypeMirrors doesn't work - so we compare string representations :/
-          return Optional.of(typeUtils.erasure(parsedType).toString());
-        }));
-    if (configuration != null) {
-      parsersFor = Iterables.concat(parsersFor, Iterables.filter(
-          Iterables.transform(configuration.parserInfo(),
-              new Function<ParserInfo, String>() {
-                @Override @Nullable public String apply(ParserInfo parserInfo) {
-                  TypeElement typeElement = elementUtils.getTypeElement(parserInfo.parsedType);
-                  // We may not have a type on the classpath for a previous round - this is fine as
-                  // long as the no Args in this round that are of the type.
-                  return (typeElement == null)
-                      ? null : typeUtils.erasure(typeElement.asType()).toString();
-                }
-              }), Predicates.notNull()));
-    }
-    return ImmutableSet.copyOf(parsersFor);
-  }
-
-  private Iterable<ArgInfo> processAnnotatedArgs(
-      @Nullable final Set<String> parsedTypes,
-      Set<? extends Element> args,
-      final Class<? extends Annotation> argAnnotation) {
-
-    return Optional.presentInstances(Iterables.transform(args,
-        arg -> {
-          @Nullable TypeElement containingType = processArg(parsedTypes, arg, argAnnotation);
-            if (containingType == null) {
-              return Optional.absent();
-            } else {
-              return Optional.of(new ArgInfo(getBinaryName(containingType),
-                  arg.getSimpleName().toString()));
-            }
-          }));
-  }
-
-  private Set<? extends Element> getAnnotatedElements(RoundEnvironment roundEnv,
-      Class<? extends Annotation> argAnnotation) {
-    return roundEnv.getElementsAnnotatedWith(typeElement(argAnnotation));
-  }
-
-  @Nullable
-  private TypeElement processArg(@Nullable Set<String> parsedTypes, Element annotationElement,
-      Class<? extends Annotation> annotationType) {
-
-    TypeElement parserType = typeElement(Parser.class);
-    if (annotationElement.getKind() != ElementKind.FIELD) {
-      error("Found a @%s annotation on a non-field %s",
-          annotationType.getSimpleName(), annotationElement);
-      return null;
-    } else {
-      // Only types contain fields so this cast is safe.
-      TypeElement containingType = (TypeElement) annotationElement.getEnclosingElement();
-
-      if (!isAssignable(annotationElement.asType(), Arg.class)) {
-        error("Found a @%s annotation on a non-Arg %s.%s",
-            annotationType.getSimpleName(), containingType, annotationElement);
-        return null;
-      }
-      if (!annotationElement.getModifiers().contains(Modifier.STATIC)) {
-        return null;
-      }
-
-      if (parsedTypes != null) {
-        // Check Parser<T> linkage for the Arg<T> type T.
-        TypeMirror typeArgument =
-            getTypeArgument(annotationElement.asType(), typeElement(Arg.class));
-        @Nullable AnnotationMirror cmdLine =
-            getAnnotationMirror(annotationElement, typeElement(annotationType));
-        if (cmdLine != null) {
-          TypeMirror customParserType = getClassType(cmdLine, "parser", parserType).asType();
-          if (typeUtils.isSameType(parserType.asType(), customParserType)) {
-            if (!checkTypePresent(parsedTypes, typeArgument)) {
-              error("No parser registered for %s, %s.%s is un-parseable",
-                  typeArgument, containingType, annotationElement);
-            }
-          } else {
-            TypeMirror customParsedType = getTypeArgument(customParserType, parserType);
-            if (!isAssignable(typeArgument, customParsedType)) {
-              error("Custom parser %s parses %s but registered for %s.%s with Arg type %s",
-                  customParserType, customParsedType, containingType, annotationElement,
-                  typeArgument);
-            }
-          }
-        }
-      }
-
-      // TODO(John Sirois): Add additional compile-time @CmdLine verification for:
-      // 1.) for each @CmdLine Arg<T> annotated with @VerifierFor.annotation: T is a subtype of
-      //     V where there is a Verifier<V>
-      // 2.) name checks, including dups
-
-      return containingType;
-    }
-  }
-
-  private boolean checkTypePresent(Set<String> types, TypeMirror type) {
-    Iterable<TypeMirror> allTypes = getAllTypes(type);
-    for (TypeMirror t : allTypes) {
-      if (types.contains(typeUtils.erasure(t).toString())) {
-        return true;
-      }
-    }
-    return false;
-  }
-
-  private void processParsers(Set<? extends Element> elements) {
-    TypeElement parserType = typeElement(Parser.class);
-    for (Element element : elements) {
-      if (element.getKind() != ElementKind.CLASS) {
-        error("Found an @ArgParser annotation on a non-class %s", element);
-      } else {
-        TypeElement parser = (TypeElement) element;
-        if (!isAssignable(parser, Parser.class)) {
-          error("Found an @ArgParser annotation on a non-Parser %s", element);
-          return;
-        }
-
-        @Nullable String parsedType = getTypeArgument(parser, parserType);
-        if (parsedType != null) {
-          configBuilder.addParser(parsedType, getBinaryName(parser));
-        }
-      }
-    }
-  }
-
-  private void processVerifiers(Set<? extends Element> elements) {
-    TypeElement verifierType = typeElement(Verifier.class);
-    TypeElement verifierForType = typeElement(VerifierFor.class);
-    for (Element element : elements) {
-      if (element.getKind() != ElementKind.CLASS) {
-        error("Found a @VerifierFor annotation on a non-class %s", element);
-      } else {
-        TypeElement verifier = (TypeElement) element;
-        if (!isAssignable(verifier, Verifier.class)) {
-          error("Found a @Verifier annotation on a non-Verifier %s", element);
-          return;
-        }
-
-        @Nullable AnnotationMirror verifierFor = getAnnotationMirror(verifier, verifierForType);
-        if (verifierFor != null) {
-          @Nullable TypeElement verifyAnnotationType = getClassType(verifierFor, "value", null);
-          if (verifyAnnotationType != null) {
-            @Nullable String verifiedType = getTypeArgument(verifier, verifierType);
-            if (verifiedType != null) {
-              String verifyAnnotationClassName =
-                  elementUtils.getBinaryName(verifyAnnotationType).toString();
-              configBuilder.addVerifier(verifiedType, verifyAnnotationClassName,
-                  getBinaryName(verifier));
-            }
-          }
-        }
-      }
-    }
-  }
-
-  @Nullable
-  private String getTypeArgument(TypeElement annotatedType, final TypeElement baseType) {
-    TypeMirror typeArgument = getTypeArgument(annotatedType.asType(), baseType);
-    return typeArgument == null
-        ? null
-        : getBinaryName((TypeElement) typeUtils.asElement(typeArgument));
-  }
-
-  private Iterable<TypeMirror> getAllTypes(TypeMirror type) {
-    return getAllTypes(new HashSet<String>(), Lists.<TypeMirror>newArrayList(), type);
-  }
-
-  private Iterable<TypeMirror> getAllTypes(Set<String> visitedTypes, List<TypeMirror> types,
-      TypeMirror type) {
-
-    String typeName = typeUtils.erasure(type).toString();
-    if (!visitedTypes.contains(typeName)) {
-      types.add(type);
-      visitedTypes.add(typeName);
-      for (TypeMirror superType : typeUtils.directSupertypes(type)) {
-        getAllTypes(visitedTypes, types, superType);
-      }
-    }
-    return types;
-  }
-
-  @Nullable
-  private TypeMirror getTypeArgument(TypeMirror annotatedType, final TypeElement baseType) {
-    for (TypeMirror type : getAllTypes(annotatedType)) {
-      TypeMirror typeArgument = type.accept(new SimpleTypeVisitor6<TypeMirror, Void>() {
-        @Override public TypeMirror visitDeclared(DeclaredType t, Void aVoid) {
-          if (isAssignable(t, baseType)) {
-            List<? extends TypeMirror> typeArguments = t.getTypeArguments();
-            if (!typeArguments.isEmpty()) {
-              return typeUtils.erasure(typeArguments.get(0));
-            }
-          }
-          return null;
-        }
-      }, null);
-
-      if (typeArgument != null) {
-        return typeArgument;
-      }
-    }
-    error("Failed to find a type argument for %s in %s", baseType, annotatedType);
-    return null;
-  }
-
-  @Nullable
-  private AnnotationMirror getAnnotationMirror(Element element, TypeElement annotationType) {
-    for (AnnotationMirror annotationMirror : element.getAnnotationMirrors()) {
-      if (typeUtils.isSameType(annotationMirror.getAnnotationType(),  annotationType.asType())) {
-        return annotationMirror;
-      }
-    }
-    error("Failed to find an annotation of type %s on %s", annotationType, element);
-    return null;
-  }
-
-  @SuppressWarnings("unchecked")
-  private TypeElement getClassType(AnnotationMirror annotationMirror, String methodName,
-      TypeElement defaultClassType) {
-
-    for (Map.Entry<? extends ExecutableElement, ? extends AnnotationValue> entry
-        : annotationMirror.getElementValues().entrySet()) {
-      if (entry.getKey().getSimpleName().equals(elementUtils.getName(methodName))) {
-        TypeElement classType = entry.getValue().accept(
-            new SimpleAnnotationValueVisitor6<TypeElement, Void>() {
-              @Override public TypeElement visitType(TypeMirror t, Void unused) {
-                return (TypeElement) processingEnv.getTypeUtils().asElement(t);
-              }
-            }, null);
-
-        if (classType != null) {
-          return classType;
-        }
-      }
-    }
-    if (defaultClassType == null) {
-      error("Could not find a class type for %s.%s", annotationMirror, methodName);
-    }
-    return defaultClassType;
-  }
-
-  @Nullable
-  private FileObject createCommandLineDb(Configuration configuration) {
-    String name = isMain ? Configuration.mainResourceName() : configuration.nextResourceName();
-    return createResource(Configuration.DEFAULT_RESOURCE_PACKAGE, name);
-  }
-
-  @Nullable
-  private FileObject createResource(String packageName, String name) {
-    try {
-      return processingEnv.getFiler().createResource(StandardLocation.CLASS_OUTPUT,
-          packageName, name);
-    } catch (IOException e) {
-      error("Failed to create resource file to store %s/%s: %s",
-          packageName, name, Throwables.getStackTraceAsString(e));
-      return null;
-    }
-  }
-
-  private static final class Resource {
-    private final FileObject resource;
-    private final Writer writer;
-
-    Resource(FileObject resource, Writer writer) {
-      this.resource = resource;
-      this.writer = writer;
-    }
-
-    FileObject getResource() {
-      return resource;
-    }
-
-    Writer getWriter() {
-      return writer;
-    }
-  }
-
-  @Nullable
-  private Resource openCmdLinePropertiesResource(Configuration configuration) {
-    @Nullable FileObject resource = createCommandLineDb(configuration);
-    return openResource(resource);
-  }
-
-  @Nullable
-  private Resource openResource(String packageName, String name) {
-    @Nullable FileObject resource = createResource(packageName, name);
-    return openResource(resource);
-  }
-
-  @Nullable
-  private Resource openResource(@Nullable FileObject resource) {
-    if (resource == null) {
-      return null;
-    }
-    try {
-      log(Kind.NOTE, "Writing %s", resource.toUri());
-      return new Resource(resource, resource.openWriter());
-    } catch (IOException e) {
-      if (!resource.delete()) {
-        log(Kind.WARNING, "Failed to clean up %s after a failing to open it for writing",
-            resource.toUri());
-      }
-      error("Failed to open resource file to store %s: %s", resource.toUri(),
-          Throwables.getStackTraceAsString(e));
-      return null;
-    }
-  }
-
-  private TypeElement typeElement(Class<?> type) {
-    return elementUtils.getTypeElement(type.getName());
-  }
-
-  private String getBinaryName(TypeElement typeElement) {
-    return elementUtils.getBinaryName(typeElement).toString();
-  }
-
-  private boolean isAssignable(TypeElement subType, Class<?> baseType) {
-    return isAssignable(subType.asType(), baseType);
-  }
-
-  private boolean isAssignable(TypeMirror subType, Class<?> baseType) {
-    return isAssignable(subType, typeElement(baseType));
-  }
-
-  private boolean isAssignable(TypeMirror subType, TypeElement baseType) {
-    return isAssignable(subType, baseType.asType());
-  }
-
-  private boolean isAssignable(TypeMirror subType, TypeMirror baseType) {
-    return typeUtils.isAssignable(typeUtils.erasure(subType), typeUtils.erasure(baseType));
-  }
-
-  private void error(String message, Object ... args) {
-    log(Kind.ERROR, message, args);
-  }
-
-  private void log(Kind kind, String message, Object ... args) {
-    processingEnv.getMessager().printMessage(kind, String.format(message, args));
-  }
-}

http://git-wip-us.apache.org/repos/asf/aurora/blob/519e3df7/commons-args/src/main/java/org/apache/aurora/common/args/apt/Configuration.java
----------------------------------------------------------------------
diff --git a/commons-args/src/main/java/org/apache/aurora/common/args/apt/Configuration.java b/commons-args/src/main/java/org/apache/aurora/common/args/apt/Configuration.java
deleted file mode 100644
index 1832d41..0000000
--- a/commons-args/src/main/java/org/apache/aurora/common/args/apt/Configuration.java
+++ /dev/null
@@ -1,476 +0,0 @@
-/**
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.aurora.common.args.apt;
-
-import java.io.IOException;
-import java.io.PrintWriter;
-import java.io.Reader;
-import java.io.Writer;
-import java.net.URL;
-import java.nio.charset.StandardCharsets;
-import java.util.Date;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Set;
-import java.util.logging.Logger;
-
-import com.google.common.base.CharMatcher;
-import com.google.common.base.Function;
-import com.google.common.base.Preconditions;
-import com.google.common.collect.ImmutableList;
-import com.google.common.collect.ImmutableSet;
-import com.google.common.collect.Iterables;
-import com.google.common.collect.Iterators;
-import com.google.common.collect.Lists;
-import com.google.common.collect.Sets;
-import com.google.common.io.CharSource;
-import com.google.common.io.CharStreams;
-import com.google.common.io.LineProcessor;
-import com.google.common.io.Resources;
-
-import org.apache.commons.lang.builder.EqualsBuilder;
-import org.apache.commons.lang.builder.HashCodeBuilder;
-import org.apache.commons.lang.builder.ToStringBuilder;
-
-/**
- * Loads and stores {@literal @CmdLine} configuration data. By default, that data
- * is contained in text files called cmdline.arg.info.txt.0, cmdline.arg.info.txt.1
- * etc. Every time a new Configuration object is created, it consumes all existing
- * files with the above names. Saving this Configuration results in creation of a
- * file with index increased by one, e.g. cmdline.arg.info.txt.2 in the above
- * example.
- *
- * @author John Sirois
- */
-public final class Configuration {
-
-  /**
-   * Indicates a problem reading stored {@literal @CmdLine} arg configuration data.
-   */
-  public static class ConfigurationException extends RuntimeException {
-    public ConfigurationException(String message, Object... args) {
-      super(String.format(message, args));
-    }
-    public ConfigurationException(Throwable cause) {
-      super(cause);
-    }
-  }
-
-  static final String DEFAULT_RESOURCE_PACKAGE = Configuration.class.getPackage().getName();
-
-  private static final Logger LOG = Logger.getLogger(Configuration.class.getName());
-
-  private static final CharMatcher IDENTIFIER_START =
-      CharMatcher.forPredicate(Character::isJavaIdentifierStart);
-
-  private static final CharMatcher IDENTIFIER_REST =
-      CharMatcher.forPredicate(Character::isJavaIdentifierPart);
-
-  private static final Function<URL, CharSource> URL_TO_SOURCE = input -> Resources.asCharSource(input, StandardCharsets.UTF_8);
-
-  private static final String DEFAULT_RESOURCE_NAME = "cmdline.arg.info.txt";
-
-  private int nextResourceIndex;
-  private final ImmutableSet<ArgInfo> cmdLineInfos;
-  private final ImmutableSet<ParserInfo> parserInfos;
-  private final ImmutableSet<VerifierInfo> verifierInfos;
-
-  private Configuration(
-      int nextResourceIndex,
-      Iterable<ArgInfo> cmdLineInfos,
-      Iterable<ParserInfo> parserInfos,
-      Iterable<VerifierInfo> verifierInfos) {
-
-    this.nextResourceIndex = nextResourceIndex;
-    this.cmdLineInfos = ImmutableSet.copyOf(cmdLineInfos);
-    this.parserInfos = ImmutableSet.copyOf(parserInfos);
-    this.verifierInfos = ImmutableSet.copyOf(verifierInfos);
-  }
-
-  private static String checkValidIdentifier(String identifier, boolean compound) {
-    Preconditions.checkNotNull(identifier);
-
-    String trimmed = identifier.trim();
-    Preconditions.checkArgument(!trimmed.isEmpty(), "Invalid identifier: '%s'", identifier);
-
-    String[] parts = compound ? trimmed.split("\\.") : new String[] {trimmed};
-    for (String part : parts) {
-      Preconditions.checkArgument(
-          IDENTIFIER_REST.matchesAllOf(IDENTIFIER_START.trimLeadingFrom(part)),
-          "Invalid identifier: '%s'", identifier);
-    }
-
-    return trimmed;
-  }
-
-  public static final class ArgInfo {
-    public final String className;
-    public final String fieldName;
-
-    public ArgInfo(String className, String fieldName) {
-      this.className = checkValidIdentifier(className, true);
-      this.fieldName = checkValidIdentifier(fieldName, false);
-    }
-
-    @Override
-    public boolean equals(Object obj) {
-      if (this == obj) {
-        return true;
-      }
-
-      if (!(obj instanceof ArgInfo)) {
-        return false;
-      }
-
-      ArgInfo other = (ArgInfo) obj;
-
-      return new EqualsBuilder()
-          .append(className, other.className)
-          .append(fieldName, other.fieldName)
-          .isEquals();
-    }
-
-    @Override
-    public int hashCode() {
-      return new HashCodeBuilder()
-          .append(className)
-          .append(fieldName)
-          .toHashCode();
-    }
-
-    @Override public String toString() {
-      return new ToStringBuilder(this)
-          .append("className", className)
-          .append("fieldName", fieldName)
-          .toString();
-    }
-  }
-
-  public static final class ParserInfo {
-    public final String parsedType;
-    public final String parserClass;
-
-    public ParserInfo(String parsedType, String parserClass) {
-      this.parsedType = checkValidIdentifier(parsedType, true);
-      this.parserClass = checkValidIdentifier(parserClass, true);
-    }
-
-    @Override
-    public boolean equals(Object obj) {
-      if (this == obj) {
-        return true;
-      }
-
-      if (!(obj instanceof ParserInfo)) {
-        return false;
-      }
-
-      ParserInfo other = (ParserInfo) obj;
-
-      return new EqualsBuilder()
-          .append(parsedType, other.parsedType)
-          .append(parserClass, other.parserClass)
-          .isEquals();
-    }
-
-    @Override
-    public int hashCode() {
-      return new HashCodeBuilder()
-          .append(parsedType)
-          .append(parserClass)
-          .toHashCode();
-    }
-
-    @Override public String toString() {
-      return new ToStringBuilder(this)
-          .append("parsedType", parsedType)
-          .append("parserClass", parserClass)
-          .toString();
-    }
-  }
-
-  public static final class VerifierInfo {
-    public final String verifiedType;
-    public final String verifyingAnnotation;
-    public final String verifierClass;
-
-    public VerifierInfo(String verifiedType, String verifyingAnnotation, String verifierClass) {
-      this.verifiedType = checkValidIdentifier(verifiedType, true);
-      this.verifyingAnnotation = checkValidIdentifier(verifyingAnnotation, true);
-      this.verifierClass = checkValidIdentifier(verifierClass, true);
-    }
-
-    @Override
-    public boolean equals(Object obj) {
-      if (this == obj) {
-        return true;
-      }
-
-      if (!(obj instanceof VerifierInfo)) {
-        return false;
-      }
-
-      VerifierInfo other = (VerifierInfo) obj;
-
-      return new EqualsBuilder()
-          .append(verifiedType, other.verifiedType)
-          .append(verifyingAnnotation, other.verifyingAnnotation)
-          .append(verifierClass, other.verifierClass)
-          .isEquals();
-    }
-
-    @Override
-    public int hashCode() {
-      return new HashCodeBuilder()
-          .append(verifiedType)
-          .append(verifyingAnnotation)
-          .append(verifierClass)
-          .toHashCode();
-    }
-
-    @Override public String toString() {
-      return new ToStringBuilder(this)
-          .append("verifiedType", verifiedType)
-          .append("verifyingAnnotation", verifyingAnnotation)
-          .append("verifierClass", verifierClass)
-          .toString();
-    }
-  }
-
-  static class Builder {
-    private final Set<ArgInfo> argInfos = Sets.newHashSet();
-    private final Set<ParserInfo> parserInfos = Sets.newHashSet();
-    private final Set<VerifierInfo> verifierInfos = Sets.newHashSet();
-
-    public boolean isEmpty() {
-      return argInfos.isEmpty()
-          && parserInfos.isEmpty()
-          && verifierInfos.isEmpty();
-    }
-
-    void addCmdLineArg(ArgInfo argInfo) {
-      argInfos.add(argInfo);
-    }
-
-    void addParser(ParserInfo parserInfo) {
-      parserInfos.add(parserInfo);
-    }
-
-    public void addParser(String parserForType, String parserType) {
-      addParser(new ParserInfo(parserForType, parserType));
-    }
-
-    void addVerifier(VerifierInfo verifierInfo) {
-      verifierInfos.add(verifierInfo);
-    }
-
-    public void addVerifier(String verifierForType, String annotationType, String verifierType) {
-      addVerifier(new VerifierInfo(verifierForType, annotationType, verifierType));
-    }
-
-    public Configuration build(Configuration configuration) {
-      return new Configuration(
-          configuration.nextResourceIndex + 1,
-          argInfos,
-          parserInfos,
-          verifierInfos);
-    }
-  }
-
-  private static String getResourceName(int index) {
-    return String.format("%s.%s", DEFAULT_RESOURCE_NAME, index);
-  }
-
-  private static String getResourcePath(int index) {
-    return String.format("%s/%s", DEFAULT_RESOURCE_PACKAGE.replace('.', '/'),
-        getResourceName(index));
-  }
-
-  static final class ConfigurationResources {
-    private final int nextResourceIndex;
-    private final Iterator<URL> resources;
-
-    private ConfigurationResources(int nextResourceIndex, Iterator<URL> resources) {
-      this.nextResourceIndex = nextResourceIndex;
-      this.resources = resources;
-    }
-  }
-
-  /**
-   * Loads the {@literal @CmdLine} argument configuration data stored in the classpath.
-   *
-   * @return The {@literal @CmdLine} argument configuration materialized from the classpath.
-   * @throws ConfigurationException if any configuration data is malformed.
-   * @throws IOException if the configuration data can not be read from the classpath.
-   */
-  public static Configuration load() throws ConfigurationException, IOException {
-    ConfigurationResources allResources = getAllResources();
-    List<URL> configs = ImmutableList.copyOf(allResources.resources);
-    if (configs.isEmpty()) {
-      LOG.info("No @CmdLine arg configs found on the classpath");
-    } else {
-      LOG.info("Loading @CmdLine config from: " + configs);
-    }
-    return load(allResources.nextResourceIndex, configs);
-  }
-
-  private static ConfigurationResources getAllResources() throws IOException {
-    int maxResourceIndex = 0;
-    Iterator<URL> allResources = getResources(0); // Try for a main
-    // Probe for resource files with index up to 10 (or more, while resources at the
-    // given index can be found)
-    for (int nextResourceIndex = 1; nextResourceIndex <= maxResourceIndex + 10;
-         nextResourceIndex++) {
-      Iterator<URL> resources = getResources(nextResourceIndex);
-      if (resources.hasNext()) {
-        allResources = Iterators.concat(allResources, resources);
-        maxResourceIndex = nextResourceIndex;
-      }
-    }
-    return new ConfigurationResources(maxResourceIndex + 1, allResources);
-  }
-
-  private static Iterator<URL> getResources(int index) throws IOException {
-    return Iterators.forEnumeration(
-        Configuration.class.getClassLoader().getResources(getResourcePath(index)));
-  }
-
-  private static final class ConfigurationParser implements LineProcessor<Configuration> {
-    private final int nextIndex;
-    private int lineNumber = 0;
-
-    private final ImmutableList.Builder<ArgInfo> fieldInfoBuilder = ImmutableList.builder();
-    private final ImmutableList.Builder<ParserInfo> parserInfoBuilder = ImmutableList.builder();
-    private final ImmutableList.Builder<VerifierInfo> verifierInfoBuilder = ImmutableList.builder();
-
-    private ConfigurationParser(int nextIndex) {
-      this.nextIndex = nextIndex;
-    }
-
-    @Override
-    public boolean processLine(String line) throws IOException {
-      ++lineNumber;
-      String trimmed = line.trim();
-      if (!trimmed.isEmpty() && !trimmed.startsWith("#")) {
-        List<String> parts = Lists.newArrayList(trimmed.split(" "));
-        if (parts.size() < 1) {
-          throw new ConfigurationException("Invalid line: %s @%d", trimmed, lineNumber);
-        }
-
-        String type = parts.remove(0);
-        if ("field".equals(type)) {
-          if (parts.size() != 2) {
-            throw new ConfigurationException("Invalid field line: %s @%d", trimmed, lineNumber);
-          }
-          fieldInfoBuilder.add(new ArgInfo(parts.get(0), parts.get(1)));
-        } else if ("parser".equals(type)) {
-          if (parts.size() != 2) {
-            throw new ConfigurationException("Invalid parser line: %s @%d", trimmed, lineNumber);
-          }
-          parserInfoBuilder.add(new ParserInfo(parts.get(0), parts.get(1)));
-        } else if ("verifier".equals(type)) {
-          if (parts.size() != 3) {
-            throw new ConfigurationException("Invalid verifier line: %s @%d", trimmed, lineNumber);
-          }
-          verifierInfoBuilder.add(new VerifierInfo(parts.get(0), parts.get(1), parts.get(2)));
-        } else {
-          LOG.warning(String.format("Did not recognize entry type %s for line: %s @%d",
-              type, trimmed, lineNumber));
-        }
-      }
-      return true;
-    }
-
-    @Override
-    public Configuration getResult() {
-      return new Configuration(
-          nextIndex,
-          fieldInfoBuilder.build(),
-          parserInfoBuilder.build(),
-          verifierInfoBuilder.build());
-    }
-  }
-
-  private static Configuration load(int nextIndex, List<URL> configs)
-      throws ConfigurationException, IOException {
-    CharSource input = CharSource.concat(Iterables.transform(configs, URL_TO_SOURCE));
-    try(Reader reader = input.openStream()) {
-      return CharStreams.readLines(reader, new ConfigurationParser(nextIndex));
-    }
-  }
-
-  public boolean isEmpty() {
-    return cmdLineInfos.isEmpty()
-        && parserInfos.isEmpty()
-        && verifierInfos.isEmpty();
-  }
-
-  /**
-   * Returns the field info for all the {@literal @CmdLine} annotated fields on the classpath.
-   *
-   * @return The field info for all the {@literal @CmdLine} annotated fields.
-   */
-  public Iterable<ArgInfo> optionInfo() {
-    return cmdLineInfos;
-  }
-
-  /**
-   * Returns the parser info for all the {@literal @ArgParser} annotated parsers on the classpath.
-   *
-   * @return The parser info for all the {@literal @ArgParser} annotated parsers.
-   */
-  public Iterable<ParserInfo> parserInfo() {
-    return parserInfos;
-  }
-
-  /**
-   * Returns the verifier info for all the {@literal @VerifierFor} annotated verifiers on the
-   * classpath.
-   *
-   * @return The verifier info for all the {@literal @VerifierFor} annotated verifiers.
-   */
-  public Iterable<VerifierInfo> verifierInfo() {
-    return verifierInfos;
-  }
-
-  static String mainResourceName() {
-    return getResourceName(0);
-  }
-
-  String nextResourceName() {
-    return getResourceName(nextResourceIndex);
-  }
-
-  void store(Writer output, String message) {
-    PrintWriter writer = new PrintWriter(output);
-    writer.printf("# %s\n", new Date());
-    writer.printf("# %s\n ", message);
-
-    writer.println();
-    for (ArgInfo info : cmdLineInfos) {
-      writer.printf("field %s %s\n", info.className, info.fieldName);
-    }
-
-    writer.println();
-    for (ParserInfo info : parserInfos) {
-      writer.printf("parser %s %s\n", info.parsedType, info.parserClass);
-    }
-
-    writer.println();
-    for (VerifierInfo info : verifierInfos) {
-      writer.printf("verifier %s %s %s\n",
-          info.verifiedType, info.verifyingAnnotation, info.verifierClass);
-    }
-  }
-}

http://git-wip-us.apache.org/repos/asf/aurora/blob/519e3df7/commons-args/src/main/resources/META-INF/services/javax.annotation.processing.Processor
----------------------------------------------------------------------
diff --git a/commons-args/src/main/resources/META-INF/services/javax.annotation.processing.Processor b/commons-args/src/main/resources/META-INF/services/javax.annotation.processing.Processor
deleted file mode 100644
index b548fcd..0000000
--- a/commons-args/src/main/resources/META-INF/services/javax.annotation.processing.Processor
+++ /dev/null
@@ -1 +0,0 @@
-org.apache.aurora.common.args.apt.CmdLineProcessor

http://git-wip-us.apache.org/repos/asf/aurora/blob/519e3df7/commons/src/main/java/org/apache/aurora/common/args/ArgFilters.java
----------------------------------------------------------------------
diff --git a/commons/src/main/java/org/apache/aurora/common/args/ArgFilters.java b/commons/src/main/java/org/apache/aurora/common/args/ArgFilters.java
deleted file mode 100644
index 9fd6eae..0000000
--- a/commons/src/main/java/org/apache/aurora/common/args/ArgFilters.java
+++ /dev/null
@@ -1,109 +0,0 @@
-/**
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.aurora.common.args;
-
-import java.lang.reflect.Field;
-import java.util.Set;
-
-import com.google.common.base.Preconditions;
-import com.google.common.base.Predicate;
-import com.google.common.base.Predicates;
-import com.google.common.collect.ImmutableSet;
-
-import org.apache.aurora.common.base.MorePreconditions;
-
-/**
- * Utilities for generating {@literal @CmdLine} {@link Arg} filters suitable for use with
- * {@link ArgScanner#parse(Predicate, Iterable)}.  These filters assume the
- * fields parsed will all be annotated with {@link CmdLine}.
- *
- * @author John Sirois
- */
-public final class ArgFilters {
-
-  /**
-   * A filter that selects all {@literal @CmdLine} {@link Arg}s found on the classpath.
-   */
-  public static final Predicate<Field> SELECT_ALL = Predicates.alwaysTrue();
-
-  private ArgFilters() {
-    // utility
-  }
-
-  /**
-   * Creates a filter that selects all {@literal @CmdLine} {@link Arg}s found in classes that are
-   * members of the given package.  Note that this will not select subpackages.
-   *
-   * @param pkg The exact package of classes whose command line args will be selected.
-   * @return A filter that selects only command line args declared in classes that are members of
-   *     the given {@code pkg}.
-   */
-  public static Predicate<Field> selectPackage(final Package pkg) {
-    Preconditions.checkNotNull(pkg);
-    return field -> field.getDeclaringClass().getPackage().equals(pkg);
-  }
-
-  /**
-   * Creates a filter that selects all {@literal @CmdLine} {@link Arg}s found in classes that are
-   * members of the given package or its sub-packages.
-   *
-   * @param pkg The ancestor package of classes whose command line args will be selected.
-   * @return A filter that selects only command line args declared in classes that are members of
-   *     the given {@code pkg} or its sub-packages.
-   */
-  public static Predicate<Field> selectAllPackagesUnderHere(final Package pkg) {
-    Preconditions.checkNotNull(pkg);
-    final String prefix = pkg.getName() + '.';
-    return Predicates.or(selectPackage(pkg), field -> {
-      return field.getDeclaringClass().getPackage().getName().startsWith(prefix);
-    });
-  }
-
-  /**
-   * Creates a filter that selects all {@literal @CmdLine} {@link Arg}s found in the given class.
-   *
-   * @param clazz The class whose command line args will be selected.
-   * @return A filter that selects only command line args declared in the given {@code clazz}.
-   */
-  public static Predicate<Field> selectClass(final Class<?> clazz) {
-    Preconditions.checkNotNull(clazz);
-    return field -> field.getDeclaringClass().equals(clazz);
-  }
-
-  /**
-   * Creates a filter that selects all {@literal @CmdLine} {@link Arg}s found in the given classes.
-   *
-   * @param cls The classes whose command line args will be selected.
-   * @return A filter that selects only command line args declared in the given classes.
-   */
-  public static Predicate<Field> selectClasses(final Class<?> ... cls) {
-    Preconditions.checkNotNull(cls);
-    final Set<Class<?>> listOfClasses = ImmutableSet.copyOf(cls);
-    return field -> listOfClasses.contains(field.getDeclaringClass());
-  }
-
-  /**
-   * Creates a filter that selects a single {@literal @CmdLine} {@link Arg}.
-   *
-   * @param clazz The class that declares the command line arg to be selected.
-   * @param name The {@link CmdLine#name()} of the arg to select.
-   * @return A filter that selects a single specified command line arg.
-   */
-  public static Predicate<Field> selectCmdLineArg(Class<?> clazz, final String name) {
-    MorePreconditions.checkNotBlank(name);
-    return Predicates.and(selectClass(clazz), field -> {
-      return field.getAnnotation(CmdLine.class).name().equals(name);
-    });
-  }
-}