protected virtual void ComputeIndexerName ()
{
if (indexers == null)
return;
string class_indexer_name = null;
//
// If there's both an explicit and an implicit interface implementation, the
// explicit one actually implements the interface while the other one is just
// a normal indexer. See bug #37714.
//
// Invariant maintained by AddIndexer(): All explicit interface indexers precede normal indexers
foreach (Indexer i in indexers) {
if (i.InterfaceType != null) {
if (seen_normal_indexers)
throw new Exception ("Internal Error: 'Indexers' array not sorted properly.");
continue;
}
seen_normal_indexers = true;
if (class_indexer_name == null) {
class_indexer_name = i.ShortName;
continue;
}
if (i.ShortName != class_indexer_name)
Report.Error (668, i.Location, "Two indexers have different names; the IndexerName attribute must be used with the same name on every indexer within a type");
}
if (class_indexer_name != null)
indexer_name = class_indexer_name;
}