public ParameterSymbolEqualityComparer( SymbolEquivalenceComparer symbolEqualityComparer, bool distinguishRefFromOut) { _symbolEqualityComparer = symbolEqualityComparer; _distinguishRefFromOut = distinguishRefFromOut; }
public SymbolKeyReader() { _readSymbolKey = ReadSymbolKey; _readLocation = ReadLocation; Compilation = null !; Comparer = null !; }
public EquivalenceVisitor( SymbolEquivalenceComparer symbolEquivalenceComparer, bool compareMethodTypeParametersByIndex, bool objectAndDynamicCompareEqually) { _symbolEquivalenceComparer = symbolEquivalenceComparer; _compareMethodTypeParametersByIndex = compareMethodTypeParametersByIndex; _objectAndDynamicCompareEqually = objectAndDynamicCompareEqually; }
public override void Dispose() { base.Dispose(); Compilation = null; IgnoreAssemblyKey = false; Comparer = null; // Place us back in the pool for future use. s_readerPool.Free(this); }
public GetHashCodeVisitor( SymbolEquivalenceComparer symbolEquivalenceComparer, bool compareMethodTypeParametersByIndex, bool objectAndDynamicCompareEqually) { _symbolEquivalenceComparer = symbolEquivalenceComparer; _compareMethodTypeParametersByIndex = compareMethodTypeParametersByIndex; _objectAndDynamicCompareEqually = objectAndDynamicCompareEqually; _parameterAggregator = (acc, sym) => Hash.Combine(symbolEquivalenceComparer.ParameterEquivalenceComparer.GetHashCode(sym), acc); _symbolAggregator = (acc, sym) => GetHashCode(sym, acc); }
public override void Dispose() { base.Dispose(); _idToResult.Clear(); Compilation = null; IgnoreAssemblyKey = false; Comparer = null; _methodSymbolStack.Clear(); // Place us back in the pool for future use. s_readerPool.Free(this); }
private void Initialize( string data, Compilation compilation, bool ignoreAssemblyKey, CancellationToken cancellationToken) { base.Initialize(data, cancellationToken); Compilation = compilation; IgnoreAssemblyKey = ignoreAssemblyKey; Comparer = ignoreAssemblyKey ? SymbolEquivalenceComparer.IgnoreAssembliesInstance : SymbolEquivalenceComparer.Instance; }
private static bool ParametersMatch( ComparisonOptions options, Compilation compilation, ImmutableArray <IParameterSymbol> parameters, RefKind[] refKinds, SymbolKey[] typeKeys, CancellationToken cancellationToken) { if (parameters.Length != refKinds.Length) { return(false); } for (int i = 0; i < refKinds.Length; i++) { // The ref-out distinction is not interesting for SymbolKey because you can't overload // based on the difference. var parameter = parameters[i]; if (!SymbolEquivalenceComparer.AreRefKindsEquivalent(refKinds[i], parameter.RefKind, distinguishRefFromOut: false)) { return(false); } // We are checking parameters for equality, if they refer to method type parameters, // then we don't want to recurse through the method (which would then recurse right // back into the parameters). So we ask that type parameters only be checked by // metadataName to prevent that. var newOptions = new ComparisonOptions( options.IgnoreCase, options.IgnoreAssemblyKey, compareMethodTypeParametersByName: true); if (!typeKeys[i].Equals(SymbolKey.Create(parameter.Type, compilation, cancellationToken), newOptions)) { return(false); } } return(true); }
private static bool ParameterRefKindsMatch( ImmutableArray <IParameterSymbol> parameters, ImmutableArray <RefKind> refKinds) { if (parameters.Length != refKinds.Length) { return(false); } for (int i = 0; i < refKinds.Length; i++) { // The ref-out distinction is not interesting for SymbolKey because you can't overload // based on the difference. if (!SymbolEquivalenceComparer.AreRefKindsEquivalent( refKinds[i], parameters[i].RefKind, distinguishRefFromOut: false)) { return(false); } } return(true); }
private SignatureComparer(SymbolEquivalenceComparer symbolEquivalenceComparer) { this.symbolEquivalenceComparer = symbolEquivalenceComparer; }
public SignatureTypeSymbolEquivalenceComparer(SymbolEquivalenceComparer symbolEquivalenceComparer) { _symbolEquivalenceComparer = symbolEquivalenceComparer; }