From: Rob M. <ro...@us...> - 2005-12-26 12:07:03
|
Update of /cvsroot/wix/wix/toolsrc/XsdGen In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv14145/toolsrc/XsdGen Modified Files: CodeDomInterfaces.cs ElementCollection.cs StronglyTypedClasses.cs XsdGen.cs Log Message: DerekC: Support a shorter syntax for specifying wix extensions on the command line. SBonev: Make PropertyRef extensible. DerekC: Update all internal WiX extensions to the latest "standards". DerekC: Lots of decompiler-related bug fixes: - warn when a table is decompiled as a custom table - Add decompiler support for the SecureObjects, ServiceConfig, ServiceControl, ServiceInstall, and XmlFile tables (and turn on the corresponding decompilation qtests) - Fix a canonicalization bug when extracting embedded cabinet files - Fix a dark and light bug related to showing the path to the temp working directory when binder or decompiler construction doesn't occur - Fix a problem with all extensions whereby each call to get a particular extension-type (like a CompilerExtension) would return a new instance of that extension instead of one - Move the User, UserGroup, and Group table definitions over to the sca extension where they belong (from the WiX core) - Setup the infrastructure for the ScaDecompiler extension - Rename the ScaExt project to ScaExtension to match other extensions - Fix an error message in the compilation of CustomTables - Remove unused code from the compilation of the ServiceInstall elements - Fix a bug in the linker related to handing of null values in the CustomTable support DerekC: Random decompiler and light fixes: - Fix decompilation of sequence tables when there are sequence number collisions - Read the dark option for suppressing relative action sequencing from the "sras" option instead of the "srs" option - Fix a decompilation bug with ensuring empty custom tables - Fix a binder bug with setting different compression levels on multiple cabinet files - Fix a binder bug with honoring the supress assemblies and suppress gathering file hash/version/language/size information options - Simplify the fix for the notidy option in light and dark - Implement decompilation for the ExecuteAction and InstallAdminPackage actions - Make the decompiler switch to absolute sequencing mode when it detect any action that will require absolute sequencing (this ensures that absolutely sequenced actions will always be in the proper locations in the final output). In real usage, this means that the AppSearch action will often trigger absolute sequencing mode - but its better to be safe then try to minimize authoring DerekC: Implement decompiler support for patch creation (pcp) files. DerekC: Embed the serverca binary wixlib file inside its extension (and add the necessary functionality to the WiX toolset to support completely self-contained extensions). DerekC: Stop nesting the Binary element inside the serverca schema and fix a recent regression with serverca error messages throwing an exception. DerekC: Add decompiler support for the remaining merge module tables ModuleAdvtUISequence, ModuleConfiguration, ModuleDependency, ModuleIgnoreTable, and ModuleSubstitution. Add compiler support for the ModuleIgnoreTable table. Fix a bug in the compiler for parsing of the ModuleDependency table. DerekC: Add support for hard-coding the Feature.Display column's value. Don't allow features to be simultaneously nested under a Product element and another element since a feature can only have one parent feature (or none). RGustin: Add MMC Snap-In registration extension. Move Compiler.GenerateIdentifier to CompilerCore.GenerateIdentifier to make it available to extensions. RobMen: Allow MsiAssembly table to be suppressed using -sma switch to light. BobArnso: Add back the ProgressText (ActionText) and Error loc strings; enabled their use by adding UIRef/@Id="WixUI_ErrorProgressText" to your source. ScotK: 4 ServerCA related fixes: - Fixing compiler support for rollback actions on SqlScript and SqlStrings. - Cleaning up usage of defines from Server CAs. - Adding support for RollbackOnReinstall support to compiler since CAs already supported it. - BREAKING CHANGE: Changed casing of ExecuteOnReInstall to ExecuteOnReinstall for SqlScript and SqlString. RobMen: Generate caerr.wxi Index: ElementCollection.cs =================================================================== RCS file: /cvsroot/wix/wix/toolsrc/XsdGen/ElementCollection.cs,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** ElementCollection.cs 9 Sep 2005 22:27:29 -0000 1.2 --- ElementCollection.cs 26 Dec 2005 12:06:24 -0000 1.3 *************** *** 77,80 **** --- 77,81 ---- /// Gets the type of collection. /// </summary> + /// <value>The type of collection.</value> public CollectionType Type { *************** *** 85,88 **** --- 86,90 ---- /// Gets the count of child elements in this collection (counts ISchemaElements, not nested collections). /// </summary> + /// <value>The count of child elements in this collection (counts ISchemaElements, not nested collections).</value> public int Count { *************** *** 91,96 **** /// <summary> ! /// Flag specifying whether this collection is synchronized. Always returns false. /// </summary> public bool IsSynchronized { --- 93,99 ---- /// <summary> ! /// Gets the flag specifying whether this collection is synchronized. Always returns false. /// </summary> + /// <value>The flag specifying whether this collection is synchronized. Always returns false.</value> public bool IsSynchronized { *************** *** 99,104 **** /// <summary> ! /// Returns an object external callers can synchronize on. /// </summary> public object SyncRoot { --- 102,108 ---- /// <summary> ! /// Gets an object external callers can synchronize on. /// </summary> + /// <value>An object external callers can synchronize on.</value> public object SyncRoot { *************** *** 305,309 **** /// </summary> /// <param name="collectionItem">CollectionItem representing the type to add.</param> ! internal void AddItem(CollectionItem collectionItem) { this.items.Add(collectionItem); --- 309,313 ---- /// </summary> /// <param name="collectionItem">CollectionItem representing the type to add.</param> ! public void AddItem(CollectionItem collectionItem) { this.items.Add(collectionItem); *************** *** 314,318 **** /// </summary> /// <param name="collection">ElementCollection to add.</param> ! internal void AddCollection(ElementCollection collection) { this.items.Add(collection); --- 318,322 ---- /// </summary> /// <param name="collection">ElementCollection to add.</param> ! public void AddCollection(ElementCollection collection) { this.items.Add(collection); *************** *** 323,327 **** /// has subclasses for choice and sequence (which can do cardinality checks). /// </summary> ! internal abstract class CollectionItem { private Type elementType; --- 327,331 ---- /// has subclasses for choice and sequence (which can do cardinality checks). /// </summary> ! public abstract class CollectionItem { private Type elementType; *************** *** 349,353 **** /// Gets the elements of this collection. /// </summary> ! internal ArrayList Elements { get { return this.elements; } --- 353,357 ---- /// Gets the elements of this collection. /// </summary> ! public ArrayList Elements { get { return this.elements; } *************** *** 401,405 **** /// Class representing a choice item. Doesn't do cardinality checks. /// </summary> ! internal class ChoiceItem : CollectionItem { /// <summary> --- 405,409 ---- /// Class representing a choice item. Doesn't do cardinality checks. /// </summary> ! public class ChoiceItem : CollectionItem { /// <summary> *************** *** 415,419 **** /// Class representing a sequence item. Can do cardinality checks, if required. /// </summary> ! internal class SequenceItem : CollectionItem { private int minimum = 1; --- 419,423 ---- /// Class representing a sequence item. Can do cardinality checks, if required. /// </summary> ! public class SequenceItem : CollectionItem { private int minimum = 1; *************** *** 476,480 **** } ! throw new ApplicationException(String.Format( CultureInfo.InvariantCulture, "Element of type {0} found in enumerator. Must be ChoiceItem or SequenceItem.", --- 480,484 ---- } ! throw new InvalidOperationException(String.Format( CultureInfo.InvariantCulture, "Element of type {0} found in enumerator. Must be ChoiceItem or SequenceItem.", Index: CodeDomInterfaces.cs =================================================================== RCS file: /cvsroot/wix/wix/toolsrc/XsdGen/CodeDomInterfaces.cs,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** CodeDomInterfaces.cs 7 Nov 2005 22:47:36 -0000 1.1 --- CodeDomInterfaces.cs 26 Dec 2005 12:06:23 -0000 1.2 *************** *** 1,4 **** //------------------------------------------------------------------------------------------------- ! // <copyright file="CodeDomeInterfaces.cs" company="Microsoft"> // Copyright (c) Microsoft Corporation. All rights reserved. // --- 1,4 ---- //------------------------------------------------------------------------------------------------- ! // <copyright file="CodeDomInterfaces.cs" company="Microsoft"> // Copyright (c) Microsoft Corporation. All rights reserved. // *************** *** 45,48 **** --- 45,49 ---- /// Gets an enumerable collection of the children of this element. /// </summary> + /// <value>An enumerable collection of the children of this element.</value> IEnumerable Children { *************** *** 54,57 **** --- 55,59 ---- /// by the passed in type. /// </summary> + /// <param name="childType">The type of children to retrieve.</param> IEnumerable this[Type childType] { *************** *** 75,79 **** /// Interface for generated schema elements. Implemented by classes with attributes. /// </summary> ! internal interface ISetAttributes { /// <summary> --- 77,81 ---- /// Interface for generated schema elements. Implemented by classes with attributes. /// </summary> ! public interface ISetAttributes { /// <summary> *************** *** 89,93 **** /// Interface for generated schema elements. Implemented by classes with children. /// </summary> ! internal interface ICreateChildren { /// <summary> --- 91,95 ---- /// Interface for generated schema elements. Implemented by classes with children. /// </summary> ! public interface ICreateChildren { /// <summary> Index: XsdGen.cs =================================================================== RCS file: /cvsroot/wix/wix/toolsrc/XsdGen/XsdGen.cs,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** XsdGen.cs 9 Sep 2005 22:27:29 -0000 1.2 --- XsdGen.cs 26 Dec 2005 12:06:24 -0000 1.3 *************** *** 37,40 **** --- 37,41 ---- private string outFile; private string outputNamespace; + private string commonNamespace; private bool showHelp; *************** *** 50,54 **** if (this.showHelp) { ! Console.WriteLine("usage: XsdGen.exe <schema>.xsd <outputFile> <namespace>"); return; } --- 51,55 ---- if (this.showHelp) { ! Console.WriteLine("usage: XsdGen.exe <schema>.xsd <outputFile> <namespace> [<commonNamespace>]"); return; } *************** *** 66,70 **** } ! CodeCompileUnit codeCompileUnit = StronglyTypedClasses.Generate(document, this.outputNamespace); using (CSharpCodeProvider codeProvider = new CSharpCodeProvider()) --- 67,71 ---- } ! CodeCompileUnit codeCompileUnit = StronglyTypedClasses.Generate(document, this.outputNamespace, this.commonNamespace); using (CSharpCodeProvider codeProvider = new CSharpCodeProvider()) *************** *** 127,130 **** --- 128,136 ---- this.outFile = args[1]; this.outputNamespace = args[2]; + + if (args.Length >= 4) + { + this.commonNamespace = args[3]; + } } } Index: StronglyTypedClasses.cs =================================================================== RCS file: /cvsroot/wix/wix/toolsrc/XsdGen/StronglyTypedClasses.cs,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -d -r1.4 -r1.5 *** StronglyTypedClasses.cs 5 Dec 2005 22:52:46 -0000 1.4 --- StronglyTypedClasses.cs 26 Dec 2005 12:06:24 -0000 1.5 *************** *** 52,57 **** /// <param name="xmlSchema">Schema document to generate classes for.</param> /// <param name="generateNamespace">Namespace to be used for the generated code.</param> /// <returns>A fully populated CodeCompileUnit, which can be serialized in the language of choice.</returns> ! public static CodeCompileUnit Generate(XmlSchema xmlSchema, string generateNamespace) { if (xmlSchema == null) --- 52,59 ---- /// <param name="xmlSchema">Schema document to generate classes for.</param> /// <param name="generateNamespace">Namespace to be used for the generated code.</param> + /// <param name="commonNamespace">Namespace in which to find common classes and interfaces, + /// like ISchemaElement.</param> /// <returns>A fully populated CodeCompileUnit, which can be serialized in the language of choice.</returns> ! public static CodeCompileUnit Generate(XmlSchema xmlSchema, string generateNamespace, string commonNamespace) { if (xmlSchema == null) *************** *** 74,85 **** codeNamespace.Imports.Add(new CodeNamespaceImport("System.Globalization")); codeNamespace.Imports.Add(new CodeNamespaceImport("System.Xml")); simpleTypeNamesToClrTypeNames.Add("dateTime", "DateTime"); - simpleTypeNamesToClrTypeNames.Add("uint", "uint"); - simpleTypeNamesToClrTypeNames.Add("int", "int"); simpleTypeNamesToClrTypeNames.Add("integer", "int"); simpleTypeNamesToClrTypeNames.Add("NMTOKEN", "string"); - simpleTypeNamesToClrTypeNames.Add("nonNegativeInteger", "uint"); simpleTypeNamesToClrTypeNames.Add("string", "string"); simpleTypeNamesToClrTypeNames.Add("boolean", "bool"); simpleTypeNamesToClrTypeNames.Add("bool", "bool"); --- 76,98 ---- codeNamespace.Imports.Add(new CodeNamespaceImport("System.Globalization")); codeNamespace.Imports.Add(new CodeNamespaceImport("System.Xml")); + if (commonNamespace != null) + { + codeNamespace.Imports.Add(new CodeNamespaceImport(commonNamespace)); + } + // + // NOTE: This hash table serves double duty so be sure to have the XSD + // type name mapped to the CLR type name *and* the CLR type name + // mapped to the same CLR type name. Look at long and bool for + // examples below (and before you ask, no I don't know why DateTime + // just works). + // simpleTypeNamesToClrTypeNames.Add("dateTime", "DateTime"); simpleTypeNamesToClrTypeNames.Add("integer", "int"); + simpleTypeNamesToClrTypeNames.Add("int", "int"); simpleTypeNamesToClrTypeNames.Add("NMTOKEN", "string"); simpleTypeNamesToClrTypeNames.Add("string", "string"); + simpleTypeNamesToClrTypeNames.Add("nonNegativeInteger", "long"); + simpleTypeNamesToClrTypeNames.Add("long", "long"); simpleTypeNamesToClrTypeNames.Add("boolean", "bool"); simpleTypeNamesToClrTypeNames.Add("bool", "bool"); *************** *** 779,783 **** break; case "int": ! case "uint": if (nestedContent) { --- 792,796 ---- break; case "int": ! case "long": if (nestedContent) { *************** *** 924,929 **** return typeof(bool); case "int": - case "uint": return typeof(int); case "string": return typeof(string); --- 937,943 ---- return typeof(bool); case "int": return typeof(int); + case "long": + return typeof(long); case "string": return typeof(string); |