private void ReportNameCollisionAndRename(GlobalFieldDefinition globalField, GlobalFieldDefinition laterField, int position) { Contract.Requires(globalField != null); Contract.Requires(laterField != null); laterField.Name = this.host.NameTable.GetNameFor(laterField.Name.Value + "``" + position); this.host.ReportError(new ErrorMessage() { Code = 2, ErrorReporter = this, Error = MergeError.DuplicateGlobalField, MessageParameter = MemberHelper.GetMemberSignature(globalField, NameFormattingOptions.Signature), }); }
FieldDefinition CreateGlobalField( uint fieldDefRowId ) { Debug.Assert(fieldDefRowId > 0 && fieldDefRowId <= this.PEFileReader.FieldTable.NumberOfRows); FieldRow fieldRow = this.PEFileReader.FieldTable[fieldDefRowId]; string fieldNameStr = this.PEFileReader.StringStream[fieldRow.Name]; IName fieldTypeMembName = this.NameTable.GetNameFor(fieldNameStr); int lastDot = fieldNameStr.LastIndexOf('.'); Namespace containingNamespace; if (lastDot <= 0) { // .cctor etc should be preserved. Thus not == -1... containingNamespace = this.RootModuleNamespace; } else { string namespacePrefix = fieldNameStr.Substring(0, lastDot); containingNamespace = this.GetNamespaceForString(namespacePrefix); fieldNameStr = fieldNameStr.Substring(lastDot + 1, fieldNameStr.Length - lastDot - 1); } IName globalFieldName = this.NameTable.GetNameFor(fieldNameStr); GlobalFieldDefinition globalField = new GlobalFieldDefinition(this, fieldTypeMembName, this._Module_, fieldDefRowId, fieldRow.Flags, globalFieldName, containingNamespace); if (fieldTypeMembName.UniqueKey != this.ModuleReader._Deleted_.UniqueKey) { this._Module_.AddMember(globalField); containingNamespace.AddMember(globalField); } return globalField; }