Author: jbevain
Date: 2007-11-21 06:45:28 -0500 (Wed, 21 Nov 2007)
New Revision: 90073
Modified:
trunk/mcs/tools/linker/ChangeLog
trunk/mcs/tools/linker/Mono.Linker.Steps/ResolveFromXmlStep.cs
Log:
2007-11-21 Jb Evain <[EMAIL PROTECTED]>
* Mono.Linker.Steps/ResolveFromXmlStep.cs:
Implement resolving from xml patterns.
Modified: trunk/mcs/tools/linker/ChangeLog
===================================================================
--- trunk/mcs/tools/linker/ChangeLog 2007-11-21 11:43:43 UTC (rev 90072)
+++ trunk/mcs/tools/linker/ChangeLog 2007-11-21 11:45:28 UTC (rev 90073)
@@ -1,3 +1,8 @@
+2007-11-21 Jb Evain <[EMAIL PROTECTED]>
+
+ * Mono.Linker.Steps/ResolveFromXmlStep.cs:
+ Implement resolving from xml patterns.
+
2007-10-25 Jb Evain <[EMAIL PROTECTED]>
* monolinker.exe.sources
Modified: trunk/mcs/tools/linker/Mono.Linker.Steps/ResolveFromXmlStep.cs
===================================================================
--- trunk/mcs/tools/linker/Mono.Linker.Steps/ResolveFromXmlStep.cs
2007-11-21 11:43:43 UTC (rev 90072)
+++ trunk/mcs/tools/linker/Mono.Linker.Steps/ResolveFromXmlStep.cs
2007-11-21 11:45:28 UTC (rev 90073)
@@ -30,6 +30,7 @@
using System;
using SR = System.Reflection;
using System.Text;
+using System.Text.RegularExpressions;
using System.Xml.XPath;
using Mono.Cecil;
@@ -93,32 +94,65 @@
while (iterator.MoveNext ()) {
XPathNavigator nav = iterator.Current;
string fullname = GetFullName (nav);
+
+ if (IsTypePattern (fullname)) {
+ ProcessTypePattern (fullname, assembly,
nav);
+ continue;
+ }
+
TypeDefinition type = assembly.MainModule.Types
[fullname];
if (type == null)
continue;
- TypePreserve preserve = GetTypePreserve (nav);
+ ProcessType (type, nav);
+ }
+ }
- if (!IsRequired (nav)) {
- Annotations.SetPreserve (type,
preserve);
+ static bool IsTypePattern (string fullname)
+ {
+ return fullname.IndexOf ("*") != -1;
+ }
+
+ static Regex CreateRegexFromPattern (string pattern)
+ {
+ return new Regex (pattern.Replace(".",
@"\.").Replace("*", "(.*)"));
+ }
+
+ void ProcessTypePattern (string fullname, AssemblyDefinition
assembly, XPathNavigator nav)
+ {
+ Regex regex = CreateRegexFromPattern (fullname);
+
+ foreach (TypeDefinition type in
assembly.MainModule.Types) {
+ if (!regex.Match (type.FullName).Success)
continue;
- }
- Annotations.Mark (type);
+ ProcessType (type, nav);
+ }
+ }
- switch (preserve) {
- case TypePreserve.Nothing:
- if (nav.HasChildren) {
- MarkSelectedFields (nav, type);
- MarkSelectedMethods (nav, type);
- } else
- Annotations.SetPreserve (type,
TypePreserve.All);
- break;
- default:
- Annotations.SetPreserve (type,
preserve);
- break;
- }
+ void ProcessType (TypeDefinition type, XPathNavigator nav)
+ {
+ TypePreserve preserve = GetTypePreserve (nav);
+
+ if (!IsRequired (nav)) {
+ Annotations.SetPreserve (type, preserve);
+ return;
}
+
+ Annotations.Mark (type);
+
+ switch (preserve) {
+ case TypePreserve.Nothing:
+ if (nav.HasChildren) {
+ MarkSelectedFields (nav, type);
+ MarkSelectedMethods (nav, type);
+ } else
+ Annotations.SetPreserve (type,
TypePreserve.All);
+ break;
+ default:
+ Annotations.SetPreserve (type, preserve);
+ break;
+ }
}
void MarkSelectedFields (XPathNavigator nav, TypeDefinition
type)
_______________________________________________
Mono-patches maillist - [email protected]
http://lists.ximian.com/mailman/listinfo/mono-patches