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 {