You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@beam.apache.org by go...@apache.org on 2019/08/02 18:35:12 UTC

[beam] branch master updated: [BEAM-7868] optionally skip hidden pipeline options

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

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


The following commit(s) were added to refs/heads/master by this push:
     new 2c8bf9f  [BEAM-7868] optionally skip hidden pipeline options
     new 47cf7ee  Merge pull request #9211 from angoenka/hidden_options
2c8bf9f is described below

commit 2c8bf9fbfd66b9d57284c93f4ff76b4c223b5305
Author: Ankur Goenka <an...@gmail.com>
AuthorDate: Wed Jul 31 19:34:50 2019 -0700

    [BEAM-7868] optionally skip hidden pipeline options
---
 .../beam/sdk/options/PipelineOptionsFactory.java     |  4 ++--
 .../beam/sdk/options/PipelineOptionsReflector.java   | 11 ++++++-----
 .../sdk/options/PipelineOptionsReflectorTest.java    | 20 ++++++++++++++------
 3 files changed, 22 insertions(+), 13 deletions(-)

diff --git a/sdks/java/core/src/main/java/org/apache/beam/sdk/options/PipelineOptionsFactory.java b/sdks/java/core/src/main/java/org/apache/beam/sdk/options/PipelineOptionsFactory.java
index 683b2c3..b887394 100644
--- a/sdks/java/core/src/main/java/org/apache/beam/sdk/options/PipelineOptionsFactory.java
+++ b/sdks/java/core/src/main/java/org/apache/beam/sdk/options/PipelineOptionsFactory.java
@@ -592,7 +592,7 @@ public class PipelineOptionsFactory {
     checkNotNull(iface);
     CACHE.get().validateWellFormed(iface);
 
-    Set<PipelineOptionSpec> properties = PipelineOptionsReflector.getOptionSpecs(iface);
+    Set<PipelineOptionSpec> properties = PipelineOptionsReflector.getOptionSpecs(iface, true);
 
     RowSortedTable<Class<?>, String, Method> ifacePropGetterTable =
         TreeBasedTable.create(ClassNameComparator.INSTANCE, Ordering.natural());
@@ -661,7 +661,7 @@ public class PipelineOptionsFactory {
     for (Class<? extends PipelineOptions> iface : ifaces) {
       CACHE.get().validateWellFormed(iface);
 
-      Set<PipelineOptionSpec> properties = PipelineOptionsReflector.getOptionSpecs(iface);
+      Set<PipelineOptionSpec> properties = PipelineOptionsReflector.getOptionSpecs(iface, false);
 
       RowSortedTable<Class<?>, String, Method> ifacePropGetterTable =
           TreeBasedTable.create(ClassNameComparator.INSTANCE, Ordering.natural());
diff --git a/sdks/java/core/src/main/java/org/apache/beam/sdk/options/PipelineOptionsReflector.java b/sdks/java/core/src/main/java/org/apache/beam/sdk/options/PipelineOptionsReflector.java
index 78e2df4..5a9e9db 100644
--- a/sdks/java/core/src/main/java/org/apache/beam/sdk/options/PipelineOptionsReflector.java
+++ b/sdks/java/core/src/main/java/org/apache/beam/sdk/options/PipelineOptionsReflector.java
@@ -31,12 +31,13 @@ class PipelineOptionsReflector {
   private PipelineOptionsReflector() {}
 
   /**
-   * Retrieve metadata for the full set of pipeline options visible within the type hierarchy of a
-   * single {@link PipelineOptions} interface.
+   * Retrieve metadata for the full set of pipeline options within the type hierarchy of a single
+   * {@link PipelineOptions} interface with optional filtering {@link Hidden} options.
    *
    * @see PipelineOptionsReflector#getOptionSpecs(Iterable)
    */
-  static Set<PipelineOptionSpec> getOptionSpecs(Class<? extends PipelineOptions> optionsInterface) {
+  static Set<PipelineOptionSpec> getOptionSpecs(
+      Class<? extends PipelineOptions> optionsInterface, boolean skipHidden) {
     Iterable<Method> methods = ReflectHelpers.getClosureOfMethodsOnInterface(optionsInterface);
     Multimap<String, Method> propsToGetters = getPropertyNamesToGetters(methods);
 
@@ -53,7 +54,7 @@ class PipelineOptionsReflector {
         continue;
       }
 
-      if (declaringClass.isAnnotationPresent(Hidden.class)) {
+      if (skipHidden && declaringClass.isAnnotationPresent(Hidden.class)) {
         continue;
       }
 
@@ -77,7 +78,7 @@ class PipelineOptionsReflector {
       Iterable<Class<? extends PipelineOptions>> optionsInterfaces) {
     ImmutableSet.Builder<PipelineOptionSpec> setBuilder = ImmutableSet.builder();
     for (Class<? extends PipelineOptions> optionsInterface : optionsInterfaces) {
-      setBuilder.addAll(getOptionSpecs(optionsInterface));
+      setBuilder.addAll(getOptionSpecs(optionsInterface, true));
     }
 
     return setBuilder.build();
diff --git a/sdks/java/core/src/test/java/org/apache/beam/sdk/options/PipelineOptionsReflectorTest.java b/sdks/java/core/src/test/java/org/apache/beam/sdk/options/PipelineOptionsReflectorTest.java
index 7eb103e..ba165cc 100644
--- a/sdks/java/core/src/test/java/org/apache/beam/sdk/options/PipelineOptionsReflectorTest.java
+++ b/sdks/java/core/src/test/java/org/apache/beam/sdk/options/PipelineOptionsReflectorTest.java
@@ -41,7 +41,7 @@ public class PipelineOptionsReflectorTest {
   @Test
   public void testGetOptionSpecs() throws NoSuchMethodException {
     Set<PipelineOptionSpec> properties =
-        PipelineOptionsReflector.getOptionSpecs(SimpleOptions.class);
+        PipelineOptionsReflector.getOptionSpecs(SimpleOptions.class, true);
 
     assertThat(
         properties,
@@ -60,7 +60,7 @@ public class PipelineOptionsReflectorTest {
   @Test
   public void testFiltersNonGetterMethods() {
     Set<PipelineOptionSpec> properties =
-        PipelineOptionsReflector.getOptionSpecs(OnlyTwoValidGetters.class);
+        PipelineOptionsReflector.getOptionSpecs(OnlyTwoValidGetters.class, true);
 
     assertThat(properties, not(hasItem(hasName(isOneOf("misspelled", "hasParameter", "prefix")))));
   }
@@ -91,7 +91,7 @@ public class PipelineOptionsReflectorTest {
   @Test
   public void testBaseClassOptions() {
     Set<PipelineOptionSpec> props =
-        PipelineOptionsReflector.getOptionSpecs(ExtendsSimpleOptions.class);
+        PipelineOptionsReflector.getOptionSpecs(ExtendsSimpleOptions.class, true);
 
     assertThat(props, hasItem(allOf(hasName("foo"), hasClass(SimpleOptions.class))));
     assertThat(props, hasItem(allOf(hasName("foo"), hasClass(ExtendsSimpleOptions.class))));
@@ -114,7 +114,7 @@ public class PipelineOptionsReflectorTest {
   @Test
   public void testExcludesNonPipelineOptionsMethods() {
     Set<PipelineOptionSpec> properties =
-        PipelineOptionsReflector.getOptionSpecs(ExtendsNonPipelineOptions.class);
+        PipelineOptionsReflector.getOptionSpecs(ExtendsNonPipelineOptions.class, true);
 
     assertThat(properties, not(hasItem(hasName("foo"))));
   }
@@ -132,11 +132,19 @@ public class PipelineOptionsReflectorTest {
   @Test
   public void testExcludesHiddenInterfaces() {
     Set<PipelineOptionSpec> properties =
-        PipelineOptionsReflector.getOptionSpecs(HiddenOptions.class);
+        PipelineOptionsReflector.getOptionSpecs(HiddenOptions.class, true);
 
     assertThat(properties, not(hasItem(hasName("foo"))));
   }
 
+  @Test
+  public void testIncludesHiddenInterfaces() {
+    Set<PipelineOptionSpec> properties =
+        PipelineOptionsReflector.getOptionSpecs(HiddenOptions.class, false);
+
+    assertThat(properties, hasItem(hasName("foo")));
+  }
+
   /** Test interface. */
   @Hidden
   public interface HiddenOptions extends PipelineOptions {
@@ -148,7 +156,7 @@ public class PipelineOptionsReflectorTest {
   @Test
   public void testShouldSerialize() {
     Set<PipelineOptionSpec> properties =
-        PipelineOptionsReflector.getOptionSpecs(JsonIgnoreOptions.class);
+        PipelineOptionsReflector.getOptionSpecs(JsonIgnoreOptions.class, true);
 
     assertThat(properties, hasItem(allOf(hasName("notIgnored"), shouldSerialize())));
     assertThat(properties, hasItem(allOf(hasName("ignored"), not(shouldSerialize()))));