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 2015/02/05 22:05:34 UTC
[13/51] [partial] incubator-reef git commit: [REEF-131] Towards the
new .Net project structure This is to change .Net project structure for Tang,
Wake, REEF utilities, Common and Driver:
http://git-wip-us.apache.org/repos/asf/incubator-reef/blob/c1b5200f/lang/cs/Source/TANG/Tang/Formats/ConfigurationModule.cs
----------------------------------------------------------------------
diff --git a/lang/cs/Source/TANG/Tang/Formats/ConfigurationModule.cs b/lang/cs/Source/TANG/Tang/Formats/ConfigurationModule.cs
deleted file mode 100644
index a75428b..0000000
--- a/lang/cs/Source/TANG/Tang/Formats/ConfigurationModule.cs
+++ /dev/null
@@ -1,302 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you 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.
- */
-
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Reflection;
-using System.Text;
-using System.Threading.Tasks;
-using Org.Apache.Reef.Utilities.Logging;
-using Org.Apache.Reef.Tang.Exceptions;
-using Org.Apache.Reef.Tang.Interface;
-using Org.Apache.Reef.Tang.Util;
-
-namespace Org.Apache.Reef.Tang.Formats
-{
- /**
- * Allows applications to bundle sets of configuration options together into
- * discrete packages. Unlike more conventional approaches,
- * ConfigurationModules store such information in static data structures that
- * can be statically discovered and sanity-checked.
- *
- * @see Org.Apache.Reef.Tang.Formats.TestConfigurationModule for more information and examples.
- *
- */
- public class ConfigurationModule
- {
- public readonly ConfigurationModuleBuilder Builder;
- private static readonly Logger LOGGER = Logger.GetLogger(typeof(ConfigurationModule));
- private readonly MonotonicHashSet<FieldInfo> reqSet = new MonotonicHashSet<FieldInfo>();
- private readonly MonotonicHashMap<object, Type> setImpls = new MonotonicHashMap<object, Type>();
- private readonly MonotonicMultiHashMap<object, Type> setImplSets = new MonotonicMultiHashMap<object, Type>();
- private readonly MonotonicMultiHashMap<object, string> setLateImplSets = new MonotonicMultiHashMap<object, string>();
- private readonly MonotonicMultiHashMap<object, string> setParamSets = new MonotonicMultiHashMap<object, string>();
- private readonly MonotonicHashMap<object, string> setLateImpls = new MonotonicHashMap<object, string>();
- private readonly MonotonicHashMap<object, string> setParams = new MonotonicHashMap<object, string>();
-
- private readonly MonotonicHashMap<object, IList<Type>> setImplLists = new MonotonicHashMap<object, IList<Type>>();
- private readonly MonotonicHashMap<object, IList<string>> setParamLists = new MonotonicHashMap<object, IList<string>>();
- private readonly MonotonicHashMap<object, IList<string>> setLateImplLists = new MonotonicHashMap<object, IList<string>>();
-
- public ConfigurationModule(ConfigurationModuleBuilder builder)
- {
- this.Builder = builder.DeepCopy();
- }
-
- //public final <T> ConfigurationModule set(Impl<T> opt, Class<? extends T> impl)
- public ConfigurationModule Set<T, U>(IImpl<T> opt, GenericType<U> impl)
- where U : T
- {
- Type implType = typeof(U);
-
- ConfigurationModule c = DeepCopy();
- c.ProcessSet(opt);
- if (c.Builder.SetOpts.Contains(opt))
- {
- c.setImplSets.Add(opt, implType);
- }
- else
- {
- c.setImpls.Add(opt, implType);
- }
- return c;
- }
-
- public ConfigurationModule Set<T>(IImpl<T> opt, string impl)
- {
- ConfigurationModule c = DeepCopy();
- c.ProcessSet(opt);
- if (c.Builder.SetOpts.Contains(opt))
- {
- c.setLateImplSets.Add(opt, impl);
- }
- else
- {
- c.setLateImpls.Add(opt, impl);
- }
- return c;
- }
-
- public ConfigurationModule Set<T, U>(IParam<T> opt, GenericType<U> val)
- where U : T
- {
- Type t = typeof(U);
- string n = ReflectionUtilities.GetAssemblyQualifiedName(t);
- return Set(opt, n);
- }
-
- public ConfigurationModule Set(IParam<bool> opt, bool val)
- {
- return Set(opt, val);
- }
-
- ////TODO
- ////public readonly ConfigurationModule set(Param<? extends Number> opt, Number val)
- ////{
- //// return set(opt, val);
- ////}
-
- public ConfigurationModule Set<T>(IParam<T> opt, string val)
- {
- //var o = (IParam<object>)opt;
- ConfigurationModule c = DeepCopy();
- c.ProcessSet(opt);
- if (c.Builder.SetOpts.Contains(opt))
- {
- c.setParamSets.Add(opt, val);
- }
- else
- {
- c.setParams.Add(opt, val);
- }
- return c;
- }
-
- public ConfigurationModule Set<T>(IImpl<IList<T>> opt, IList<string> impl)
- {
- ConfigurationModule c = DeepCopy();
- c.ProcessSet(opt);
- c.setLateImplLists.Add(opt, impl);
- return c;
- }
-
- public ConfigurationModule Set<T>(IParam<IList<T>> opt, IList<string> impl)
- {
- ConfigurationModule c = DeepCopy();
- c.ProcessSet(opt);
- c.setParamLists.Add(opt, impl);
- return c;
- }
-
- public ConfigurationModule Set<T>(IImpl<IList<T>> opt, IList<Type> impl)
- {
- ConfigurationModule c = DeepCopy();
- c.ProcessSet(opt);
- c.setImplLists.Add(opt, impl);
- return c;
- }
-
- public IConfiguration Build()
- {
- ConfigurationModule c = DeepCopy();
-
- if (!c.reqSet.ContainsAll(c.Builder.ReqDecl))
- {
- ISet<FieldInfo> missingSet = new MonotonicHashSet<FieldInfo>();
- foreach (FieldInfo f in c.Builder.ReqDecl)
- {
- if (!c.reqSet.Contains(f))
- {
- missingSet.Add(f);
- }
- }
- var e = new BindException(
- "Attempt to build configuration before setting required option(s): "
- + Builder.ToString(missingSet));
- Org.Apache.Reef.Utilities.Diagnostics.Exceptions.Throw(e, LOGGER);
- }
-
- foreach (Type clazz in c.Builder.FreeImpls.Keys)
- {
- object i = c.Builder.FreeImpls.Get(clazz);
- if (c.setImpls.ContainsKey(i))
- {
- var cb = (ICsInternalConfigurationBuilder)c.Builder.B;
- cb.Bind(clazz, c.setImpls.Get(i));
- }
- else if (c.setLateImpls.ContainsKey(i))
- {
- c.Builder.B.Bind(ReflectionUtilities.GetAssemblyQualifiedName(clazz), c.setLateImpls.Get(i));
- }
- else if (c.setImplSets.ContainsKey(i) || c.setLateImplSets.ContainsKey(i))
- {
- foreach (Type clz in c.setImplSets.GetValuesForKey(i))
- {
- ICsInternalConfigurationBuilder b = (ICsInternalConfigurationBuilder) c.Builder.B;
- b.BindSetEntry(clazz, clz);
- }
- foreach (string s in c.setLateImplSets.GetValuesForKey(i))
- {
- ICsInternalConfigurationBuilder b = (ICsInternalConfigurationBuilder) c.Builder.B;
- b.BindSetEntry(clazz, s);
- }
- }
- else if (c.setImplLists.ContainsKey(i))
- {
- ICsConfigurationBuilder b = (ICsConfigurationBuilder) c.Builder.B;
- b.BindList(clazz, setImplLists.Get(i));
- }
- else if (c.setLateImplLists.ContainsKey(i))
- {
- ICsInternalConfigurationBuilder b = (ICsInternalConfigurationBuilder)c.Builder.B;
- b.BindList(clazz, setLateImplLists.Get(i));
- }
- }
-
- //for (Class<? extends Name<?>> clazz : c.builder.freeParams.Keys) {
- foreach (Type clazz in c.Builder.FreeParams.Keys)
- {
- object p = c.Builder.FreeParams.Get(clazz);
- string s = c.setParams.Get(p);
- bool foundOne = false;
- if (s != null)
- {
- ICsConfigurationBuilder cb = c.Builder.B;
- cb.BindNamedParameter(clazz, s);
- foundOne = true;
- }
-
- IList<string> paramListStr = c.setParamLists.Get(p);
- if (paramListStr != null)
- {
- ICsInternalConfigurationBuilder b = (ICsInternalConfigurationBuilder)c.Builder.B;
- b.BindList(clazz, paramListStr);
- foundOne = true;
- }
-
- foreach (string paramStr in c.setParamSets.GetValuesForKey(p))
- {
- ICsInternalConfigurationBuilder b = (ICsInternalConfigurationBuilder)c.Builder.B;
- b.BindSetEntry(clazz, paramStr);
- foundOne = true;
- }
-
- if (!foundOne)
- {
- //if (!(p is OptionalParameter<object>)) //p: OptionalParameter<int>, "is" doesn't work here for generic type object
- if (!ReflectionUtilities.IsInstanceOfGeneric(p, typeof(OptionalParameter<>)))
- {
- Org.Apache.Reef.Utilities.Diagnostics.Exceptions.Throw(new IllegalStateException(), LOGGER);
- }
- }
- }
- return c.Builder.B.Build();
- }
-
- public void AssertStaticClean()
- {
- if (!(
- setImpls.IsEmpty() &&
- setParams.IsEmpty()) &&
- setImplSets.IsEmpty() &&
- setLateImplSets.IsEmpty() &&
- setParamSets.IsEmpty() &&
- setImplLists.IsEmpty() &&
- setLateImplLists.IsEmpty() &&
- setParamLists.IsEmpty() &&
- setLateImpls.IsEmpty())
- {
- var e = new ClassHierarchyException("Detected statically set ConfigurationModule Parameter / Implementation. set() should only be used dynamically. Use bind...() instead.");
- Org.Apache.Reef.Utilities.Diagnostics.Exceptions.Throw(e, LOGGER);
- }
- }
-
- private ConfigurationModule DeepCopy()
- {
- ConfigurationModule cm = new ConfigurationModule(Builder.DeepCopy());
- cm.setImpls.AddAll(setImpls);
- cm.setParams.AddAll(setParams);
- cm.setImplSets.AddAll(setImplSets);
- cm.setParamSets.AddAll(setParamSets);
- cm.setLateImplSets.AddAll(setLateImplSets);
- cm.setImplLists.AddAll(setImplLists);
- cm.setParamLists.AddAll(setParamLists);
- cm.setLateImplLists.AddAll(setLateImplLists);
- cm.setLateImpls.AddAll(setLateImpls);
- cm.reqSet.AddAll(reqSet);
- return cm;
- }
-
- private void ProcessSet(object impl)
- {
- FieldInfo f;
- Builder.Map.TryGetValue(impl, out f);
- if (f == null)
- {
- var e = new ClassHierarchyException("Unknown Impl/Param when setting " + impl.GetType().Name + ". Did you pass in a field from some other module?");
- Org.Apache.Reef.Utilities.Diagnostics.Exceptions.Throw(e, LOGGER);
- }
- if (!reqSet.Contains(f))
- {
- reqSet.Add(f);
- }
- }
- }
-}
http://git-wip-us.apache.org/repos/asf/incubator-reef/blob/c1b5200f/lang/cs/Source/TANG/Tang/Formats/ConfigurationModuleBuilder.cs
----------------------------------------------------------------------
diff --git a/lang/cs/Source/TANG/Tang/Formats/ConfigurationModuleBuilder.cs b/lang/cs/Source/TANG/Tang/Formats/ConfigurationModuleBuilder.cs
deleted file mode 100644
index e9640d5..0000000
--- a/lang/cs/Source/TANG/Tang/Formats/ConfigurationModuleBuilder.cs
+++ /dev/null
@@ -1,519 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you 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.
- */
-
-using System;
-using System.Collections.Generic;
-using System.Reflection;
-using System.Text;
-using Org.Apache.Reef.Utilities.Logging;
-using Org.Apache.Reef.Tang.Annotations;
-using Org.Apache.Reef.Tang.Exceptions;
-using Org.Apache.Reef.Tang.Implementations;
-using Org.Apache.Reef.Tang.Interface;
-using Org.Apache.Reef.Tang.Util;
-
-namespace Org.Apache.Reef.Tang.Formats
-{
- public class ConfigurationModuleBuilder
- {
- public readonly ICsConfigurationBuilder B = TangFactory.GetTang().NewConfigurationBuilder();
- public readonly MonotonicHashSet<FieldInfo> ReqDecl = new MonotonicHashSet<FieldInfo>();
- public readonly MonotonicHashSet<FieldInfo> OptDecl = new MonotonicHashSet<FieldInfo>();
- public readonly MonotonicHashSet<object> SetOpts = new MonotonicHashSet<object>();
- public readonly MonotonicHashMap<object, FieldInfo> Map = new MonotonicHashMap<object, FieldInfo>();
- public readonly MonotonicHashMap<Type, object> FreeImpls = new MonotonicHashMap<Type, object>();
- public readonly MonotonicHashMap<Type, object> FreeParams = new MonotonicHashMap<Type, object>(); //Type must extends from Name<>
-
- private static readonly Logger LOGGER = Logger.GetLogger(typeof(ConfigurationModuleBuilder));
- private static readonly ISet<Type> ParamBlacklist = new MonotonicHashSet<Type>(new Type[] { typeof(IParam<>), typeof(IImpl<>) });
- private static readonly ISet<string> ParamTypes =
- new MonotonicHashSet<string>(new string[] { typeof(RequiredImpl<>).Name, typeof(OptionalImpl<>).Name, typeof(RequiredParameter<>).Name, typeof(OptionalParameter<>).Name });
-
- private readonly MonotonicHashSet<FieldInfo> reqUsed = new MonotonicHashSet<FieldInfo>();
- private readonly MonotonicHashSet<FieldInfo> optUsed = new MonotonicHashSet<FieldInfo>();
- private readonly MonotonicHashMap<Type, string> lateBindClazz = new MonotonicHashMap<Type, string>();
-
- public ConfigurationModuleBuilder()
- {
- foreach (FieldInfo f in GetType().GetFields(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Static))
- {
- Type t = f.FieldType;
- if (ParamBlacklist.Contains(t))
- {
- var e = new ClassHierarchyException(
- "Found a field of type " + t + " which should be a Required/Optional Parameter/Implementation instead");
- Org.Apache.Reef.Utilities.Diagnostics.Exceptions.Throw(e, LOGGER);
- }
- if (ParamTypes.Contains(t.Name))
- {
- if (!f.IsPublic)
- {
- var e = new ClassHierarchyException("Found a non-public configuration option in " + GetType() + ": " + f);
- Org.Apache.Reef.Utilities.Diagnostics.Exceptions.Throw(e, LOGGER);
- }
-
- if (!f.IsStatic)
- {
- var e = new ClassHierarchyException("Found a non-static configuration option in " + GetType() + ": " + f);
- Org.Apache.Reef.Utilities.Diagnostics.Exceptions.Throw(e, LOGGER);
- }
- if (!f.IsInitOnly)
- {
- var e = new ClassHierarchyException("Found a non-readonly configuration option in " + GetType() + ": " + f);
- Org.Apache.Reef.Utilities.Diagnostics.Exceptions.Throw(e, LOGGER);
- }
- object o = null;
- try
- {
- o = f.GetValue(null);
- }
- catch (ArgumentException e)
- {
- Org.Apache.Reef.Utilities.Diagnostics.Exceptions.Caught(e, Level.Error, LOGGER);
- var ex = new ClassHierarchyException("Could not look up field instance in " + GetType() + " field: " + f, e);
- Org.Apache.Reef.Utilities.Diagnostics.Exceptions.Throw(ex, LOGGER);
- }
- catch (FieldAccessException e)
- {
- Org.Apache.Reef.Utilities.Diagnostics.Exceptions.Caught(e, Level.Error, LOGGER);
- var ex = new ClassHierarchyException("Could not look up field instance in " + GetType() + " field: " + f, e);
- Org.Apache.Reef.Utilities.Diagnostics.Exceptions.Throw(ex, LOGGER);
- }
-
- if (Map.ContainsKey(o))
- {
- FieldInfo fi;
- Map.TryGetValue(o, out fi);
- var e = new ClassHierarchyException("Detected aliased instances in class " + GetType() + " for fields " + fi + " and " + f);
- Org.Apache.Reef.Utilities.Diagnostics.Exceptions.Throw(e, LOGGER);
- }
- if (ReflectionUtilities.IsGenericTypeof(typeof(RequiredImpl<>), t) || ReflectionUtilities.IsGenericTypeof(typeof(RequiredParameter<>), t))
- {
- ReqDecl.Add(f);
- }
- else
- {
- OptDecl.Add(f);
- }
- Map.Add(o, f);
- }
- }
- }
-
- private ConfigurationModuleBuilder(ConfigurationModuleBuilder c)
- {
- try
- {
- B.AddConfiguration(c.B.Build());
- }
- catch (BindException e)
- {
- Org.Apache.Reef.Utilities.Diagnostics.Exceptions.Caught(e, Level.Error, LOGGER);
- var ex = new ClassHierarchyException("Build error in ConfigurationModuleBuilder: " + e);
- Org.Apache.Reef.Utilities.Diagnostics.Exceptions.Throw(ex, LOGGER);
- }
- ReqDecl.UnionWith(c.ReqDecl);
- OptDecl.UnionWith(c.OptDecl);
- reqUsed.UnionWith(c.reqUsed);
- optUsed.UnionWith(c.optUsed);
- SetOpts.UnionWith(c.SetOpts);
- Map.AddAll(c.Map);
- FreeImpls.AddAll(c.FreeImpls);
- FreeParams.AddAll(c.FreeParams);
- lateBindClazz.AddAll(c.lateBindClazz);
- }
-
- public ConfigurationModuleBuilder Merge(ConfigurationModule d)
- {
- if (d == null)
- {
- var e = new NullReferenceException("If merge() was passed a static final field that is initialized to non-null, then this is almost certainly caused by a circular class dependency.");
- Org.Apache.Reef.Utilities.Diagnostics.Exceptions.Throw(e, LOGGER);
- }
- try
- {
- d.AssertStaticClean();
- }
- catch (ClassHierarchyException ex)
- {
- Org.Apache.Reef.Utilities.Diagnostics.Exceptions.Caught(ex, Level.Error, LOGGER);
- var e = new ClassHierarchyException(ReflectionUtilities.GetAssemblyQualifiedName(GetType()) + ": detected attempt to merge with ConfigurationModule that has had set() called on it", ex);
- Org.Apache.Reef.Utilities.Diagnostics.Exceptions.Throw(e, LOGGER);
- }
- ConfigurationModuleBuilder c = DeepCopy();
- try
- {
- c.B.AddConfiguration(d.Builder.B.Build());
- }
- catch (BindException ex)
- {
- Org.Apache.Reef.Utilities.Diagnostics.Exceptions.Caught(ex, Level.Error, LOGGER);
- var e = new ClassHierarchyException("Error in AddConfiguration in Merge: " + ex);
- Org.Apache.Reef.Utilities.Diagnostics.Exceptions.Throw(e, LOGGER);
- }
- c.ReqDecl.AddAll(d.Builder.ReqDecl);
- c.OptDecl.AddAll(d.Builder.OptDecl);
- c.reqUsed.AddAll(d.Builder.reqUsed);
- c.optUsed.AddAll(d.Builder.optUsed);
- c.SetOpts.AddAll(d.Builder.SetOpts);
- //c.ListOpts.AddAll(d.Builder.ListOpts);
- c.Map.AddAll(d.Builder.Map);
- c.FreeImpls.AddAll(d.Builder.FreeImpls);
- c.FreeParams.AddAll(d.Builder.FreeParams);
- c.lateBindClazz.AddAll(d.Builder.lateBindClazz);
-
- return c;
- }
-
- public ConfigurationModuleBuilder BindSetEntry<U, T>(GenericType<U> iface, string impl)
- where U : Name<ISet<T>>
- {
- ConfigurationModuleBuilder c = DeepCopy();
- try
- {
- ICsInternalConfigurationBuilder b = (ICsInternalConfigurationBuilder)c.B;
- b.BindSetEntry(typeof(U), impl);
- }
- catch (BindException ex)
- {
- Org.Apache.Reef.Utilities.Diagnostics.Exceptions.Caught(ex, Level.Error, LOGGER);
- var e = new ClassHierarchyException("Error in BindSetEntry: " + ex);
- Org.Apache.Reef.Utilities.Diagnostics.Exceptions.Throw(e, LOGGER);
- }
- return c;
- }
-
- public ConfigurationModuleBuilder BindSetEntry<U, V, T>(GenericType<U> iface, GenericType<V> impl)
- where U : Name<ISet<T>>
- where V : T
- {
- ConfigurationModuleBuilder c = DeepCopy();
- try
- {
- c.B.BindSetEntry<U, V, T>(iface, impl);
- }
- catch (BindException ex)
- {
- Org.Apache.Reef.Utilities.Diagnostics.Exceptions.Caught(ex, Level.Error, LOGGER);
- var e = new ClassHierarchyException("Error in BindSetEntry: " + ex);
- Org.Apache.Reef.Utilities.Diagnostics.Exceptions.Throw(e, LOGGER);
- }
- return c;
- }
-
- public ConfigurationModuleBuilder BindSetEntry<U, T>(GenericType<U> iface, IImpl<T> opt)
- where U : Name<ISet<T>>
- {
- ConfigurationModuleBuilder c = DeepCopy();
- Type ifaceType = typeof(U);
-
- c.ProcessUse(opt);
- c.FreeImpls.Add(ifaceType, opt);
-
- if (!SetOpts.Contains(opt))
- {
- c.SetOpts.Add(opt);
- }
- return c;
- }
-
- public ConfigurationModuleBuilder BindSetEntry<U, T>(GenericType<U> iface, IParam<T> opt)
- where U : Name<ISet<T>>
- {
- ConfigurationModuleBuilder c = DeepCopy();
- Type ifaceType = typeof(U);
- c.ProcessUse(opt);
-
- c.FreeParams.Add(ifaceType, opt);
- if (!SetOpts.Contains(opt))
- {
- c.SetOpts.Add(opt);
- }
- return c;
- }
-
- public ConfigurationModuleBuilder BindList<U, T>(GenericType<U> iface, IList<string> impl)
- where U : Name<IList<T>>
- {
- ConfigurationModuleBuilder c = DeepCopy();
- try
- {
- ICsInternalConfigurationBuilder b = (ICsInternalConfigurationBuilder)c.B;
- b.BindList(typeof(U), impl);
- }
- catch (BindException ex)
- {
- Org.Apache.Reef.Utilities.Diagnostics.Exceptions.CaughtAndThrow(new ClassHierarchyException("Error in BindList: " + ex), Level.Error, LOGGER);
- }
- return c;
- }
-
- public ConfigurationModuleBuilder BindList<U, T>(GenericType<U> iface, IImpl<IList<T>> opt)
- where U : Name<IList<T>>
- {
- ConfigurationModuleBuilder c = DeepCopy();
- Type ifaceType = typeof(U);
-
- c.ProcessUse(opt);
- c.FreeImpls.Add(ifaceType, opt);
- return c;
- }
-
- public ConfigurationModuleBuilder BindList<U, T>(GenericType<U> iface, IParam<IList<T>> opt)
- where U : Name<IList<T>>
- {
- ConfigurationModuleBuilder c = DeepCopy();
- Type ifaceType = typeof(U);
- c.ProcessUse(opt);
-
- c.FreeParams.Add(ifaceType, opt);
- return c;
- }
-
- public ConfigurationModuleBuilder BindImplementation<U, T>(GenericType<U> iface, GenericType<T> impl)
- where T : U
- {
- ConfigurationModuleBuilder c = DeepCopy();
- try
- {
- c.B.BindImplementation(iface, impl);
- }
- catch (BindException e)
- {
- Org.Apache.Reef.Utilities.Diagnostics.Exceptions.Caught(e, Level.Error, LOGGER);
- Org.Apache.Reef.Utilities.Diagnostics.Exceptions.Throw(new ClassHierarchyException("Error in BindImplementation: ", e), LOGGER);
- }
- return c;
- }
-
- public ConfigurationModuleBuilder BindImplementation<T>(GenericType<T> iface, string impl)
- {
- ConfigurationModuleBuilder c = DeepCopy();
-
- c.lateBindClazz.Add(typeof(T), impl);
- return c;
- }
-
- public ConfigurationModuleBuilder BindImplementation<U, T>(GenericType<T> iface, IImpl<U> opt)
- where U : T
- {
- ConfigurationModuleBuilder c = DeepCopy();
- c.ProcessUse(opt);
- Type ifaceType = typeof(T);
- c.FreeImpls.Add(ifaceType, opt);
- return c;
- }
-
- public ConfigurationModuleBuilder BindNamedParameter<U, T>(GenericType<U> name, string value)
- where U : Name<T>
- {
- ConfigurationModuleBuilder c = DeepCopy();
- try
- {
- c.B.BindNamedParameter<U, T>(name, value);
- }
- catch (BindException e)
- {
- Org.Apache.Reef.Utilities.Diagnostics.Exceptions.Caught(e, Level.Error, LOGGER);
- Org.Apache.Reef.Utilities.Diagnostics.Exceptions.Throw(new ClassHierarchyException("Error in BindNamedParameter: ", e), LOGGER);
- }
- return c;
- }
-
- public ConfigurationModuleBuilder BindNamedParameter<U, T>(GenericType<U> name, IParam<T> opt)
- where U : Name<T>
- {
- ConfigurationModuleBuilder c = DeepCopy();
- c.ProcessUse(opt);
- Type nameType = typeof(U);
- c.FreeParams.Add(nameType, opt);
- return c;
- }
-
- //public final <T> ConfigurationModuleBuilder bindNamedParameter(Class<? extends Name<T>> iface, Class<? extends T> impl)
- //if V is T, you'd better to use public ConfigurationModuleBuilder BindNamedParameter<U, T>(GenericType<U> iface, GenericType<T> impl) defined below
- public ConfigurationModuleBuilder BindNamedParameter<U, V, T>(GenericType<U> iface, GenericType<V> impl)
- where U : Name<T>
- where V : T
- {
- ConfigurationModuleBuilder c = DeepCopy();
- try
- {
- c.B.BindNamedParameter<U, V, T>(iface, impl);
- }
- catch (BindException e)
- {
- Org.Apache.Reef.Utilities.Diagnostics.Exceptions.Caught(e, Level.Error, LOGGER);
- Org.Apache.Reef.Utilities.Diagnostics.Exceptions.Throw(new ClassHierarchyException("Error in BindNamedParameter: ", e), LOGGER);
- }
- return c;
- }
-
- public ConfigurationModuleBuilder BindNamedParameter<U, T>(GenericType<U> iface, GenericType<T> impl)
- where U : Name<T>
- {
- ConfigurationModuleBuilder c = DeepCopy();
- try
- {
- c.B.BindNamedParameter<U, T, T>(iface, impl);
- }
- catch (BindException e)
- {
- Org.Apache.Reef.Utilities.Diagnostics.Exceptions.Caught(e, Level.Error, LOGGER);
- Org.Apache.Reef.Utilities.Diagnostics.Exceptions.Throw(new ClassHierarchyException("Error in BindNamedParameter: ", e), LOGGER);
- }
- return c;
- }
-
- // public final <T> ConfigurationModuleBuilder bindNamedParameter(Class<? extends Name<T>> iface, Impl<? extends T> opt)
- //if ValueType is T, you would better to use public ConfigurationModuleBuilder BindNamedParameter<U, T>(GenericType<U> iface, IImpl<T> opt)
- public ConfigurationModuleBuilder BindNamedParameter<U, V, T>(GenericType<U> iface, IImpl<V> opt)
- where U : Name<T>
- where V : T
- {
- ConfigurationModuleBuilder c = DeepCopy();
- c.ProcessUse(opt);
- Type ifaceType = typeof(U);
- c.FreeImpls.Add(ifaceType, opt);
- return c;
- }
-
- public ConfigurationModuleBuilder BindNamedParameter<U, T>(GenericType<U> iface, IImpl<T> opt)
- where U : Name<T>
- {
- ConfigurationModuleBuilder c = DeepCopy();
- c.ProcessUse(opt);
- Type ifaceType = typeof(U);
- c.FreeImpls.Add(ifaceType, opt);
- return c;
- }
-
- public ConfigurationModuleBuilder BindConstructor<T, U>(GenericType<T> clazz, GenericType<U> constructor)
- where U : IExternalConstructor<T>
- {
- ConfigurationModuleBuilder c = DeepCopy();
- try
- {
- c.B.BindConstructor<T, U>(clazz, constructor);
- }
- catch (BindException e)
- {
- Org.Apache.Reef.Utilities.Diagnostics.Exceptions.Caught(e, Level.Error, LOGGER);
- Org.Apache.Reef.Utilities.Diagnostics.Exceptions.Throw(new ClassHierarchyException("Error in BindConstructor: ", e), LOGGER);
- }
- return c;
- }
-
- public ConfigurationModuleBuilder BindConstructor<T, U>(GenericType<T> cons, IImpl<U> v)
- where U : IExternalConstructor<T>
- {
- ConfigurationModuleBuilder c = DeepCopy();
- c.ProcessUse(v);
- Type consType = typeof(T);
- var i = (IImpl<object>)v;
- c.FreeImpls.Add(consType, i);
- return c;
- }
-
- public ConfigurationModule Build()
- {
- ConfigurationModuleBuilder c = DeepCopy();
-
- if (!(c.reqUsed.ContainsAll(c.ReqDecl) && c.optUsed.ContainsAll(c.OptDecl)))
- {
- ISet<FieldInfo> fset = new MonotonicHashSet<FieldInfo>();
- foreach (FieldInfo f in c.ReqDecl)
- {
- if (!c.reqUsed.Contains(f))
- {
- fset.Add(f);
- }
- }
- foreach (FieldInfo f in c.OptDecl)
- {
- if (!c.optUsed.Contains(f))
- {
- fset.Add(f);
- }
- }
- var e = new ClassHierarchyException(
- "Found declared options that were not used in binds: "
- + ToString(fset));
- Org.Apache.Reef.Utilities.Diagnostics.Exceptions.Throw(e, LOGGER);
- }
- foreach (Type clz in c.lateBindClazz.Keys)
- {
- try
- {
- c.B.Bind(ReflectionUtilities.GetAssemblyQualifiedName(clz), c.lateBindClazz.Get(clz));
- }
- catch (NameResolutionException e)
- {
- Org.Apache.Reef.Utilities.Diagnostics.Exceptions.Caught(e, Level.Error, LOGGER);
- var ex = new ClassHierarchyException("ConfigurationModule refers to unknown class: " + c.lateBindClazz.Get(clz), e);
- Org.Apache.Reef.Utilities.Diagnostics.Exceptions.Throw(ex, LOGGER);
- }
- catch (BindException e)
- {
- Org.Apache.Reef.Utilities.Diagnostics.Exceptions.Caught(e, Level.Error, LOGGER);
- var ex = new ClassHierarchyException("bind failed while initializing ConfigurationModuleBuilder", e);
- Org.Apache.Reef.Utilities.Diagnostics.Exceptions.Throw(ex, LOGGER);
- }
- }
- return new ConfigurationModule(c);
- }
-
- public ConfigurationModuleBuilder DeepCopy()
- {
- return new ConfigurationModuleBuilder(this);
- }
-
- public string ToString(ISet<FieldInfo> s)
- {
- StringBuilder sb = new StringBuilder("{");
- bool first = true;
- foreach (FieldInfo f in s)
- {
- sb.Append((first ? " " : ", ") + f.Name);
- first = false;
- }
- sb.Append(" }");
- return sb.ToString();
- }
-
- private void ProcessUse(object impl)
- {
- FieldInfo f;
- Map.TryGetValue(impl, out f);
- if (f == null)
- {
- var e = new ClassHierarchyException("Unknown Impl/Param when binding " + impl.GetType().Name + ". Did you pass in a field from some other module?");
- Org.Apache.Reef.Utilities.Diagnostics.Exceptions.Throw(e, LOGGER);
- }
- if (!reqUsed.Contains(f))
- {
- reqUsed.Add(f);
- }
- if (!optUsed.Contains(f))
- {
- optUsed.Add(f);
- }
- }
- }
-}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-reef/blob/c1b5200f/lang/cs/Source/TANG/Tang/Formats/IConfigurationSerializer.cs
----------------------------------------------------------------------
diff --git a/lang/cs/Source/TANG/Tang/Formats/IConfigurationSerializer.cs b/lang/cs/Source/TANG/Tang/Formats/IConfigurationSerializer.cs
deleted file mode 100644
index ec3baac..0000000
--- a/lang/cs/Source/TANG/Tang/Formats/IConfigurationSerializer.cs
+++ /dev/null
@@ -1,49 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you 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.
- */
-
-using Org.Apache.Reef.Tang.Annotations;
-using Org.Apache.Reef.Tang.Formats;
-using Org.Apache.Reef.Tang.Interface;
-
-namespace Org.Apache.Reef.Tang.Formats
-{
- [DefaultImplementation(typeof(AvroConfigurationSerializer), "default")]
- public interface IConfigurationSerializer
- {
- void ToFileStream(IConfiguration c, string fileName);
-
- void ToFile(IConfiguration c, string fileName);
-
- byte[] ToByteArray(IConfiguration c);
-
- string ToBase64String(IConfiguration c);
-
- string ToString(IConfiguration c);
-
- IConfiguration FromFileStream(string fileName);
-
- IConfiguration FromFile(string fileName);
-
- IConfiguration FromByteArray(byte[] bytes);
-
- IConfiguration FromBase64String(string serializedConfig);
-
- IConfiguration FromString(string josonString);
- }
-}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-reef/blob/c1b5200f/lang/cs/Source/TANG/Tang/Formats/IImpl.cs
----------------------------------------------------------------------
diff --git a/lang/cs/Source/TANG/Tang/Formats/IImpl.cs b/lang/cs/Source/TANG/Tang/Formats/IImpl.cs
deleted file mode 100644
index 70a454d..0000000
--- a/lang/cs/Source/TANG/Tang/Formats/IImpl.cs
+++ /dev/null
@@ -1,31 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you 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.
- */
-
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-
-namespace Org.Apache.Reef.Tang.Formats
-{
- public interface IImpl<T>
- {
- }
-}
http://git-wip-us.apache.org/repos/asf/incubator-reef/blob/c1b5200f/lang/cs/Source/TANG/Tang/Formats/IParam.cs
----------------------------------------------------------------------
diff --git a/lang/cs/Source/TANG/Tang/Formats/IParam.cs b/lang/cs/Source/TANG/Tang/Formats/IParam.cs
deleted file mode 100644
index fa2f93b..0000000
--- a/lang/cs/Source/TANG/Tang/Formats/IParam.cs
+++ /dev/null
@@ -1,31 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you 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.
- */
-
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-
-namespace Org.Apache.Reef.Tang.Formats
-{
- public interface IParam<T>
- {
- }
-}
http://git-wip-us.apache.org/repos/asf/incubator-reef/blob/c1b5200f/lang/cs/Source/TANG/Tang/Formats/OptionalImpl.cs
----------------------------------------------------------------------
diff --git a/lang/cs/Source/TANG/Tang/Formats/OptionalImpl.cs b/lang/cs/Source/TANG/Tang/Formats/OptionalImpl.cs
deleted file mode 100644
index 5ba77aa..0000000
--- a/lang/cs/Source/TANG/Tang/Formats/OptionalImpl.cs
+++ /dev/null
@@ -1,31 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you 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.
- */
-
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-
-namespace Org.Apache.Reef.Tang.Formats
-{
- public sealed class OptionalImpl<T> : IImpl<T>
- {
- }
-}
http://git-wip-us.apache.org/repos/asf/incubator-reef/blob/c1b5200f/lang/cs/Source/TANG/Tang/Formats/OptionalParameter.cs
----------------------------------------------------------------------
diff --git a/lang/cs/Source/TANG/Tang/Formats/OptionalParameter.cs b/lang/cs/Source/TANG/Tang/Formats/OptionalParameter.cs
deleted file mode 100644
index 35f0993..0000000
--- a/lang/cs/Source/TANG/Tang/Formats/OptionalParameter.cs
+++ /dev/null
@@ -1,31 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you 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.
- */
-
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-
-namespace Org.Apache.Reef.Tang.Formats
-{
- public sealed class OptionalParameter<T> : IParam<T>
- {
- }
-}
http://git-wip-us.apache.org/repos/asf/incubator-reef/blob/c1b5200f/lang/cs/Source/TANG/Tang/Formats/Provides.cs
----------------------------------------------------------------------
diff --git a/lang/cs/Source/TANG/Tang/Formats/Provides.cs b/lang/cs/Source/TANG/Tang/Formats/Provides.cs
deleted file mode 100644
index aa5b99b..0000000
--- a/lang/cs/Source/TANG/Tang/Formats/Provides.cs
+++ /dev/null
@@ -1,31 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you 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.
- */
-
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-
-namespace Org.Apache.Reef.Tang.Formats
-{
- public sealed class Provides<T>
- {
- }
-}
http://git-wip-us.apache.org/repos/asf/incubator-reef/blob/c1b5200f/lang/cs/Source/TANG/Tang/Formats/RequiredImpl.cs
----------------------------------------------------------------------
diff --git a/lang/cs/Source/TANG/Tang/Formats/RequiredImpl.cs b/lang/cs/Source/TANG/Tang/Formats/RequiredImpl.cs
deleted file mode 100644
index 4181dce..0000000
--- a/lang/cs/Source/TANG/Tang/Formats/RequiredImpl.cs
+++ /dev/null
@@ -1,31 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you 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.
- */
-
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-
-namespace Org.Apache.Reef.Tang.Formats
-{
- public sealed class RequiredImpl<T> : IImpl<T>
- {
- }
-}
http://git-wip-us.apache.org/repos/asf/incubator-reef/blob/c1b5200f/lang/cs/Source/TANG/Tang/Formats/RequiredParameter.cs
----------------------------------------------------------------------
diff --git a/lang/cs/Source/TANG/Tang/Formats/RequiredParameter.cs b/lang/cs/Source/TANG/Tang/Formats/RequiredParameter.cs
deleted file mode 100644
index 7c13dd3..0000000
--- a/lang/cs/Source/TANG/Tang/Formats/RequiredParameter.cs
+++ /dev/null
@@ -1,31 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you 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.
- */
-
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-
-namespace Org.Apache.Reef.Tang.Formats
-{
- public sealed class RequiredParameter<T> : IParam<T>
- {
- }
-}
http://git-wip-us.apache.org/repos/asf/incubator-reef/blob/c1b5200f/lang/cs/Source/TANG/Tang/Implementations/ClassHierarchy/AbstractNode.cs
----------------------------------------------------------------------
diff --git a/lang/cs/Source/TANG/Tang/Implementations/ClassHierarchy/AbstractNode.cs b/lang/cs/Source/TANG/Tang/Implementations/ClassHierarchy/AbstractNode.cs
deleted file mode 100644
index a88e7d2..0000000
--- a/lang/cs/Source/TANG/Tang/Implementations/ClassHierarchy/AbstractNode.cs
+++ /dev/null
@@ -1,131 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you 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.
- */
-using System;
-using System.Collections.Generic;
-using Org.Apache.Reef.Tang.Types;
-using Org.Apache.Reef.Tang.Util;
-
-namespace Org.Apache.Reef.Tang.Implementations
-{
- public class AbstractNode : INode
- {
- /// It is from Type.FullName. This name is used as Name in a Node.
- /// It is not unique for a generic type with different type of arguments.
- /// It is used for toString or debug info as AssemblyQualifiedName is really long
- private String name;
-
- /// It is from Type.AssemblyQualifiedName. THis name is used as full name in a Node
- /// It is unique for a generic type with different type of arguments.
- private String fullName; //it comes from
-
- //parent node in the class hierarchy
- private INode parent;
-
- //children in the class hierarchy
- protected IDictionary<String, INode> children = new MonotonicTreeMap<string, INode>();
-
- public AbstractNode(INode parent, String name, String fullName)
- {
- this.parent = parent;
- this.name = name;
- this.fullName = fullName;
- if (parent != null)
- {
- parent.Add(this);
- }
- }
-
- public ICollection<INode> GetChildren()
- {
- return children.Values;
- }
-
- public bool Contains(String key)
- {
- return children.ContainsKey(key);
- }
-
- public INode Get(String key)
- {
- INode val;
- if (children.TryGetValue(key, out val))
- {
- return val;
- }
- return null;
- }
-
- public virtual void Add(INode n)
- {
- children.Add(n.GetFullName(), n);
- }
-
- public string GetFullName()
- {
- return fullName;
- }
-
- public string GetName()
- {
- return name;
- }
-
- public INode GetParent()
- {
- return parent;
- }
-
- public override bool Equals(Object o)
- {
- if(o == null) return false;
- if(o == this) return true;
-
- AbstractNode n = (AbstractNode) o;
- bool parentsEqual;
- if (n.parent == this.parent) {
- parentsEqual = true;
- } else if (n.parent == null) {
- parentsEqual = false;
- } else if (this.parent == null) {
- parentsEqual = false;
- } else {
- parentsEqual = n.parent.Equals(this.parent);
- }
- if (!parentsEqual) {
- return false;
- }
- return fullName.Equals(n.fullName);
- }
-
- public override int GetHashCode()
- {
- return fullName.GetHashCode();
- }
-
- public override String ToString()
- {
- return "[" + this.GetType().FullName + " '" + fullName + "']";
- }
-
- public int CompareTo(INode n)
- {
- return fullName.CompareTo(n.GetFullName());
- }
- }
-}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-reef/blob/c1b5200f/lang/cs/Source/TANG/Tang/Implementations/ClassHierarchy/ClassHierarchyImpl.cs
----------------------------------------------------------------------
diff --git a/lang/cs/Source/TANG/Tang/Implementations/ClassHierarchy/ClassHierarchyImpl.cs b/lang/cs/Source/TANG/Tang/Implementations/ClassHierarchy/ClassHierarchyImpl.cs
deleted file mode 100644
index 3f9f16e..0000000
--- a/lang/cs/Source/TANG/Tang/Implementations/ClassHierarchy/ClassHierarchyImpl.cs
+++ /dev/null
@@ -1,526 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you 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.
- */
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Reflection;
-using System.Text;
-using Org.Apache.Reef.Utilities.Logging;
-using Org.Apache.Reef.Tang.Annotations;
-using Org.Apache.Reef.Tang.Exceptions;
-using Org.Apache.Reef.Tang.Interface;
-using Org.Apache.Reef.Tang.Types;
-using Org.Apache.Reef.Tang.Util;
-
-namespace Org.Apache.Reef.Tang.Implementations
-{
- public class ClassHierarchyImpl : ICsClassHierarchy
- {
- private static readonly Logger LOGGER = Logger.GetLogger(typeof (ClassHierarchyImpl));
- private INode rootNode;
- private MonotonicTreeMap<String, INamedParameterNode> shortNames = new MonotonicTreeMap<String, INamedParameterNode>();
- private IList<string> assemblies;
- private AssemblyLoader loader = null;
-
- public ParameterParser Parameterparser = new ParameterParser();
-
- public ClassHierarchyImpl(String file) : this(new string[] { file }, new Type[0])
- {
- }
-
- public ClassHierarchyImpl(string[] assemblies) : this(assemblies, new Type[0])
- {
- }
-
- //parameterParsers are classes that extends from IExternalConstructor
- public ClassHierarchyImpl(string[] assemblies, Type[] parameterParsers)
- {
- this.assemblies = assemblies;
- rootNode = NodeFactory.CreateRootPackageNode();
- loader = new AssemblyLoader(assemblies);
-
- foreach (Type p in parameterParsers) //p must be extend from IExternalConstructor
- {
- try
- {
- Parameterparser.AddParser(p);
- }
- catch (BindException e)
- {
- Org.Apache.Reef.Utilities.Diagnostics.Exceptions.Caught(e, Level.Error, LOGGER);
- Org.Apache.Reef.Utilities.Diagnostics.Exceptions.Throw(new ArgumentException("Could not register parameter parsers", e), LOGGER);
- }
- }
-
- foreach (var a in loader.Assemblies)
- {
- foreach (var t in a.GetTypes())
- {
- RegisterType(t);
- }
- }
- }
-
- public INode RegisterType(string assemblyQualifiedName)
- {
- Type type = this.loader.GetType(assemblyQualifiedName);
- if (type != null)
- {
- return RegisterType(type);
- }
- return null;
- }
-
- public INode RegisterType(Type type)
- {
- if (ReflectionUtilities.IsAnnonymousType(type))
- {
- // DevNote: Kinda hacky way to indicate the no-op case.
- return rootNode;
- }
-
- INode n = GetAlreadyBoundNode(type);
- if (n != null)
- {
- return n;
- }
-
- if (type.BaseType != null)
- {
- RegisterType(type.BaseType);
- }
-
- foreach (Type interf in type.GetInterfaces())
- {
- RegisterType(ReflectionUtilities.EnsureInterfaceType(interf));
- }
-
- Type enclosingClass = type.DeclaringType; // this.GetEnclosingClass(type);
- if (enclosingClass != null)
- {
- RegisterType(enclosingClass);
- }
-
- INode node = RegisterClass(type);
-
- foreach (Type inner in type.GetNestedTypes())
- {
- RegisterType(inner);
- }
-
- IClassNode classNode = node as ClassNodeImpl;
- if (classNode != null)
- {
- foreach (IConstructorDef constructorDef in classNode.GetInjectableConstructors())
- {
- foreach (IConstructorArg constructorArg in constructorDef.GetArgs())
- {
- if (constructorArg.Gettype() == null)
- {
- Org.Apache.Reef.Utilities.Diagnostics.Exceptions.Throw(new ArgumentException("not type in arg"), LOGGER);
- }
- RegisterType(constructorArg.Gettype()); //Gettype returns param's Type.fullname
- if (constructorArg.GetNamedParameterName() != null)
- {
- INamedParameterNode np = (INamedParameterNode)RegisterType(constructorArg.GetNamedParameterName());
- try
- {
- if (np.IsSet() || np.IsList())
- {
- //throw new NotImplementedException();
- }
- else
- {
- if (!ReflectionUtilities.IsCoercable(ClassForName(constructorArg.Gettype()), ClassForName(np.GetFullArgName())))
- {
- var e = new ClassHierarchyException(
- "Named parameter type mismatch in " + classNode.GetFullName() + ". Constructor expects a "
- + constructorArg.Gettype() + " but " + np.GetName() + " is a "
- + np.GetFullArgName());
- Org.Apache.Reef.Utilities.Diagnostics.Exceptions.Throw(e, LOGGER);
- }
- }
- }
- catch (TypeLoadException e)
- {
- Org.Apache.Reef.Utilities.Diagnostics.Exceptions.Caught(e, Level.Error, LOGGER);
- var ex = new ClassHierarchyException("Constructor refers to unknown class "
- + constructorArg.GetType(), e);
- Org.Apache.Reef.Utilities.Diagnostics.Exceptions.Throw(ex, LOGGER);
- }
- }
- }
- }
- }
- else
- {
- INamedParameterNode npNode = node as INamedParameterNode;
- if (npNode != null)
- {
- RegisterType(npNode.GetFullArgName());
- }
- }
-
- return node;
- }
-
- private INode RegisterClass(Type type)
- {
- INode node = GetAlreadyBoundNode(type);
- if (node != null)
- {
- return node;
- }
-
- node = BuildPathToNode(type);
- IClassNode classNode = node as IClassNode;
- if (classNode != null)
- {
- Type baseType = type.BaseType;
- if (baseType != null)
- {
- IClassNode n = (IClassNode) GetAlreadyBoundNode(baseType);
- if (n != null)
- {
- n.PutImpl(classNode);
- }
- else
- {
- Org.Apache.Reef.Utilities.Diagnostics.Exceptions.Throw(new IllegalStateException("Error in finding Node for BaseType"), LOGGER);
- }
- }
-
- foreach (Type interf in ReflectionUtilities.GetInterfaces(type, false))
- {
- IClassNode n = (IClassNode)GetAlreadyBoundNode(ReflectionUtilities.EnsureInterfaceType(interf));
- if (n != null)
- {
- n.PutImpl(classNode);
- }
- else
- {
- Org.Apache.Reef.Utilities.Diagnostics.Exceptions.Throw(new IllegalStateException("Error in finding Node for Interface"), LOGGER);
- }
- }
- }
- return node;
- }
-
- public INode BuildPathToNode(Type type)
- {
- INode parent = GetParentNode(type);
-
- Type argType = ReflectionUtilities.GetNamedParameterTargetOrNull(type);
-
- if (argType == null)
- {
- return NodeFactory.CreateClassNode(parent, type);
- }
- INamedParameterNode np = NodeFactory.CreateNamedParameterNode(parent, type, argType);
-
- if(Parameterparser.CanParse(ReflectionUtilities.GetAssemblyQualifiedName(argType))) {
- if(type.GetCustomAttribute<NamedParameterAttribute>().DefaultClass != null)
- {
- var e = new ClassHierarchyException("Named parameter " + ReflectionUtilities.GetAssemblyQualifiedName(type) + " defines default implementation for parsable type " + ReflectionUtilities.GetAssemblyQualifiedName(argType));
- Org.Apache.Reef.Utilities.Diagnostics.Exceptions.Throw(e, LOGGER);
- }
- }
-
- string shortName = np.GetShortName();
- if (shortName != null && !shortName.Equals(""))
- {
- INamedParameterNode oldNode = null;
- shortNames.TryGetValue(shortName, out oldNode);
- if (oldNode != null)
- {
- if (oldNode.GetFullName().Equals(np.GetFullName()))
- {
- var ex = new IllegalStateException("Tried to double bind "
- + oldNode.GetFullName() + " to short name " + shortName);
- Org.Apache.Reef.Utilities.Diagnostics.Exceptions.Throw(ex, LOGGER);
- }
- var e = new ClassHierarchyException("Named parameters " + oldNode.GetFullName()
- + " and " + np.GetFullName() + " have the same short name: "
- + shortName);
- Org.Apache.Reef.Utilities.Diagnostics.Exceptions.Throw(e, LOGGER);
- }
- shortNames.Add(shortName, np);
-
- }
- return np;
- }
-
- //return Type T if type implements Name<T>, null otherwise
- //e.g. [NamedParameter(typeof(System.String), "Number of seconds to sleep", "10", "sec")]
- //class Seconds : Name<Int32> { }
- //return Int32
-
- //TODO add error handlings
- public Type GetNamedParameterTargetOrNull(Type type)
- {
- var npAnnotation = type.GetCustomAttribute<NamedParameterAttribute>();
- if (npAnnotation != null)
- {
- Type[] intfs = type.GetInterfaces();
- if (intfs.Length == 1)
- {
- if (intfs[0].Name.Equals(GetNameOfNameInterface()))
- {
- Type[] args = intfs[0].GetGenericArguments();
- if (args.Length == 1)
- {
- return args[0];
- }
- }
- }
-
- }
- return null;
- }
-
- private INode GetAlreadyBoundNode(Type t)
- {
- //get outclass names including itsself
- string[] outerClassNames = ReflectionUtilities.GetEnclosingClassNames(t);
-
- INode current = rootNode;
- for (int i = 0; i < outerClassNames.Length; i++)
- {
- current = current.Get(outerClassNames[i]);
- if (current == null)
- {
- StringBuilder sb = new StringBuilder();
- for (int j = 0; j <= i; j++)
- {
- sb.Append(outerClassNames[j]);
- if (j != i)
- {
- sb.Append(".");
- }
- }
- return null;
- //throw new NameResolutionException(t.FullName, sb.ToString());
- }
-
- }
- return current;
- }
-
- //starting from the root, get child for each eclosing class excluding the type itsself
- //all enclosing classes should be already in the hierarchy
- //Type B2 = asm.GetType(@"Org.Apache.Reef.Tang.Examples.B+B1+B2");
- //string[] pathB2 = ClassNameParser.GetEnclosingClassShortNames(B2);
- //Assert.AreEqual(pathB2[0], "B");
- //Assert.AreEqual(pathB2[1], "B1");
- //Assert.AreEqual(pathB2[2], "B2");
- //return INode for B1
- private INode GetParentNode(Type type)
- {
- INode current = rootNode;
- string[] enclosingPath = ReflectionUtilities.GetEnclosingClassNames(type);
- for (int i = 0; i < enclosingPath.Length - 1; i++)
- {
- current = current.Get(enclosingPath[i]);
- }
- return current;
- }
-
- private string GetNameOfNameInterface()
- {
- var tn = typeof(Name<int>);
- return tn.Name;
- }
-
- public INode GetNode(string fullName)
- {
- Type t = loader.GetType(fullName);
-
- if (t == null)
- {
- Org.Apache.Reef.Utilities.Diagnostics.Exceptions.Throw(new NameResolutionException(fullName, fullName), LOGGER);
- }
-
- return this.GetNode(t);
- }
-
- public INode GetNode(Type type)
- {
- this.RegisterType(type);
- return GetAlreadyBoundNode(type);
- }
-
- public INode GetNamespace()
- {
- return rootNode;
- }
-
- public bool IsImplementation(IClassNode inter, IClassNode impl)
- {
- return impl.IsImplementationOf(inter);
- }
-
- public IClassHierarchy Merge(IClassHierarchy ch)
- {
- if (this == ch) { return this; }
-
- if (!(ch is ClassHierarchyImpl))
- {
- Org.Apache.Reef.Utilities.Diagnostics.Exceptions.Throw(new NotSupportedException("Can't merge java and non-java class hierarchies yet!"), LOGGER);
- }
-
- if(this.assemblies.Count == 0)
- {
- return ch;
- }
-
- ClassHierarchyImpl chi = (ClassHierarchyImpl)ch;
- MonotonicHashSet<string> otherJars = new MonotonicHashSet<string>();
- otherJars.AddAll(chi.assemblies);
- MonotonicHashSet<string> myJars = new MonotonicHashSet<string>();
- myJars.AddAll(this.assemblies);
- if(myJars.ContainsAll(otherJars))
- {
- return this;
- }
- if (otherJars.ContainsAll(myJars))
- {
- return ch;
- }
- myJars.AddAll(otherJars);
- return new ClassHierarchyImpl(myJars.ToArray());
- }
-
- public object Parse(INamedParameterNode np, string value)
- {
- IClassNode iface = null;
- try
- {
- iface = (IClassNode)GetNode(np.GetFullArgName());
- }
- catch(NameResolutionException e)
- {
- Org.Apache.Reef.Utilities.Diagnostics.Exceptions.Caught(e, Level.Error, LOGGER);
- var ex = new IllegalStateException("Could not parse validated named parameter argument type. NamedParameter is " + np.GetFullName() + " argument type is " + np.GetFullArgName(), e);
- Org.Apache.Reef.Utilities.Diagnostics.Exceptions.Throw(ex, LOGGER);
- }
- Type clazz;
- String fullName;
- try
- {
- clazz = (Type)ClassForName(iface.GetFullName());
- fullName = null;
- }
- catch(TypeLoadException e)
- {
- Org.Apache.Reef.Utilities.Diagnostics.Exceptions.Caught(e, Level.Warning, LOGGER);
- clazz = null;
- fullName = iface.GetFullName();
- }
-
- object result = null;
- if (clazz != null)
- {
- result = Parameterparser.Parse(clazz, value);
- }
- else
- {
- result = Parameterparser.Parse(fullName, value);
- }
-
- if (result == null)
- {
- try
- {
- INode impl = GetNode(value);
- if (impl is IClassNode)
- {
- if (IsImplementation(iface, (IClassNode) impl))
- {
- return impl;
- }
- }
- var ex =
- new ParseException(
- "Name<" + iface.GetFullName() + "> " + np.GetFullName() + " cannot take non-subclass " +
- impl.GetFullName());
- Org.Apache.Reef.Utilities.Diagnostics.Exceptions.Throw(ex, LOGGER);
- }
- catch (NameResolutionException ec)
- {
- Org.Apache.Reef.Utilities.Diagnostics.Exceptions.Caught(ec, Level.Error, LOGGER);
- var ex =
- new ParseException(
- "Name<" + iface.GetFullName() + "> " + np.GetFullName() + " cannot take non-class " + value,
- ec);
- Org.Apache.Reef.Utilities.Diagnostics.Exceptions.Throw(ex, LOGGER);
- }
- }
- return result;
- }
-
- public object ParseDefaultValue(INamedParameterNode name)
- {
- string[] vals = name.GetDefaultInstanceAsStrings();
- object[] ret = new Object[vals.Length];
- for (int i = 0; i < vals.Length; i++)
- {
- string val = vals[i];
- try
- {
- ret[i] = Parse(name, val);
- }
- catch (ParseException e)
- {
- Org.Apache.Reef.Utilities.Diagnostics.Exceptions.Caught(e, Level.Error, LOGGER);
- var ex = new ClassHierarchyException("Could not parse default value " + val, e);
- Org.Apache.Reef.Utilities.Diagnostics.Exceptions.Throw(ex, LOGGER);
- }
- }
- if (name.IsSet())
- {
- return new HashSet<object>(ret.ToList<object>());
- }
- if (name.IsList())
- {
- return new List<object>(ret.ToList<object>());
- }
- if (ret.Length == 0)
- {
- return null;
- }
- if (ret.Length == 1)
- {
- return ret[0];
- }
- var ec = new IllegalStateException("Multiple defaults for non-set named parameter! " + name.GetFullName());
- Org.Apache.Reef.Utilities.Diagnostics.Exceptions.Throw(ec, LOGGER);
- return null; //this line would be never reached as Throw will throw an exception
- }
-
- public Type ClassForName(string name)
- {
- return this.GetType(name);
- }
-
- public Type GetType(string name)
- {
- return this.loader.GetType(name);
- }
- }
-}
http://git-wip-us.apache.org/repos/asf/incubator-reef/blob/c1b5200f/lang/cs/Source/TANG/Tang/Implementations/ClassHierarchy/ClassNodeImpl.cs
----------------------------------------------------------------------
diff --git a/lang/cs/Source/TANG/Tang/Implementations/ClassHierarchy/ClassNodeImpl.cs b/lang/cs/Source/TANG/Tang/Implementations/ClassHierarchy/ClassNodeImpl.cs
deleted file mode 100644
index 27a57b9..0000000
--- a/lang/cs/Source/TANG/Tang/Implementations/ClassHierarchy/ClassNodeImpl.cs
+++ /dev/null
@@ -1,157 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you 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.
- */
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using Org.Apache.Reef.Utilities.Logging;
-using Org.Apache.Reef.Tang.Exceptions;
-using Org.Apache.Reef.Tang.Types;
-using Org.Apache.Reef.Tang.Util;
-
-namespace Org.Apache.Reef.Tang.Implementations
-{
- public class ClassNodeImpl : AbstractNode, IClassNode
- {
- private static readonly Logger LOGGER = Logger.GetLogger(typeof(ClassNodeImpl));
-
- private readonly bool injectable;
- private readonly bool unit;
- private readonly bool externalConstructor;
- private readonly IList<IConstructorDef> injectableConstructors;
- private readonly IList<IConstructorDef> allConstructors;
- private readonly MonotonicSet<IClassNode> knownImpls;
- private readonly String defaultImpl;
-
- public ClassNodeImpl(INode parent, String simpleName, String fullName,
- bool unit, bool injectable, bool externalConstructor,
- IList<IConstructorDef> injectableConstructors,
- IList<IConstructorDef> allConstructors,
- String defaultImplementation)
- : base(parent, simpleName, fullName)
- {
-
- this.unit = unit;
- this.injectable = injectable;
- this.externalConstructor = externalConstructor;
- this.injectableConstructors = injectableConstructors;
- this.allConstructors = allConstructors;
- this.knownImpls = new MonotonicSet<IClassNode>();
- this.defaultImpl = defaultImplementation;
- }
-
- public IList<IConstructorDef> GetInjectableConstructors()
- {
- return injectableConstructors;
- }
-
- public IList<IConstructorDef> GetAllConstructors()
- {
- return allConstructors;
- }
-
- public bool IsInjectionCandidate()
- {
- return injectable;
- }
-
- public bool IsExternalConstructor()
- {
- return externalConstructor;
- }
-
- public override String ToString()
- {
- StringBuilder sb = new StringBuilder(base.ToString() + ": ");
- if (GetInjectableConstructors() != null)
- {
- foreach (IConstructorDef c in GetInjectableConstructors())
- {
- sb.Append(c.ToString() + ", ");
- }
- }
- else
- {
- sb.Append("OBJECT BUILD IN PROGRESS! BAD NEWS!");
- }
- return sb.ToString();
- }
-
- public IConstructorDef GetConstructorDef(IList<IClassNode> paramTypes)
- {
- if (!IsInjectionCandidate())
- {
- var e = new BindException("Cannot @Inject non-static member/local class: "
- + GetFullName());
- Org.Apache.Reef.Utilities.Diagnostics.Exceptions.Throw(e, LOGGER);
- }
- foreach (IConstructorDef c in GetAllConstructors())
- {
- if (c.TakesParameters(paramTypes))
- {
- return c;
- }
- }
- Org.Apache.Reef.Utilities.Diagnostics.Exceptions.Throw(new BindException("Could not find requested constructor for class " + GetFullName()), LOGGER);
- return null; // this line would not be reached as Thrwo throws an exception
- }
-
- public void PutImpl(IClassNode impl)
- {
- knownImpls.Add(impl);
- }
-
- public ISet<IClassNode> GetKnownImplementations()
- {
- return new MonotonicSet<IClassNode>(knownImpls);
- }
-
- public bool IsUnit()
- {
- return unit;
- }
-
- public bool IsImplementationOf(IClassNode inter)
- {
- List<IClassNode> worklist = new List<IClassNode>();
- if (this.Equals(inter))
- {
- return true;
- }
- worklist.Add(inter);
- while (worklist.Count != 0)
- {
- IClassNode cn = worklist[worklist.Count - 1];
- worklist.RemoveAt(worklist.Count - 1);
- ISet<IClassNode> impls = cn.GetKnownImplementations();
- if (impls.Contains(this))
- {
- return true;
- }
- worklist.AddRange(impls);
- }
- return false;
- }
-
- public String GetDefaultImplementation()
- {
- return defaultImpl;
- }
- }
-}
http://git-wip-us.apache.org/repos/asf/incubator-reef/blob/c1b5200f/lang/cs/Source/TANG/Tang/Implementations/ClassHierarchy/ConstructorArgImpl.cs
----------------------------------------------------------------------
diff --git a/lang/cs/Source/TANG/Tang/Implementations/ClassHierarchy/ConstructorArgImpl.cs b/lang/cs/Source/TANG/Tang/Implementations/ClassHierarchy/ConstructorArgImpl.cs
deleted file mode 100644
index 31e4103..0000000
--- a/lang/cs/Source/TANG/Tang/Implementations/ClassHierarchy/ConstructorArgImpl.cs
+++ /dev/null
@@ -1,97 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you 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.
- */
-using System;
-using Org.Apache.Reef.Tang.Types;
-
-namespace Org.Apache.Reef.Tang.Implementations
-{
- public class ConstructorArgImpl : IConstructorArg
- {
- private readonly String type;
- private readonly String name;
- private readonly bool isInjectionFuture;
-
- public ConstructorArgImpl(String type, String namedParameterName, bool isInjectionFuture)
- {
- if (type == null)
- {
- ;
- }
- this.type = type;
- this.name = namedParameterName;
-
- //if (name != null && name.Contains(','))
- // throw new ApplicationException("Name contains comma : " + name);
- this.isInjectionFuture = isInjectionFuture;
- }
-
- public string GetName()
- {
- return name == null ? type : name;
- }
-
- public string GetNamedParameterName()
- {
- return name;
- }
-
- public string Gettype()
- {
- return type;
- }
-
- public bool IsInjectionFuture()
- {
- return isInjectionFuture;
- }
-
- public override String ToString()
- {
- return name == null ? type : type + " " + name;
- }
-
- public override int GetHashCode()
- {
- return 0;
- }
-
- public override bool Equals(Object o)
- {
- ConstructorArgImpl arg = (ConstructorArgImpl)o;
- if (!type.Equals(arg.type))
- {
- return false;
- }
- if (name == null && arg.name == null)
- {
- return true;
- }
- if (name == null && arg.name != null)
- {
- return false;
- }
- if (name != null && arg.name == null)
- {
- return false;
- }
- return name.Equals(arg.name);
-
- }
- }
-}