You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@reef.apache.org by ju...@apache.org on 2015/11/17 08:55:55 UTC

incubator-reef git commit: [REEF-950] Make Tang allow empty string as a default value for String NamedParameter

Repository: incubator-reef
Updated Branches:
  refs/heads/master 885046818 -> 03a2d5c22


[REEF-950] Make Tang allow empty string as a default value for String NamedParameter

  This PR resolves that Tang raises InjectionException for String NamedParameter
  whose default value is defined with "".

JIRA:
  [REEF-950](https://issues.apache.org/jira/browse/REEF-950)

Pull request:
  This closes #644


Project: http://git-wip-us.apache.org/repos/asf/incubator-reef/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-reef/commit/03a2d5c2
Tree: http://git-wip-us.apache.org/repos/asf/incubator-reef/tree/03a2d5c2
Diff: http://git-wip-us.apache.org/repos/asf/incubator-reef/diff/03a2d5c2

Branch: refs/heads/master
Commit: 03a2d5c22e21df32eb3125e047f8088962741971
Parents: 8850468
Author: Dongjoon Hyun <do...@apache.org>
Authored: Mon Nov 16 23:05:07 2015 +0900
Committer: Julia Wang <ju...@apache.org>
Committed: Mon Nov 16 23:51:01 2015 -0800

----------------------------------------------------------------------
 .../reef/tang/annotations/NamedParameter.java   |  4 +++-
 .../implementation/java/JavaNodeFactory.java    |  6 ++---
 .../java/org/apache/reef/tang/TestTang.java     | 25 ++++++++++++++++++++
 3 files changed, 31 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-reef/blob/03a2d5c2/lang/java/reef-tang/tang/src/main/java/org/apache/reef/tang/annotations/NamedParameter.java
----------------------------------------------------------------------
diff --git a/lang/java/reef-tang/tang/src/main/java/org/apache/reef/tang/annotations/NamedParameter.java b/lang/java/reef-tang/tang/src/main/java/org/apache/reef/tang/annotations/NamedParameter.java
index 7d87ecb..374641d 100644
--- a/lang/java/reef-tang/tang/src/main/java/org/apache/reef/tang/annotations/NamedParameter.java
+++ b/lang/java/reef-tang/tang/src/main/java/org/apache/reef/tang/annotations/NamedParameter.java
@@ -24,13 +24,15 @@ import java.lang.annotation.*;
 @Documented
 @Retention(RetentionPolicy.RUNTIME)
 public @interface NamedParameter {
+  String REEF_UNINITIALIZED_VALUE = "__REEF_UNINITIALIZED_VALUE__";
+
   //Class<?> type() default String.class;
   String doc() default "";
 
   String short_name() default "";
 
   // One of the following should be set.
-  String default_value() default "";
+  String default_value() default REEF_UNINITIALIZED_VALUE;
 
   Class<?> default_class() default Void.class;
 

http://git-wip-us.apache.org/repos/asf/incubator-reef/blob/03a2d5c2/lang/java/reef-tang/tang/src/main/java/org/apache/reef/tang/implementation/java/JavaNodeFactory.java
----------------------------------------------------------------------
diff --git a/lang/java/reef-tang/tang/src/main/java/org/apache/reef/tang/implementation/java/JavaNodeFactory.java b/lang/java/reef-tang/tang/src/main/java/org/apache/reef/tang/implementation/java/JavaNodeFactory.java
index 27bb1fb..9e6b06a 100644
--- a/lang/java/reef-tang/tang/src/main/java/org/apache/reef/tang/implementation/java/JavaNodeFactory.java
+++ b/lang/java/reef-tang/tang/src/main/java/org/apache/reef/tang/implementation/java/JavaNodeFactory.java
@@ -172,11 +172,11 @@ public final class JavaNodeFactory {
     final boolean hasStringDefault, hasClassDefault, hasStringSetDefault, hasClassSetDefault;
 
     int defaultCount = 0;
-    if (!namedParameter.default_value().isEmpty()) {
+    if (namedParameter.default_value().equals(NamedParameter.REEF_UNINITIALIZED_VALUE)) {
+      hasStringDefault = false;
+    } else {
       hasStringDefault = true;
       defaultCount++;
-    } else {
-      hasStringDefault = false;
     }
     if (namedParameter.default_class() != Void.class) {
       hasClassDefault = true;

http://git-wip-us.apache.org/repos/asf/incubator-reef/blob/03a2d5c2/lang/java/reef-tang/tang/src/test/java/org/apache/reef/tang/TestTang.java
----------------------------------------------------------------------
diff --git a/lang/java/reef-tang/tang/src/test/java/org/apache/reef/tang/TestTang.java b/lang/java/reef-tang/tang/src/test/java/org/apache/reef/tang/TestTang.java
index 2fb4eb4..0742a6e 100644
--- a/lang/java/reef-tang/tang/src/test/java/org/apache/reef/tang/TestTang.java
+++ b/lang/java/reef-tang/tang/src/test/java/org/apache/reef/tang/TestTang.java
@@ -27,6 +27,9 @@ import org.apache.reef.tang.exceptions.ClassHierarchyException;
 import org.apache.reef.tang.exceptions.InjectionException;
 import org.apache.reef.tang.exceptions.NameResolutionException;
 import org.apache.reef.tang.formats.AvroConfigurationSerializer;
+import org.apache.reef.tang.formats.ConfigurationModule;
+import org.apache.reef.tang.formats.ConfigurationModuleBuilder;
+import org.apache.reef.tang.formats.OptionalParameter;
 import org.apache.reef.tang.util.ReflectionUtilities;
 import org.junit.Assert;
 import org.junit.Before;
@@ -713,6 +716,28 @@ public class TestTang {
     final CheckChildIface o1 = i.getInstance(CheckChildIface.class);
     Assert.assertTrue(o1 instanceof CheckChildImpl);
   }
+
+  /**
+   * Tang supports empty string, '', as a default value.
+   */
+  @Test
+  public void testEmptyStringAsDefaultValue() throws InjectionException {
+    final Configuration conf = EmptyStringAsDefaultParamConf.CONF.build();
+    String value = Tang.Factory.getTang().newInjector(conf).getNamedInstance(EmptyStringAsDefaultParam.class);
+    Assert.assertEquals("", value);
+  }
+
+  @NamedParameter(default_value = "")
+  class EmptyStringAsDefaultParam implements Name<String> {
+  }
+
+  public static class EmptyStringAsDefaultParamConf extends ConfigurationModuleBuilder {
+    public static final OptionalParameter<String> OPTIONAL_STRING = new OptionalParameter<>();
+
+    public static final ConfigurationModule CONF = new EmptyStringAsDefaultParamConf()
+        .bindNamedParameter(EmptyStringAsDefaultParam.class, EmptyStringAsDefaultParamConf.OPTIONAL_STRING)
+        .build();
+  }
 }
 
 class Fail {