示例#1
0
        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;
 }