From: Gert D. <dri...@us...> - 2008-08-18 11:30:26
|
Update of /cvsroot/nant/nant/src/NAnt.Core In directory sc8-pr-cvs16.sourceforge.net:/tmp/cvs-serv18721 Modified Files: ConsoleDriver.cs FrameworkInfo.cs Project.cs Log Message: Project.cs: Added GetFrameworks method for retrieving a filtered list of FrameworkInfo instances. ConsoleDriver.cs: Use Project.GetFrameworks to get list of installed frameworks. Moved FrameworkNameComparer to FrameworkInfo. FrameworkInfo.cs: Added ClrType and NameComparer was added (moved from ConsoleDriver). Index: ConsoleDriver.cs =================================================================== RCS file: /cvsroot/nant/nant/src/NAnt.Core/ConsoleDriver.cs,v retrieving revision 1.55 retrieving revision 1.56 diff -C2 -d -r1.55 -r1.56 *** ConsoleDriver.cs 7 Oct 2007 18:03:47 -0000 1.55 --- ConsoleDriver.cs 18 Aug 2008 11:30:05 -0000 1.56 *************** *** 165,184 **** Console.Error.WriteLine(); ! if (project.Frameworks.Count == 0) { Console.Error.WriteLine("There are no supported frameworks available on your system."); } else { - ArrayList frameworks = new ArrayList(project.Frameworks.Count); - frameworks.AddRange(project.Frameworks.Values); - frameworks.Sort(new FrameworkNameComparer()); - Console.Error.WriteLine("Possible values include:"); // insert empty line Console.Error.WriteLine(); ! foreach (FrameworkInfo fi in frameworks) { ! if (fi.IsValid) { ! Console.Error.WriteLine("{0} ({1})", ! fi.Name, fi.Description); ! } } } --- 165,181 ---- Console.Error.WriteLine(); ! FrameworkInfo[] installedFrameworks = project.GetFrameworks( ! FrameworkTypes.Installed); ! ! if (installedFrameworks.Length == 0) { Console.Error.WriteLine("There are no supported frameworks available on your system."); } else { Console.Error.WriteLine("Possible values include:"); // insert empty line Console.Error.WriteLine(); ! foreach (FrameworkInfo fi in installedFrameworks) { ! Console.Error.WriteLine("{0} ({1})", ! fi.Name, fi.Description); } } *************** *** 589,602 **** #endregion Private Static Fields - - private class FrameworkNameComparer : IComparer { - public int Compare(object x, object y) { - FrameworkInfo fix = x as FrameworkInfo; - FrameworkInfo fiy = y as FrameworkInfo; - - return string.Compare(fix.Name, fiy.Name,false, CultureInfo.InvariantCulture); - } - } - } } --- 586,589 ---- Index: FrameworkInfo.cs =================================================================== RCS file: /cvsroot/nant/nant/src/NAnt.Core/FrameworkInfo.cs,v retrieving revision 1.29 retrieving revision 1.30 diff -C2 -d -r1.29 -r1.30 *** FrameworkInfo.cs 1 Jun 2008 13:37:41 -0000 1.29 --- FrameworkInfo.cs 18 Aug 2008 11:30:07 -0000 1.30 *************** *** 19,22 **** --- 19,23 ---- using System; + using System.Collections; using System.Globalization; using System.IO; *************** *** 45,48 **** --- 46,50 ---- private Version _version; private Version _clrVersion; + private ClrType _clrType; private DirectoryInfo _frameworkDirectory; private DirectoryInfo _sdkDirectory; *************** *** 97,100 **** --- 99,103 ---- _description = info.GetString("Description"); _status = (InitStatus) info.GetValue("Status", typeof(InitStatus)); + _clrType = (ClrType) info.GetValue("ClrType", typeof(ClrType)); if (_status != InitStatus.Valid) { return; *************** *** 121,124 **** --- 124,128 ---- info.AddValue("Family", Family); info.AddValue("Description", Description); + info.AddValue("ClrType", ClrType); if (IsValid) { info.AddValue("Version", Version); *************** *** 227,230 **** --- 231,248 ---- /// <summary> + /// Gets the CLR type of the framework. + /// </summary> + /// <value> + /// The CLR type of the framework. + /// </value> + /// <exception cref="ArgumentException">The framework is not valid.</exception> + internal ClrType ClrType { + get { + Init(); + return _clrType; + } + } + + /// <summary> /// Gets the Visual Studio version that corresponds with this /// framework. *************** *** 529,532 **** --- 547,560 ---- #endregion Private Instance Properties + #region Internal Static Properties + + internal static IComparer NameComparer { + get { + return new FrameworkNameComparer (); + } + } + + #endregion Internal Static Properties + #region Public Instance Methods *************** *** 727,730 **** --- 755,771 ---- } + string clrType = GetXmlAttributeValue(_frameworkNode, "clrtype"); + if (clrType == null) { + throw new ArgumentException("The \"clrtype\" attribute " + + "does not exist, or has no value."); + } + + try { + _clrType = (ClrType) Enum.Parse(typeof (ClrType), clrType, true); + } catch (Exception ex) { + throw new ArgumentException("The value of the \"clrtype\" " + + "attribute is not valid.", ex); + } + _project = frameworkProject; _status = InitStatus.Initialized; *************** *** 773,776 **** --- 814,832 ---- Valid } + + private class FrameworkNameComparer : IComparer { + public int Compare(object x, object y) { + FrameworkInfo fix = x as FrameworkInfo; + FrameworkInfo fiy = y as FrameworkInfo; + + return string.Compare(fix.Name, fiy.Name,false, CultureInfo.InvariantCulture); + } + } + } + + public enum ClrType { + Desktop, + Compact, + Browser } } Index: Project.cs =================================================================== RCS file: /cvsroot/nant/nant/src/NAnt.Core/Project.cs,v retrieving revision 1.91 retrieving revision 1.92 diff -C2 -d -r1.91 -r1.92 *** Project.cs 13 Dec 2007 20:35:28 -0000 1.91 --- Project.cs 18 Aug 2008 11:30:10 -0000 1.92 *************** *** 24,27 **** --- 24,28 ---- using System.Collections; using System.Collections.Specialized; + using System.ComponentModel; using System.Configuration; using System.Globalization; *************** *** 444,447 **** --- 445,515 ---- /// <summary> + /// Gets the list of supported frameworks filtered by the specified + /// <see cref="FrameworkTypes" /> parameter. + /// </summary> + /// <param name="types">A bitwise combination of <see cref="FrameworkTypes" /> values that filter the frameworks to retrieve.</param> + /// <returns> + /// An array of type <see cref="FrameworkInfo" /> that contains the + /// frameworks specified by the <paramref name="types" /> parameter, + /// sorted on name. + /// </returns> + internal FrameworkInfo[] GetFrameworks (FrameworkTypes types) { + ArrayList matches = new ArrayList(Frameworks.Count); + + foreach (FrameworkInfo framework in Frameworks.Values) { + if ((types & FrameworkTypes.InstallStateMask) != 0) { + if (framework.IsValid && (types & FrameworkTypes.Installed) == 0) + continue; + } + + if ((types & FrameworkTypes.DeviceMask) != 0) { + switch (framework.ClrType) { + case ClrType.Compact: + if ((types & FrameworkTypes.Compact) == 0) + continue; + break; + case ClrType.Desktop: + if ((types & FrameworkTypes.Desktop) == 0) + continue; + break; + case ClrType.Browser: + if ((types & FrameworkTypes.Browser) == 0) + continue; + break; + default: + throw new NotSupportedException(string.Format( + CultureInfo.InvariantCulture, "CLR type '{0}'" + + " is not supported.", framework.ClrType)); + } + } + + if ((types & FrameworkTypes.VendorMask) != 0) { + switch (framework.Family) { + case "mono": + if ((types & FrameworkTypes.Mono) == 0) + continue; + break; + case "net": + if ((types & FrameworkTypes.MS) == 0) + continue; + break; + default: + throw new NotSupportedException(string.Format( + CultureInfo.InvariantCulture, "Framework family " + + "'{0}' is not supported.", framework.Family)); + } + } + + matches.Add(framework); + } + + matches.Sort(FrameworkInfo.NameComparer); + + FrameworkInfo[] frameworks = new FrameworkInfo[matches.Count]; + matches.CopyTo(frameworks); + return frameworks; + } + + /// <summary> /// Gets the framework in which NAnt is currently running. /// </summary> |