public T ConvertToCustomAttribute <T>(NProject2 project = null) where T : Attribute { if (Attribute == null && IAttribute != null) { Attribute = IAttribute.ConvertToCustomAttribute <T>(project); } return(Attribute as T); }
public static bool OmitCasts(ITypeDefinition ce, NProject2 project) { var att = GetJsExportAttribute(project.Compilation.MainAssembly); if (att != null && att.ForceOmitCasts) { return(true); } var value = ce.MD_JType(t => t._OmitCasts); return(value.GetValueOrDefault()); }
public static T ConvertToCustomAttribute <T>(this IAttribute att, NProject2 globalNamespace = null) { var att2 = AttributeCache.TryGetValue(att); if (att2 != null) { AttributeCacheHits++; return((T)att2); } //object att2; object[] prms = null; if (att.PositionalArguments != null) { var prms2 = new List <object>(); foreach (var prm in att.PositionalArguments) { var value = ToClrValue(prm); prms2.Add(value); } prms = prms2.ToArray(); } var type = typeof(T); //var ctor = type.GetConstructor(prms.Select(t => t.GetType()).ToArray()); att2 = Activator.CreateInstance(type, prms); if (att.NamedArguments != null) { foreach (var arg in att.NamedArguments) { var value = ToClrValue(arg.Value); var pe = att2.GetType().GetProperty(arg.Key.Name); if (pe == null) { throw new CompilerException(att, String.Format("Cannot find property {0} for attribute {1}", arg.Key.Name, type.Name)); //continue; } pe.SetValue(att2, value, null); } } if (!IsAttributeSupportedForThisVersion(att2)) { return(default(T)); } var x = att2 as ISupportSourceAttribute; if (x != null) { x.SourceAttribute = att; } AttributeCache[att] = att2; return((T)att2); }
void ParseCs() { TriggerEvent(BeforeParseCs); _CustomAttributeProvider = new CustomAttributeProvider(); Project = new NProject2 { SourceFiles = Args.Files, Defines = Defines, References = Args.References, TargetFrameworkVersion = Args.TargetFrameworkVersion, AssemblyName = Args.AssemblyName, Compiler = this, }; Project.Parse(); var asm = Project.MainAssembly; if (asm != null && asm.AssemblyName == null) { throw new NotImplementedException(); //asm.AssemblyName = Args.AssemblyName; } TriggerEvent(AfterParseCs); }