public TypeTester(Regex nameRx, TypeAffectFlags skipFlags, string attrib, string inherits, bool?isStatic, bool?isSeriablizable) : this(nameRx, skipFlags, attrib) { this.inherits = inherits; this.isStatic = isStatic; this.isSerializable = isSeriablizable; }
private bool ShouldForce(TypeKey type, TypeAffectFlags flag, InheritMap map) { if (ShouldForce(type.Namespace, map)) { return(true); } foreach (TypeTester typeTester in forceTypes) { if ((typeTester.AffectFlags & flag) > 0 && typeTester.Test(type, map)) { return(true); } } return(false); }
private static void FromXmlReadNode(XElement element, Project project, Variables vars, AssemblyInfo info) { foreach (var reader in element.Elements()) { string name = Helper.GetAttribute(reader, "name", vars); string rxStr = Helper.GetAttribute(reader, "rx"); Regex rx = null; if (!string.IsNullOrEmpty(rxStr)) { rx = new Regex(rxStr); } string isStaticStr = Helper.GetAttribute(reader, "static", vars); bool? isStatic = null; if (!string.IsNullOrEmpty(isStaticStr)) { isStatic = Convert.ToBoolean(isStaticStr); } string isSerializableStr = Helper.GetAttribute(reader, "serializable", vars); bool? isSerializable = null; if (!string.IsNullOrEmpty(isSerializableStr)) { isSerializable = Convert.ToBoolean(isSerializableStr); } string attrib = Helper.GetAttribute(reader, "attrib", vars); string inherits = Helper.GetAttribute(reader, "typeinherits", vars); string type = Helper.GetAttribute(reader, "type", vars); string typeattrib = Helper.GetAttribute(reader, "typeattrib", vars); string val; switch (reader.Name.LocalName) { case "Include": { Project.ReadIncludeTag(reader, project, (includeReader, proj) => FromXmlReadNode(includeReader, proj, vars, info)); break; } case "SkipNamespace": if (rx != null) { info.skipNamespaces.Add(new NamespaceTester(rx)); } else { info.skipNamespaces.Add(new NamespaceTester(name)); } break; case "ForceNamespace": if (rx != null) { info.forceNamespaces.Add(new NamespaceTester(rx)); } else { info.forceNamespaces.Add(new NamespaceTester(name)); } break; case "SkipType": TypeAffectFlags skipFlags = TypeAffectFlags.SkipNone; val = Helper.GetAttribute(reader, "skipMethods", vars); if (val.Length > 0 && Convert.ToBoolean(val)) { skipFlags |= TypeAffectFlags.AffectMethod; } val = Helper.GetAttribute(reader, "skipStringHiding", vars); if (val.Length > 0 && Convert.ToBoolean(val)) { skipFlags |= TypeAffectFlags.AffectString; } val = Helper.GetAttribute(reader, "skipFields", vars); if (val.Length > 0 && Convert.ToBoolean(val)) { skipFlags |= TypeAffectFlags.AffectField; } val = Helper.GetAttribute(reader, "skipProperties", vars); if (val.Length > 0 && Convert.ToBoolean(val)) { skipFlags |= TypeAffectFlags.AffectProperty; } val = Helper.GetAttribute(reader, "skipEvents", vars); if (val.Length > 0 && Convert.ToBoolean(val)) { skipFlags |= TypeAffectFlags.AffectEvent; } if (rx != null) { info.skipTypes.Add(new TypeTester(rx, skipFlags, attrib, inherits, isStatic, isSerializable)); } else { info.skipTypes.Add(new TypeTester(name, skipFlags, attrib, inherits, isStatic, isSerializable)); } break; case "ForceType": TypeAffectFlags forceFlags = TypeAffectFlags.SkipNone; val = Helper.GetAttribute(reader, "forceMethods", vars); if (val.Length > 0 && Convert.ToBoolean(val)) { forceFlags |= TypeAffectFlags.AffectMethod; } val = Helper.GetAttribute(reader, "forceStringHiding", vars); if (val.Length > 0 && Convert.ToBoolean(val)) { forceFlags |= TypeAffectFlags.AffectString; } val = Helper.GetAttribute(reader, "forceFields", vars); if (val.Length > 0 && Convert.ToBoolean(val)) { forceFlags |= TypeAffectFlags.AffectField; } val = Helper.GetAttribute(reader, "forceProperties", vars); if (val.Length > 0 && Convert.ToBoolean(val)) { forceFlags |= TypeAffectFlags.AffectProperty; } val = Helper.GetAttribute(reader, "forceEvents", vars); if (val.Length > 0 && Convert.ToBoolean(val)) { forceFlags |= TypeAffectFlags.AffectEvent; } if (rx != null) { info.forceTypes.Add(new TypeTester(rx, forceFlags, attrib, inherits, isStatic, isSerializable)); } else { info.forceTypes.Add(new TypeTester(name, forceFlags, attrib, inherits, isStatic, isSerializable)); } break; case "SkipMethod": if (rx != null) { info.skipMethods.Add(new MethodTester(rx, type, attrib, typeattrib, inherits, isStatic)); } else { info.skipMethods.Add(new MethodTester(name, type, attrib, typeattrib, inherits, isStatic)); } break; case "ForceMethod": if (rx != null) { info.forceMethods.Add( new MethodTester(rx, type, attrib, typeattrib, inherits, isStatic)); } else { info.forceMethods.Add(new MethodTester(name, type, attrib, typeattrib, inherits, isStatic)); } break; case "SkipStringHiding": if (rx != null) { info.skipStringHiding.Add(new MethodTester(rx, type, attrib, typeattrib)); } else { info.skipStringHiding.Add(new MethodTester(name, type, attrib, typeattrib)); } break; case "ForceStringHiding": if (rx != null) { info.forceStringHiding.Add(new MethodTester(rx, type, attrib, typeattrib)); } else { info.forceStringHiding.Add(new MethodTester(name, type, attrib, typeattrib)); } break; case "SkipField": string decorator = Helper.GetAttribute(reader, "decorator", vars); if (rx != null) { info.skipFields.Add(new FieldTester(rx, type, attrib, typeattrib, inherits, decorator, isStatic, isSerializable)); } else { info.skipFields.Add(new FieldTester(name, type, attrib, typeattrib, inherits, decorator, isStatic, isSerializable)); } break; case "ForceField": string decorator1 = Helper.GetAttribute(reader, "decorator", vars); if (rx != null) { info.forceFields.Add(new FieldTester(rx, type, attrib, typeattrib, inherits, decorator1, isStatic, isSerializable)); } else { info.forceFields.Add(new FieldTester(name, type, attrib, typeattrib, inherits, decorator1, isStatic, isSerializable)); } break; case "SkipProperty": if (rx != null) { info.skipProperties.Add(new PropertyTester(rx, type, attrib, typeattrib)); } else { info.skipProperties.Add(new PropertyTester(name, type, attrib, typeattrib)); } break; case "ForceProperty": if (rx != null) { info.forceProperties.Add(new PropertyTester(rx, type, attrib, typeattrib)); } else { info.forceProperties.Add(new PropertyTester(name, type, attrib, typeattrib)); } break; case "SkipEvent": if (rx != null) { info.skipEvents.Add(new EventTester(rx, type, attrib, typeattrib)); } else { info.skipEvents.Add(new EventTester(name, type, attrib, typeattrib)); } break; case "ForceEvent": if (rx != null) { info.forceEvents.Add(new EventTester(rx, type, attrib, typeattrib)); } else { info.forceEvents.Add(new EventTester(name, type, attrib, typeattrib)); } break; case "SkipEnums": var skipEnumsValue = Helper.GetAttribute(reader, "value"); info.skipEnums = skipEnumsValue.Length > 0 && Convert.ToBoolean(skipEnumsValue); break; } } }
private bool ShouldSkip(TypeKey type, TypeAffectFlags flag, InheritMap map) { if (ShouldSkip (type.Namespace, map)) { return true; } foreach (TypeTester typeTester in skipTypes) { if ((typeTester.AffectFlags & flag) > 0 && typeTester.Test (type, map)) return true; } return false; }
public static AssemblyInfo FromXml(Project project, XmlReader reader, Variables vars) { Debug.Assert(reader.NodeType == XmlNodeType.Element && reader.Name == "Module"); AssemblyInfo info = new AssemblyInfo(project); // pull out the file attribute, but don't process anything empty string val = Helper.GetAttribute(reader, "file", vars); if (val.Length > 0) { info.LoadAssembly(val); if (AssemblyIsSigned(info.Definition) && project.Settings.KeyFile == null) { throw new ObfuscarException("Obfuscating a signed assembly would result in an invalid assembly: " + info.Name + "; use the KeyFile property to set a key to use"); } } else { throw new InvalidOperationException("Need valid file attribute."); } string isExcluded = Helper.GetAttribute(reader, "Exclude", vars); if ((isExcluded.Length > 0) && (isExcluded.ToLowerInvariant() == "true")) { info.Exclude = true; } if (!reader.IsEmptyElement) { while (reader.Read()) { if (reader.NodeType == XmlNodeType.Element) { string name = Helper.GetAttribute(reader, "name", vars); string rxStr = Helper.GetAttribute(reader, "rx"); Regex rx = null; if (!string.IsNullOrEmpty(rxStr)) { rx = new Regex(rxStr); } string isStaticStr = Helper.GetAttribute(reader, "static", vars); bool? isStatic = null; if (!string.IsNullOrEmpty(isStaticStr)) { isStatic = XmlConvert.ToBoolean(isStaticStr); } string isSerializableStr = Helper.GetAttribute(reader, "serializable", vars); bool? isSerializable = null; if (!string.IsNullOrEmpty(isSerializableStr)) { isSerializable = XmlConvert.ToBoolean(isSerializableStr); } string attrib = Helper.GetAttribute(reader, "attrib", vars); string inherits = Helper.GetAttribute(reader, "typeinherits", vars); string type = Helper.GetAttribute(reader, "type", vars); string typeattrib = Helper.GetAttribute(reader, "typeattrib", vars); switch (reader.Name) { case "SkipNamespace": if (rx != null) { info.skipNamespaces.Add(new NamespaceTester(rx)); } else { info.skipNamespaces.Add(new NamespaceTester(name)); } break; case "ForceNamespace": if (rx != null) { info.forceNamespaces.Add(new NamespaceTester(rx)); } else { info.forceNamespaces.Add(new NamespaceTester(name)); } break; case "SkipType": TypeAffectFlags skipFlags = TypeAffectFlags.SkipNone; val = Helper.GetAttribute(reader, "skipMethods", vars); if (val.Length > 0 && XmlConvert.ToBoolean(val)) { skipFlags |= TypeAffectFlags.AffectMethod; } val = Helper.GetAttribute(reader, "skipStringHiding", vars); if (val.Length > 0 && XmlConvert.ToBoolean(val)) { skipFlags |= TypeAffectFlags.SkipStringHiding; } val = Helper.GetAttribute(reader, "skipFields", vars); if (val.Length > 0 && XmlConvert.ToBoolean(val)) { skipFlags |= TypeAffectFlags.AffectField; } val = Helper.GetAttribute(reader, "skipProperties", vars); if (val.Length > 0 && XmlConvert.ToBoolean(val)) { skipFlags |= TypeAffectFlags.AffectProperty; } val = Helper.GetAttribute(reader, "skipEvents", vars); if (val.Length > 0 && XmlConvert.ToBoolean(val)) { skipFlags |= TypeAffectFlags.AffectEvent; } if (rx != null) { info.skipTypes.Add(new TypeTester(rx, skipFlags, attrib, inherits, isStatic, isSerializable)); } else { info.skipTypes.Add(new TypeTester(name, skipFlags, attrib, inherits, isStatic, isSerializable)); } break; case "ForceType": TypeAffectFlags forceFlags = TypeAffectFlags.SkipNone; val = Helper.GetAttribute(reader, "forceMethods", vars); if (val.Length > 0 && XmlConvert.ToBoolean(val)) { forceFlags |= TypeAffectFlags.AffectMethod; } val = Helper.GetAttribute(reader, "forceFields", vars); if (val.Length > 0 && XmlConvert.ToBoolean(val)) { forceFlags |= TypeAffectFlags.AffectField; } val = Helper.GetAttribute(reader, "forceProperties", vars); if (val.Length > 0 && XmlConvert.ToBoolean(val)) { forceFlags |= TypeAffectFlags.AffectProperty; } val = Helper.GetAttribute(reader, "forceEvents", vars); if (val.Length > 0 && XmlConvert.ToBoolean(val)) { forceFlags |= TypeAffectFlags.AffectEvent; } if (rx != null) { info.forceTypes.Add(new TypeTester(rx, forceFlags, attrib, inherits, isStatic, isSerializable)); } else { info.forceTypes.Add(new TypeTester(name, forceFlags, attrib, inherits, isStatic, isSerializable)); } break; case "SkipMethod": if (rx != null) { info.skipMethods.Add(new MethodTester(rx, type, attrib, typeattrib, inherits, isStatic)); } else { info.skipMethods.Add(new MethodTester(name, type, attrib, typeattrib, inherits, isStatic)); } break; case "ForceMethod": if (rx != null) { info.forceMethods.Add(new MethodTester(rx, type, attrib, typeattrib, inherits, isStatic)); } else { info.forceMethods.Add(new MethodTester(name, type, attrib, typeattrib, inherits, isStatic)); } break; case "SkipStringHiding": if (rx != null) { info.skipStringHiding.Add(new MethodTester(rx, type, attrib, typeattrib)); } else { info.skipStringHiding.Add(new MethodTester(name, type, attrib, typeattrib)); } break; case "SkipField": string decorator = Helper.GetAttribute(reader, "decorator", vars); if (rx != null) { info.skipFields.Add(new FieldTester(rx, type, attrib, typeattrib, inherits, decorator, isStatic, isSerializable)); } else { info.skipFields.Add(new FieldTester(name, type, attrib, typeattrib, inherits, decorator, isStatic, isSerializable)); } break; case "ForceField": string decorator1 = Helper.GetAttribute(reader, "decorator", vars); if (rx != null) { info.forceFields.Add(new FieldTester(rx, type, attrib, typeattrib, inherits, decorator1, isStatic, isSerializable)); } else { info.forceFields.Add(new FieldTester(name, type, attrib, typeattrib, inherits, decorator1, isStatic, isSerializable)); } break; case "SkipProperty": if (rx != null) { info.skipProperties.Add(new PropertyTester(rx, type, attrib, typeattrib)); } else { info.skipProperties.Add(new PropertyTester(name, type, attrib, typeattrib)); } break; case "ForceProperty": if (rx != null) { info.forceProperties.Add(new PropertyTester(rx, type, attrib, typeattrib)); } else { info.forceProperties.Add(new PropertyTester(name, type, attrib, typeattrib)); } break; case "SkipEvent": if (rx != null) { info.skipEvents.Add(new EventTester(rx, type, attrib, typeattrib)); } else { info.skipEvents.Add(new EventTester(name, type, attrib, typeattrib)); } break; case "ForceEvent": if (rx != null) { info.forceEvents.Add(new EventTester(rx, type, attrib, typeattrib)); } else { info.forceEvents.Add(new EventTester(name, type, attrib, typeattrib)); } break; } } else if (reader.NodeType == XmlNodeType.EndElement && reader.Name == "Module") { // hit end of module element...stop reading break; } } } return(info); }
public TypeTester(Regex nameRx, TypeAffectFlags skipFlags, string attrib) { this.nameRx = nameRx; this.skipFlags = skipFlags; this.attrib = attrib.ToLower(); }
public TypeTester(string name, TypeAffectFlags skipFlags, string attrib) { this.name = name; this.skipFlags = skipFlags; this.attrib = attrib.ToLower(); }