You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@reef.apache.org by we...@apache.org on 2016/04/12 00:30:36 UTC
reef git commit: [REEF-1276] Improve error message shown when
injectable class has [Parameter] annotation
Repository: reef
Updated Branches:
refs/heads/master 5f4d12bcd -> 3d8ebd529
[REEF-1276] Improve error message shown when injectable class has [Parameter] annotation
This patch throws an Argument Exception with a message stating the class that
should not be defined as a NamedParameter
JIRA:
[REEF-1276] (https://issues.apache.org/jira/browse/REEF-1276)
Pull Request:
This closes #913
Project: http://git-wip-us.apache.org/repos/asf/reef/repo
Commit: http://git-wip-us.apache.org/repos/asf/reef/commit/3d8ebd52
Tree: http://git-wip-us.apache.org/repos/asf/reef/tree/3d8ebd52
Diff: http://git-wip-us.apache.org/repos/asf/reef/diff/3d8ebd52
Branch: refs/heads/master
Commit: 3d8ebd52928e9d3c3ad0ef4bc8280ec700627bd4
Parents: 5f4d12b
Author: Sergey Dudoladov <ss...@apache.org>
Authored: Wed Mar 30 11:01:07 2016 +0200
Committer: Markus Weimer <we...@apache.org>
Committed: Mon Apr 11 15:29:10 2016 -0700
----------------------------------------------------------------------
.../ClassHierarchy/TestClassHierarchy.cs | 31 ++++++++++++++++++++
.../ClassHierarchy/ClassHierarchyImpl.cs | 11 +++++++
2 files changed, 42 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/reef/blob/3d8ebd52/lang/cs/Org.Apache.REEF.Tang.Tests/ClassHierarchy/TestClassHierarchy.cs
----------------------------------------------------------------------
diff --git a/lang/cs/Org.Apache.REEF.Tang.Tests/ClassHierarchy/TestClassHierarchy.cs b/lang/cs/Org.Apache.REEF.Tang.Tests/ClassHierarchy/TestClassHierarchy.cs
index 42a7b50..cb429aa 100644
--- a/lang/cs/Org.Apache.REEF.Tang.Tests/ClassHierarchy/TestClassHierarchy.cs
+++ b/lang/cs/Org.Apache.REEF.Tang.Tests/ClassHierarchy/TestClassHierarchy.cs
@@ -427,6 +427,17 @@ namespace Org.Apache.REEF.Tang.Tests.ClassHierarchy
Assert.NotNull(b);
Assert.NotNull(c);
}
+
+ // See REEF-1276
+ [Fact]
+ public void TestInjectableClassWithParameterAnnotationThrowsMeaningfulException()
+ {
+ ITang tang = TangFactory.GetTang();
+ IInjector i = tang.NewInjector(tang.NewConfigurationBuilder().Build());
+
+ Action injection = () => i.GetInstance(typeof(ClazzA));
+ Assert.Throws<ArgumentException>(injection);
+ }
}
[NamedParameter]
@@ -696,4 +707,24 @@ namespace Org.Apache.REEF.Tang.Tests.ClassHierarchy
class BadParsableDefaultClass : Name<string>
{
}
+
+ // ClazzB is injectable and does not need the Parameter annotation in the ClazzA constructor
+ class ClazzA
+ {
+ private ClazzB objectB;
+
+ public class ClazzB
+ {
+ [Inject]
+ public ClazzB()
+ {
+ }
+ }
+
+ [Inject]
+ public ClazzA([Parameter(typeof(ClazzB))] ClazzB objectB)
+ {
+ this.objectB = objectB;
+ }
+ }
}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/reef/blob/3d8ebd52/lang/cs/Org.Apache.REEF.Tang/Implementations/ClassHierarchy/ClassHierarchyImpl.cs
----------------------------------------------------------------------
diff --git a/lang/cs/Org.Apache.REEF.Tang/Implementations/ClassHierarchy/ClassHierarchyImpl.cs b/lang/cs/Org.Apache.REEF.Tang/Implementations/ClassHierarchy/ClassHierarchyImpl.cs
index cda3660..9599c96 100644
--- a/lang/cs/Org.Apache.REEF.Tang/Implementations/ClassHierarchy/ClassHierarchyImpl.cs
+++ b/lang/cs/Org.Apache.REEF.Tang/Implementations/ClassHierarchy/ClassHierarchyImpl.cs
@@ -167,6 +167,17 @@ namespace Org.Apache.REEF.Tang.Implementations.ClassHierarchy
RegisterType(constructorArg.Gettype()); // Gettype returns param's Type.fullname
if (constructorArg.GetNamedParameterName() != null)
{
+ var pn = RegisterType(constructorArg.GetNamedParameterName());
+
+ if (!(pn is INamedParameterNode))
+ {
+ string message = string.Format(CultureInfo.CurrentCulture,
+ "The class {0}, used in the constructor of {1}, should not be defined as a NamedParameter.",
+ constructorArg.GetNamedParameterName(),
+ constructorDef.GetClassName());
+ Org.Apache.REEF.Utilities.Diagnostics.Exceptions.Throw(new ArgumentException(message), LOGGER);
+ }
+
INamedParameterNode np = (INamedParameterNode)RegisterType(constructorArg.GetNamedParameterName());
try
{