+2006-09-11 Andrew Skiba <andrews@mainsoft.com>
+
+ * XmlSchemaImporter.cs,XmlMemberMapping.cs,SchemaImporter.cs: ifdef
+ TARGET_JVM
+
+2006-09-05 Lluis Sanchez Gual <lluis@novell.com>
+
+ * XmlSchemaImporter.cs: In MS.NET 2.0, simple type arrays are mapped
+ to strings. Make sure maps returned by ImportClassSimpleType are always
+ simple type maps. All this fixes bug #77585.
+
+2006-09-05 Lluis Sanchez Gual <lluis@novell.com>
+
+ * XmlSchemaImporter.cs: Always import simple type unions
+ as string (like MS.NET does). Fixes bug #79234.
+
+2006-08-25 Kornél Pál <kornelpal@gmail.com>
+
+ * MapCodeGenerator.cs: Use assembly file version constants.
+
+2006-07-24 Atsushi Enomoto <atsushi@ximian.com>
+
+ * XmlMappingAccess.cs : new type in 2.0 RTM.
+ * XmlCodeExporter.cs, SoapCodeExporter.cs,
+ MapCodeGenerator.cs,
+ XmlSchemaImporter.cs, SoapSchemaImporter.cs, SchemaImporter.cs,
+ SchemaImporterExtension.cs, SchemaImporterExtensionCollection.cs,
+ XmlMemberMapping.cs, XmlSerializationReader.cs :
+ several 2.0 API fixes from betas to RTM.
+
+2006-06-07 Lluis Sanchez Gual <lluis@novell.com>
+
+ * XmlTypeMapMember.cs: Added GlobalIndex property.
+ * XmlTypeMapping.cs: When adding a member, initialize its GlobalIndex
+ property.
+ * SerializationCodeGenerator.cs:
+ * XmlSerializationWriterInterpreter.cs:
+ * XmlSerializationReaderInterpreter.cs: Use GlobalIndex instead of
+ Index to get/set the values from the input array, since some Index
+ values are shared between attribute and element members. Fixes
+ bug #78562.
+
+2006-05-30 Atsushi Enomoto <atsushi@ximian.com>
+
+ * SerializationCodeGenerator.cs,
+ XmlSerializerReaderInterpreter.cs : handle CDATA section as text
+ node. Fixed bug #78536.
+
+2006-05-15 Gert Driesen <drieseng@users.sourceforge.net>
+
+ * XmlCodeExporter.cs: Added bool argument to GenerateClass and
+ GenerateEnum methods that specifies whether we're dealing with a type
+ for a top-level element. In GenerateClass, do not always add Namespace
+ argument for XmlRootAttribute if isTopLevel is false, and do not
+ emit XmlRootAttribute if isTopLevel is false and no arguments have been
+ added.
+ * SoapCodeExporter.cs: Added bool argument to GenerateClass and
+ GenerateEnum methods.
+ * MapCodeGenerator.cs: Added bool argument to GenerateClass and
+ GenerateEnum methods.
+
+2006-05-03 Lluis Sanchez Gual <lluis@novell.com>
+
+ * SerializationCodeGenerator.cs: Allow generating serializer for
+ reading an XmlElement or XmlDocument as root element.
+ Properly generate jagged array creation.
+
+2006-04-28 Atsushi Enomoto <atsushi@ximian.com>
+
+ * XmlSerializationWriter.cs : fix cosmetic typo (bug #78228).
+
+2006-04-26 Gert Driesen <drieseng@users.sourceforge.net>
+
+ * SerializationCodeGenerator.cs: For flag enums, we should split on all
+ whitespace chars instead of only on blanks.
+ * XmlTypeMapping.cs: Same. Added ToEnum method for converting from
+ constant name(s) to integral enum value.
+
+2006-04-26 Gert Driesen <drieseng@users.sourceforge.net>
+
+ * SoapAttributes.cs: The DefaultValueAttribute.Value should be returned
+ as SoapDefaultValue instead of the attribute itself. Fixes bug #78205.
+
+2006-04-24 Gert Driesen <drieseng@users.sourceforge.net>
+
+ * XmlSchemaExporter.cs: Introduce XmlSchemaObjectContainer class to
+ allow XML Schema items to be added to its parent in the same order
+ as MS.NET (schema elements before complex types, ...).
+
+2006-04-20 Gert Driesen <drieseng@users.sourceforge.net>
+
+ * XmlCodeExporter.cs: On 2.0 profile, CodeGenerationOptions defaults to
+ GenerateProperties. Use full type name for XML serialization attributes
+ instead of shortcut (without Attribute suffix). Always add Namespace
+ argument for XmlRootAttribute on classes. Added IsNullable argument for
+ XmlRootRootAttribute on classes. For attribute members, only output
+ Form argument for XmlSchemaForm.Qualified. Use MapCodeGenerator base
+ ctor that takes CodeGenerationOptions.
+ * SoapCodeExporter.cs: Use MapCodeGenerator base ctor that takes
+ CodeGenerationOptions.
+ * MapCodeGenerator.cs: Added CodeGenerationOptions to ctor. On 2.0
+ profile, emit GeneratedCodeAttribute, SerializableAttribute,
+ DebuggerStepThroughAttribute and DesignerCategoryAttribute for classes.
+ To match MS.NET, emit attribute members before element members.
+ * XmlReflectionImporter.cs: Enums are never nullable.
+ * XmlSchemaImporter.cs: Set IsNullable on map using value of
+ XmlSchemaElement.IsNillable. Added LocateElement overload that takes
+ XmlSchemaElement.
+
+2006-04-15 Gert Driesen <drieseng@users.sourceforge.net>
+
+ * XmlSchemaImporter.cs: Make sure we pass TypeData for primitive types
+ to XmlReflectionImporter and SoapReflectionImporter to keep from
+ always ending up with the XSD type that directly maps to the CLR type.
+ * XmlReflectionImporter.cs: Added overloads taking TypeData instead of
+ Type. This improves performance by avoiding the use of
+ TypeTranslator.GetTypeData for types imported from a schema and fixes
+ bug #77907.
+ * SoapReflectionImporter.cs: Same.
+
+2006-04-11 Lluis Sanchez Gual <lluis@novell.com>
+
+ * XmlSchemas.cs: In 1.1, don't allow adding two schemas
+ with the same namespaces. This is allowed in 2.0. Fixed
+ the Find() method to cope with this case. Based on a patch
+ by David Jung.
+
+2006-03-22 Gert Driesen <drieseng@users.sourceforge.net>
+
+ * XmlReflectionImporter.cs: Throw NotSupportException instead of
+ InvalidOperationException (IOE) if void is specified as type in
+ ImportTypeMapping. To match MS.NET, surround importing of type in
+ try/catch block, and wrap any IOE in another IOE adding information
+ on the type that was being reflected. In CreateTypeMapping, surround
+ creating of map member in try/catch block, and wrap any IOE in another
+ IOE adding information on the member that was being reflected.
+ Modified exception message for missing enumeration value to match
+ MS.NET. In ImportTextElementInfo, throw IOE if Type is set in
+ XmlTextAttribute, and it differs from type of reflected member when
+ schema type of member is primitive or enum. Fixed bug #77591.
+
+2006-03-10 Gert Driesen <drieseng@users.sourceforge.net>
+
+ * XmlSchemaExporter.cs: Import namespace of schema generated for
+ non-xsd primitive. Do not set zero-length TargetNamespace to avoid
+ emitting empty targetNamespace attribute in generated schema.
+ * XmlReflectionImporter.cs: Use WSDL types namespace for non-xsd
+ primitives.
+
+2006-03-10 Gert Driesen <drieseng@users.sourceforge.net>
+
+ * XmlTypeMapping.cs: EnumMapMember now also stores value for enums.
+ Modified EnumMapping.GetXmlName to use XmlCustomFormatter to support
+ serialization of integral value to enum constant name, and made sure
+ the exceptions we throw match those of MSFT. In EnumMapping.GetEnumName
+ throw InvalidOperationException if no matching enum constant exists.
+ In EnumMap ctor, initialize arrays holding XML names, enum names and
+ enum values.
+ * XmlSerializationReaderInterpreter.cs: Pass full type name to
+ EnumMapping.GetEnumName for construction of exception message.
+ * XmlSerializer.cs: In Deserialize, wrap InvalidOperationException
+ and InvalidCastException in another InvalidOperationException to match
+ MSFT. In Serialize, wrap InvalidOperationException, InvalidCastException
+ and the inner exception for a TargetInvocationException in an
+ InvalidOperationException to match MSFT.
+ * SerializationCodeGenerator.cs: In GenerateGetXmlEnumValue, use
+ XmlCustomFormatter.FromEnum in order to also support serialization
+ integral value to enum constant name. In 2.0 profile, throw
+ InvalidOperationException if numeric value cannot be serialized into
+ an enum constant value. In GenerateSingleEnumValue, no longer attempt
+ to parse unknown constant value but instead report it as
+ InvalidOperationException. Use string.Length instead of "" comparison
+ to check whether a string is empty. Fixed compiler warnings in
+ generated code (possible empty statement).
+ * XmlSerializationWriterInterpreter.cs: Pass full type name to
+ EnumMap.GetXmlName.
+ * XmlSchemaImporter.cs: Pass full type name to EnumMap.GetEnumName
+ to allow it to be used in exception messages.
+ * XmlReflectionImporter.cs: Use FieldInfo instead of MemberInfo for
+ enum fields. Use IsDefined instead of GetCustomAttributes for checking
+ if a certain attribute is defined. Use integral value of enum constant
+ in EnumMapMember ctor.
+ * SoapReflectionImporter.cs: Use FieldInfo instead of MemberInfo for
+ enum fields. Use IsDefined instead of GetCustomAttributes for checking
+ if a certain attribute is defined. Use integral value of enum constant
+ in EnumMapMember ctor.
+
+2006-03-07 Lluis Sanchez Gual <lluis@novell.com>
+
+ * XmlReflectionImporter.cs: Ignore the element namespace if
+ the schema form is set to Unqualified. Fixes bug #75019.
+
+2006-02-22 Gert Driesen <drieseng@users.sourceforge.net>
+
+ * SerializationCodeGenerator.cs: Omit return statement in ReadObject
+ method if GenerateReadListElement returns null. Fixes bug #77588.
+
+2006-02-21 Lluis Sanchez Gual <lluis@novell.com>
+
+ * XmlSerializer.cs: Fix the previous fix.
+
+2006-02-21 Lluis Sanchez Gual <lluis@novell.com>
+
+ * XmlSerializer.cs: Added option to avoid falling back to the
+ interpreted serializer if the code generator fails. To be used
+ in the test suite.
+
+2006-02-16 Gert Driesen <drieseng@users.sourceforge.net>
+
+ * TypeData.cs: Fixed the following issues when dealing with Array
+ SchemaType:
+ - if a type implements IDictionary, throw a NotSupportedException
+ - if a type implements ICollection, then an Add method must exist
+ which takes a single argument of a type to which the listitem type
+ is assignable (meaning a base type or an interface that it
+ implements). If such a method does not exist, then throw an
+ InvalidOperationException.
+ - if a type implements IEnumerable, then the listitem type is
+ determined by the type of the Current property of the (IEnumerator)
+ type returned by the GetEnumerator() method or the private
+ implementation of IEnumerable.GetEnumerator(). If there's no
+ public Current property on the IEnumerator, then System.Object
+ is assumed as listitem type. Similar as for types implementing
+ ICollection, an Add method must exist which takes a single argument
+ of a type to which the listitem type is assignable (meaning a base
+ type or an interface that it implements). If such a method does not
+ exist, then throw an InvalidOperationException.
+
+2006-02-16 Lluis Sanchez Gual <lluis@novell.com>
+
+ * XmlSchemaImporter.cs: Support importing complex types with
+ simple content based on enums. Fixes bug #76848.
+
+2006-02-11 Gert Driesen <drieseng@users.sourceforge.net>
+
+ * SoapAttributeAttribute.cs: Set eol-style to CRLF.
+ * SoapElementAttribute.cs: Same.
+ * SoapEnumAttribute.cs: Same.
+ * SoapIncludeAttribute.cs: Same.
+ * SoapSchemaMember.cs: Same.
+ * SoapTypeAttribute.cs: Same.
+ * XmlArrayAttribute.cs: Same.
+ * XmlAttributeAttribute.cs: Same.
+ * XmlChoiceIdentifierAttribute.cs: Same.
+ * XmlElementAttribute.cs: Same.
+ * XmlEnumAttribute.cs: Same.
+ * XmlRootAttribute.cs: Same.
+ * XmlSchemaImporter.cs: Same.
+ * XmlTextAttribute.cs: Same.
+ * XmlTypeAttribute.cs: Same.
+ * XmlTypeMapping.cs: Same.
+ * SoapAttributeOverrides.cs: Fixed line endings. Set eol-style to CRLF.
+ * CodeIdentifiers.cs: Same.
+ * SoapCodeExporter.cs: Same.
+ * SoapAttributes.cs: Same.
+ * SoapIgnoreAttribute.cs: Same.
+ * SoapSchemaImporter.cs: Same.
+ * TypeMember.cs: Same.
+ * UnreferencedObjectEventArgs.cs: Same.
+ * XmlAnyAttributeAttribute.cs: Same.
+ * XmlAnyElementAttributes.cs: Same.
+ * XmlArrayItemAttributes.cs: Same.
+ * XmlAttributeEventArgs.cs: Same.
+ * XmlCodeExporter.cs: Same.
+ * XmlElementAttributes.cs: Same.
+ * XmlElementEventArgs.cs: Same.
+ * XmlIgnoreAttribute.cs: Same.
+ * XmlNamespaceDeclarationsAttribute.cs: Same.
+ * XmlNodeEventArgs.cs: Same.
+ * XmlReflectionMember.cs: Same.
+ * XmlSchemas.cs: Same.
+ * XmlSerializerNamespaces.cs: Same.
+ * XmlTypeMapMemberElement.cs: Set eol-style to native.
+
+2006-02-10 Gert Driesen <drieseng@users.sourceforge.net>
+
+ * CodeExporter.cs: Set eol-style to native.
+ * CodeGenerationOptions.cs: Same.
+ * CodeIdentifier.cs: Same.
+ * ImportContext.cs: Same.
+ * IXmlSerializable.cs: Same.
+ * IXmlSerializerImplementation.cs: Same.
+ * IXmlTextParser.cs: Same.
+ * MapCodeGenerator.cs: Same.
+ * ReflectionHelper.cs: Same. Fixed line endings.
+ * SchemaImporter.cs: Same.
+ * SchemaImporterExtensionCollection.cs: Same.
+ * SchemaImporterExtension.cs: Same.
+ * SchemaTypes.cs: Same.
+ * SerializationCodeGeneratorConfiguration.cs: Same.
+ * SerializationCodeGenerator.cs: Same.
+ * SerializationSource.cs: Same.
+ * SoapReflectionImporter.cs: Same.
+ * SoapSchemaExporter.cs: Same.
+ * TypeData.cs: Same.
+ * TypeTranslator.cs: Same.
+ * UnreferencedObjectEventHandler.cs: Same.
+ * XmlAnyElementAttribute.cs: Same.
+ * XmlArrayItemAttribute.cs: Same.
+ * XmlAttributeEventHandler.cs: Same.
+ * XmlAttributeOverrides.cs: Same.
+ * XmlAttributes.cs: Same.
+ * XmlDeserializationEvents.cs: Same.
+ * XmlElementEventHandler.cs: Same.
+ * XmlIncludeAttribute.cs: Same.
+ * XmlMapping.cs: Same.
+ * XmlMemberMapping.cs: Same.
+ * XmlMembersMapping.cs: Same.
+ * XmlNodeEventHandler.cs: Same.
+ * XmlReflectionImporter.cs: Same.
+ * XmlSchemaExporter.cs: Same.
+ * XmlSchemaProviderAttribute.cs: Same.
+ * XmlSerializationCollectionFixupCallback.cs: Same.
+ * XmlSerialiationFixupCallback.cs: Same.
+ * XmlSerializationGeneratedCode.cs: Same.
+ * XmlSerializationReadCallback.cs: Same.
+ * XmlSerializationReader.cs: Same.
+ * XmlSerializationReaderInterpreter.cs: Same.
+ * XmlSerializationWriteCallback.cs: Same.
+ * XmlSerializationWriterInterpreter.cs: Same.
+ * XmlSerializerAssemblyAttribute.cs: Same.
+ * XmlSerializer.cs: Same.
+ * XmlSerializerFactory.cs: Same.
+ * XmlSerializerVersionAttribute.cs: Same.
+ * XmlTypeMapElementInfo.cs: Same.
+ * XmlTypeMapMemberAttribute.cs: Same.
+ * XmlTypeMapMember.cs: Same.
+ * XmlTypeMapMemberNamespaces.cs: Same.
+
+2006-02-09 Gert Driesen <drieseng@users.sourceforge.net>
+
+ * XmlTypeMapping.cs: Modified GetRealTypeMap to return current map
+ if map represents enum. Fixes bug #77501.
+
+2006-02-09 Gert Driesen <drieseng@users.sourceforge.net>
+
+ * XmlSerializationWriter.cs: Implemented 2.0 version of FromEnum, and
+ CreateInvalidEnumValueException. Set eol-style to native.
+ * XmlCustomerFormatter.cs: Added FromEnum overload that takes name of
+ enum for which string value must be created. Set eol-style to native.
+ Modified FromEnum to behave more like MSFT's implementation:
+ - treat value as bit field.
+ - no longer return empty string if the value matches an id for which there's no corresponding
+ name.
+ - if one of the ids has value 0 and there's a match for the enum value
+ (with a zero length XML name) or the enum value is 0, then return the
+ corresponding XML for the id with value 0.
+ - in 2.0 profile, throw InvalidOperationException if no match is found
+ for (part of) the enum value.
+ Modifies ToEnum to match the MSFT implementation (as described in
+ .NET 2.0 SDK):
+ - Expect hashtable containing enum names as key, and corresponding
+ integral numbers as value.
+ - Do not report exception for whitespace-only value.
+ - Support space (MS docs are not clear about this) delimited list
+ of names.
+ - typeName is only used to construct exception message.
+
+2006-02-09 Lluis Sanchez Gual <lluis@novell.com>
+
+ * System.Xml.Serialization/XmlTypeMapMemberElement.cs: When
+ looking for the correct element definition for a member,
+ based on the value type, take into account subypes of the
+ declared types. Fixes bug #77447.
+
+2006-02-07 Konstantin Triger <kostat@mainsoft.com>
+
+ * XmlReflectionImporter.cs: remove local name encoding for enums.
+
+2006-01-08 Gert Driesen <drieseng@users.sourceforge.net>
+
+ * XmlSchemaImporter.cs: Fixed line endings (to CRLF).
+
+2006-01-07 Gert Driesen <drieseng@users.sourceforge.net>
+
+ * XmlTypeMapping.cs: Fixed line endings.
+ * TypeTranslator.cs: Fixed line endings.
+
+2005-12-07 Lluis Sanchez Gual <lluis@novell.com>
+
+ * XmlSerializationReaderInterpreter.cs: When deserializing a "flat"
+ collection, don't create a new collection if the property already has a
+ collection instance.
+ * SerializationCodeGenerator.cs: same as above. Also return an empty
+ string for flag enum default values.
+
+2005-12-06 Konstantin Triger <kostat@mainsoft.com>
+
+ * TypeTranslator.cs: TARGET_JVM: save additional types per AppDomain.
+
+2005-12-05 Lluis Sanchez Gual <lluis@novell.com>
+
+ * XmlSerializationReaderInterpreter.cs:
+ * SerializationCodeGenerator.cs: When deserializing a collection,
+ don't create a new collection if the property already has a
+ collection instance. This does not apply to arrays. Changed how nullabe
+ array properties are set. Setting IsNullable=false to the property means
+ that it won't be set if the read array is null (so, if the property
+ already has a value, it will be kept).
+ Another change is that can't never be null (only arrays can).
+
+2005-12-01 Lluis Sanchez Gual <lluis@novell.com>
+
+ * TypeTranslator.cs: In GetTypeData, if an xmlType is specified for
+ a cli array type, consider it refering to the type of array elements.
+ This fixes bug #76860. Also added some locking.
+
+2005-11-27 Konstantin Triger <kostat@mainsoft.com>
+
+ * TypeData.cs, XmlSchemaExporter.cs, TypeTranslator.cs: correctly
+ export non-xsd primitive types.
+
+2005-11-24 Vladimir Krasnov <vladimirk@mainsoft.com>
+
+ * XmlTypeMapping.cs: fixed GetXmlName method, added difference
+ of value serialization of flags and non-flags enums
+
+2005-11-23 Konstantin Triger <kostat@mainsoft.com>
+
+ * XmlSchemaExporter.cs: do not import empty namespaces.
+
+2005-11-17 Vladimir Krasnov <vladimirk@mainsoft.com>
+
+ * XmlSerializationReaderInterpreter.cs: fixed ReadEnumElement
+ method, ReadEndElement should check XmlNodeType.
+ * XmlTypeMapping.cs: fixed GetXmlName method, it should not
+ write zero as default enum value.
+
+2005-11-16 Vladimir Krasnov <vladimirk@mainsoft.com>
+
+ * XmlReflectionImporter.cs: fixed field order returned by
+ reflection in method GetReflectionMembers. TARGET_JVM only.
+
+2005-11-07 Lluis Sanchez Gual <lluis@novell.com>
+
+ * XmlSchemaImporter.cs: Added support for restrictions with
+ embedded simple type definitions.
+
+2005-11-04 Atsushi Enomoto <atsushi@ximian.com>
+
+ * XmlElementAttribute.cs : gimme Order; it fixes 100 or more
+ sys.xml.schema corcompare diffs.
+
+2005-10-17 Lluis Sanchez Gual <lluis@novell.com>
+
+ * SerializationCodeGenerator.cs:
+ * XmlSerializationWriterInterpreter.cs: Arrays of XmlNode don't
+ need to be all XmlElments. Fix by Atsushi for bug #76288.
+
+2005-09-26 Lluis Sanchez Gual <lluis@novell.com>
+
+ * XmlTypeMapping.cs: Added ChoiceMember to ListMap.
+ In ListMap.FindElement, take into account the ChoiceMember
+ if set.
+ * SerializationCodeGenerator.cs:
+ * XmlSerializationReaderInterpreter.cs: For lists with a choice
+ member, fill the member with the corresponding enum values.
+ * XmlReflectionImporter.cs: Properly reflect the choice member
+ when applied to a list.
+ * XmlSerializationWriterInterpreter.cs: Track class changes.
+ * XmlTypeMapMemberElement.cs: Added ChoiceTypeData property.
+ All this fixes bug #76203.
+
+2005-09-21 Lluis Sanchez Gual <lluis@novell.com>
+
+ * SoapReflectionImporter.cs: Check the correct defaults
+ for attributes.
+
+2005-09-21 Lluis Sanchez Gual <lluis@novell.com>
+
+ * SerializationSource.cs: Fix nullref.
+ * XmlReflectionImporter.cs: When registering a type using
+ IncludeType(), make sure it is added as a subtype and the
+ map for typeof(object) if it has already been imported.
+ Fixes bug #76049.
+
+2005-09-21 Lluis Sanchez Gual <lluis@novell.com>
+
+ * XmlSerializationWriter.cs: Also internally serialize
+ arrays of object (see previous change).
+
+2005-09-21 Lluis Sanchez Gual <lluis@novell.com>
+
+ * XmlSerializationWriter.cs: Properly serialize arrays
+ of primitive types when not explicitely specified in
+ a container class. Based on a patch by Konstantin Triger.
+ Fixes bug #75986.
+
+2005-08-24 Lluis Sanchez Gual <lluis@novell.com>
+
+ * TypeData.cs: Reset the hasPublicConstructor flag when the
+ type is an interface.
+ * XmlSerializationWriterInterpreter.cs: Get the Count property
+ from the object type instead of the property type (it didn't
+ work for IList).
+ * ReflectionHelper.cs: In CheckSerializableType, don't trow
+ if the type is a collection interface. All this fixes
+ bug #75855.
+
+2005-08-06 Lluis Sanchez Gual <lluis@novell.com>
+
+ * XmlTypeMapping.cs: Added null check.
+
+2005-08-05 Lluis Sanchez Gual <lluis@novell.com>
+
+ * XmlTypeMapping.cs: Added ListMembers property that returns
+ members which are collections.
+ * SerializationCodeGenerator.cs:
+ * XmlSerializationReaderInterpreter.cs: Initialize collection
+ members to an empty collection by default. Fixes bug #75662.
+
+2005-08-01 Gert Driesen <drieseng@users.sourceforge.net>
+
+ * XmlMapping.cs: API compatibility fixes. Ctor is not protected
+ in .NET 1.1. SetKey is not obsolete in .NET 2.0 Beta 2.
+
2005-07-31 Gert Driesen <drieseng@users.sourceforge.net>
* SoapAttributeAttribute.cs: Return zero-length string if