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)); 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) { Utilities.Diagnostics.Exceptions.Caught(e, Level.Error, LOGGER); var ex = new ClassHierarchyException("ConfigurationModule refers to unknown class: " + c.lateBindClazz.Get(clz), e); Utilities.Diagnostics.Exceptions.Throw(ex, LOGGER); } catch (BindException e) { Utilities.Diagnostics.Exceptions.Caught(e, Level.Error, LOGGER); var ex = new ClassHierarchyException("bind failed while initializing ConfigurationModuleBuilder", e); Utilities.Diagnostics.Exceptions.Throw(ex, LOGGER); } } return(new ConfigurationModule(c)); }
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); } }
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?"); Utilities.Diagnostics.Exceptions.Throw(e, LOGGER); } if (!reqUsed.Contains(f)) { reqUsed.Add(f); } if (!optUsed.Contains(f)) { optUsed.Add(f); } }
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"); 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); Utilities.Diagnostics.Exceptions.Throw(e, LOGGER); } if (!f.IsStatic) { var e = new ClassHierarchyException("Found a non-static configuration option in " + GetType() + ": " + f); Utilities.Diagnostics.Exceptions.Throw(e, LOGGER); } if (!f.IsInitOnly) { var e = new ClassHierarchyException("Found a non-readonly configuration option in " + GetType() + ": " + f); Utilities.Diagnostics.Exceptions.Throw(e, LOGGER); } object o = null; try { o = f.GetValue(null); } catch (ArgumentException e) { Utilities.Diagnostics.Exceptions.Caught(e, Level.Error, LOGGER); var ex = new ClassHierarchyException("Could not look up field instance in " + GetType() + " field: " + f, e); Utilities.Diagnostics.Exceptions.Throw(ex, LOGGER); } catch (FieldAccessException e) { Utilities.Diagnostics.Exceptions.Caught(e, Level.Error, LOGGER); var ex = new ClassHierarchyException("Could not look up field instance in " + GetType() + " field: " + f, e); 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); 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); } } }
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)); } } 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 (!ReflectionUtilities.IsInstanceOfGeneric(p, typeof(OptionalParameter <>))) { Org.Apache.REEF.Utilities.Diagnostics.Exceptions.Throw(new IllegalStateException(), LOGGER); } } } return(c.Builder.B.Build()); }