internal SymbolEquivalenceComparer( IEqualityComparer <IAssemblySymbol> assemblyComparerOpt, bool distinguishRefFromOut, bool tupleNamesMustMatch) { _assemblyComparerOpt = assemblyComparerOpt; _tupleNamesMustMatch = tupleNamesMustMatch; this.ParameterEquivalenceComparer = new ParameterSymbolEqualityComparer(this, distinguishRefFromOut); this.SignatureTypeEquivalenceComparer = new SignatureTypeSymbolEquivalenceComparer(this); // There are only so many EquivalenceVisitors and GetHashCodeVisitors we can have. // Create them all up front. var equivalenceVisitorsBuilder = ImmutableArray.CreateBuilder <EquivalenceVisitor>(); equivalenceVisitorsBuilder.Add(new EquivalenceVisitor(this, compareMethodTypeParametersByIndex: true, objectAndDynamicCompareEqually: true)); equivalenceVisitorsBuilder.Add(new EquivalenceVisitor(this, compareMethodTypeParametersByIndex: true, objectAndDynamicCompareEqually: false)); equivalenceVisitorsBuilder.Add(new EquivalenceVisitor(this, compareMethodTypeParametersByIndex: false, objectAndDynamicCompareEqually: true)); equivalenceVisitorsBuilder.Add(new EquivalenceVisitor(this, compareMethodTypeParametersByIndex: false, objectAndDynamicCompareEqually: false)); _equivalenceVisitors = equivalenceVisitorsBuilder.ToImmutable(); var getHashCodeVisitorsBuilder = ImmutableArray.CreateBuilder <GetHashCodeVisitor>(); getHashCodeVisitorsBuilder.Add(new GetHashCodeVisitor(this, compareMethodTypeParametersByIndex: true, objectAndDynamicCompareEqually: true)); getHashCodeVisitorsBuilder.Add(new GetHashCodeVisitor(this, compareMethodTypeParametersByIndex: true, objectAndDynamicCompareEqually: false)); getHashCodeVisitorsBuilder.Add(new GetHashCodeVisitor(this, compareMethodTypeParametersByIndex: false, objectAndDynamicCompareEqually: true)); getHashCodeVisitorsBuilder.Add(new GetHashCodeVisitor(this, compareMethodTypeParametersByIndex: false, objectAndDynamicCompareEqually: false)); _getHashCodeVisitors = getHashCodeVisitorsBuilder.ToImmutable(); }
private SymbolEquivalenceComparer(bool assembliesCanDiffer) { _assembliesCanDiffer = assembliesCanDiffer; this.ParameterEquivalenceComparer = new ParameterSymbolEqualityComparer(this); this.SignatureTypeEquivalenceComparer = new SignatureTypeSymbolEquivalenceComparer(this); // There are only so many EquivalenceVisitors and GetHashCodeVisitors we can have. // Create them all up front. var equivalenceVisitorsBuilder = ImmutableArray.CreateBuilder <EquivalenceVisitor>(); equivalenceVisitorsBuilder.Add(new EquivalenceVisitor(this, compareMethodTypeParametersByIndex: true, objectAndDynamicCompareEqually: true)); equivalenceVisitorsBuilder.Add(new EquivalenceVisitor(this, compareMethodTypeParametersByIndex: true, objectAndDynamicCompareEqually: false)); equivalenceVisitorsBuilder.Add(new EquivalenceVisitor(this, compareMethodTypeParametersByIndex: false, objectAndDynamicCompareEqually: true)); equivalenceVisitorsBuilder.Add(new EquivalenceVisitor(this, compareMethodTypeParametersByIndex: false, objectAndDynamicCompareEqually: false)); _equivalenceVisitors = equivalenceVisitorsBuilder.ToImmutable(); var getHashCodeVisitorsBuilder = ImmutableArray.CreateBuilder <GetHashCodeVisitor>(); getHashCodeVisitorsBuilder.Add(new GetHashCodeVisitor(this, compareMethodTypeParametersByIndex: true, objectAndDynamicCompareEqually: true)); getHashCodeVisitorsBuilder.Add(new GetHashCodeVisitor(this, compareMethodTypeParametersByIndex: true, objectAndDynamicCompareEqually: false)); getHashCodeVisitorsBuilder.Add(new GetHashCodeVisitor(this, compareMethodTypeParametersByIndex: false, objectAndDynamicCompareEqually: true)); getHashCodeVisitorsBuilder.Add(new GetHashCodeVisitor(this, compareMethodTypeParametersByIndex: false, objectAndDynamicCompareEqually: false)); _getHashCodeVisitors = getHashCodeVisitorsBuilder.ToImmutable(); }